栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

servlet 中的转发与重定向

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

servlet 中的转发与重定向

具体解释为响应重定向和请求转发,一看响应就是服务器端的,请求转发就是客户端的

在B/C系统         B/S 系统和C/S做的系统又什么区别啊?_百度知道 (baidu.com) 中,我们很多时候会进行这个servlet跳转到另一个servlet,比如说我们在一个官网的首页,然后需要进行登陆的话,会弹出登录页面,我们登录之后就又回到首页,这样的话需要servlet之间的跳转。那么我们有两种方式做这个事情。

页面重定向

页面重定向是我们浏览器给服务器发送了一个请求,然后servlet1响应给浏览器一个特殊的响应,告诉浏览器重新发送一个请求给servlet2,然后浏览器重新发送了一个请求给servlet2.在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

HttpServletResponse中定义了响应重定向的方法sendRedirect(String path)响应重定向是向目标(path)资源重新发送请求,响应重定向是使用GET方式提交请求,所以调用目标资源的doGet方法。

当然也可以在jsp页面中实现重定向:
<%response.sendRedirect("new.jsp");//重定向到new.jsp%>

响应重定向生成新的请求,所以当前请求中的数据不会再传到目标资源中。

//利用网页重定向跳转至欢迎界面
response.sendRedirect("HelloServlet");
2、请求转发

请求转发实现的原理是servlet与servlet之间在tomcat服务器中进行请求的转发,浏览器中之发送一个请求,这个转发的行为是web服务器内部做的,就相当于是tomcat做的。在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

使用步骤:

  1. 先使用请求中getRequestDispatcher(String path)方法获得请求转发器对象RequestDispatcher。
  2. 然后调用RequestDispatcher的forward(request,response)方法进行跳转。
  3. 修改LoginServlet中的跳转方法。
request.getRequestDispatcher("WEB-INF/page/login.jsp").forward(request, response);

在jsp页面中你也会看到通过下面的方式实现转发:

例:登录界面

在index.jsp中输入账号密码,提交表单,

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




Insert title here


账号:
密码:

FirstServlet.java

package com.company.project.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FirstServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public FirstServlet() {
		super();
		// TODO Auto-generated constructor stub
	}


	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String userId = request.getParameter("userId");
		String pw = request.getParameter("pw");

		if (userId != null && userId != "" && pw != null && pw != "") {
			request.getRequestDispatcher("LoginServlet").forward(request, response);
		}else {
			out.println("账号、密码不能为空");
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
}

LoginServlet.java

package com.company.project.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public LoginServlet() {
		super();
		// TODO Auto-generated constructor stub
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 设置相应内容类型
		response.setContentType("text/html;charset=utf-8");
		response.setCharacterEncoding("utf-8");

		// 获取输出流对象
		PrintWriter out = response.getWriter();

		String userId = request.getParameter("userId");
		String pw = request.getParameter("pw");

		if (userId.equals("2584966199") && pw.equals("zgy")) {
			out.println("恭喜你登录成功");
			//利用网页重定向跳转至欢迎界面
			response.sendRedirect("HelloServlet");
		} else {
			out.println("输入的账号密码有误");
		}

		// 关闭输出流对象
		out.close();
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
}
7.3 单控制器多业务处理Servlet实现

index.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>


	
		
		首页
	
	
		请选择你的操作
		
登录
注册
改密
个人资料

OperationServlet.java

package com.company.project.servlet;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/OperationServlet")
public class OperationServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public OperationServlet() {
		super();
	}
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String oper = request.getParameter("operation");
		if (oper != null || oper != "")
			switch (oper) {
			case "login":
				request.getRequestDispatcher("WEB-INF/page/login.jsp").forward(request, response);
				break;
			case "register":
				request.getRequestDispatcher("WEB-INF/page/register.jsp").forward(request, response);
				break;
			case "changePW":
				request.getRequestDispatcher("WEB-INF/page/changePW.jsp").forward(request, response);
				break;
			case "personal":
				request.getRequestDispatcher("WEB-INF/page/personal-data.jsp").forward(request, response);
				break;
			default:
				request.getRequestDispatcher("WEB-INF/page/index.jsp").forward(request, response);
			}

	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request, response);
	}
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/860170.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号