JavaWeb | 您所在的位置:网站首页 › 转发什么图片可以考试过 › JavaWeb |
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: 重定向和请求转发nullMyServlet+ForwardServlet: 重定向和请求转发helloworld由此可知,MyServlet中的request对象获得了ForwardServlet的request对象设置的值 (请求转发属于一个request范围内) 而RedirectServlet的request对象的属性没有被获得 (属于独立的两个请求和响应过程) |
CopyRight 2018-2019 实验室设备网 版权所有 |