JavaWeb 您所在的位置:网站首页 转发什么图片可以考试过 JavaWeb

JavaWeb

2024-06-05 12:17| 来源: 网络整理| 查看: 265

1.重定向 sendRedirect()

重定向是指页面定位到某个新地址,之前的request失效,进入一个新的request (相当于两次请求),通过request对象的sendRedirect()方法实现。

例:

resopnse.sendRedirect("/ch01/index.html");

(上述语句定向到当前站点(ch01)的根目录下的index.html页面)

重定向实现页面跳转前后台均参与,首先浏览器发出请求到服务器,服务器找到资源后通知前台,再由浏览器进行跳转。 注意:跳转前后浏览器地址栏URL发生改变!

2.请求转发 forward()

请求转发是指将请求(request)再转发到另一个页面,此过程还是在Request的范围内,通过RequestDispatcher接口的forward()方法实现,该方法可以将请求转发到另外一个资源 (从当前servlet跳转到另一个servlet),并让该资源对浏览器的请求进行响应。

RequestDispatcher接口有两个方法:

forward():请求转发,从当前servlet跳转到另一个servlet;include():引入其他servlet。

RequestDispatcher接口的实例由 HttpRequest对象的getRequestDispatcher()方法实现。

例:

//创建接口实例 RequestDispatcher rd = request.getRequestDispatcher(path); //调用forward方法 rd.forward(request,response);

请求转发是服务器行为,且转发前后共享同一个request对象,上一个页面中写入request中的属性的值在跳转后仍存在。 注意:页面跳转前后浏览器地址栏URL不会改变!

通过请求参数传递来验证forward()与sendRedirect()方法在request对象共享上的区别:

(1)编写MyServlet.java,获取request中的test属性值,并打印。

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("/MyServlet") public class MyServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html:charset=GBK"); //获取test属性值 String test = (String)request.getAttribute("test"); //获取输出流 PrintWriter out =response.getWriter(); out.print("重定向和请求转发"); //打印test属性 out.print(test); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

(2)编写RedirectServlet.java,并设置test属性值为“helloworld”。

import java.io.IOException; 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("/redirect") public class RedirectServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html:charset=GBK"); //设置test属性值 request.setAttribute("test", "helloworld"); System.out.println("重定向前"); response.sendRedirect(request.getContextPath()+"/MyServlet"); System.out.print("重定向后"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

(3)编写ForwardServlet,设置request对象中的test属性值为“helloword”

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("/ForwardServlet") public class ForwardServlet extends HttpServlet { public ForwardServlet() { super(); // TODO Auto-generated constructor stub } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=GBK"); RequestDispatcher rd = request.getRequestDispatcher("/MyServlet"); rd.forward(request, response); request.setAttribute("test","helloWorld"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

运行结果:

MyServlet+RedirectServlet:

重定向和请求转发null

MyServlet+ForwardServlet:

重定向和请求转发helloworld

由此可知,MyServlet中的request对象获得了ForwardServlet的request对象设置的值 (请求转发属于一个request范围内) 而RedirectServlet的request对象的属性没有被获得 (属于独立的两个请求和响应过程)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有