servlet请求的转发

1、请求的转发

         在服务器里面资源跳转的方式。将请求再转发到其他地址,转发过程中使用的是同一个request请求,转发后浏览器地址栏内容不变。 请求转发的过程发生在服务器内部,只能从当前应用内部查找相应的转发资源,而不能转发到其它应用的资源。

转发时(共享同一个request和response),两个servlet的访问顺序,传参:
1)访问顺序: 第1个GET方式,第2个走的是doGet()。 第1个POST方式,第2个走的是doPost()。
2)在第1个servlet转发代码之后,不能再调用类似 转发或重定向 的代码。否则会500异常,因为转发之后,不能再回到此处进行跳转到别的页面
3)读取页面参数: 由于是共享同一个request,请求页面的参数在两个servlet当中都可以读取出来。---请求页面中,GET方式的参数是在地址栏中通过"?name=Jack&age=22"上传,POST方式是通过组件上传的。
4)两个servlet之间传参: 在第1个中request.setAttribute(),在第2个中request.getAttribute();

2、实现方法

     转发通过方法forward(request,response)实现,他能将request对象转发到其他的servlet程序内,它能够共享request对象里面的资源。
具体实现方式如下:
req.getRequestDispatcher("/002").forward(request,response);
通过方法setAttribute(),可以将一个servlet程序内的资源转发到另一个servlet程序内,实现资源共享。

3、实例

servlet1:

public class RequestForwardServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		request.setAttribute("username", "周星星");
		RequestDispatcher dispatcher = request.getRequestDispatcher("/ResultServlet");
		dispatcher.forward(request, response);
	}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

servlet2

public class ResultServlet extends HttpServlet {
	public void doGet(HttpServletRequest request,
        HttpServletResponse response)throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		// 从作用域中取出来的是对象,转为String型,再使用
		String username = (String) request.getAttribute("username");
		if (username != null) {
			out.println("转发过来的用户名是:" + username + "
"); } } public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { doGet(request, response); } }

结果图

servlet请求的转发_第1张图片

 

你可能感兴趣的:(服务器,java-ee,intellij-idea)