Servlet响应之页面形式

一.前台重定向

在Servlet中,调用response的方法:response.sendRedirect("other.jsp");

private void doDel(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        int id = Integer.parseInt(req.getParameter("id"));
        CategoryService categoryService = ServiceProxyFactory.getProxy(CategoryService.class);
        Category category = new Category();
        category.setId(id);
        category.setCatStatus(Category.DISABLED);
        categoryService.update(category);
        resp.sendRedirect("category?opr=list");//前台重定向
    }

二.后台转发

在Servlet中,调用request的方法:request.getRequestDispatcher("other.jsp").forward(request, response);

private void initupdate(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        CategoryService categoryService = ServiceProxyFactory.getProxy(CategoryService.class);
        Category category = categoryService.getById(Integer.parseInt(req.getParameter("id")));
        req.setAttribute("category", category);
       //后台转发
        req.getRequestDispatcher("WEB-INF/category_update.jsp").forward(req, resp);
    }    

两种响应方式的比较:

前台重定向是指,客户端发送一个请求到服务器,服务器返回一个新的地址到客户端,由客户端再次发起请求,再得到第二次的响应页面

后台转发是由客户端发起一个请求,服务器接收到请求后,在服务器内部控制权的转移,是由服务器去请求,客户端并不知道是怎样转移的,因此客户端浏览器的地址不会显示出转向的地址。

比较:

1.地址栏:前台重定向后,地址栏会显示转向的地址,后台转发发生在服务器内部,地址栏不会变化。

2.请求次数:前台重定向至少发了两次请求,后台转发客户端只发了一次请求

3.数据方面:前台重定向会丢失request中的信息,而后台转发能在多个页面交互过程中实现请求数据的共享

4.行为方面:重定向是客户端行为,转发是服务器行为

三.选择

1、重定向的速度比转发慢,因为浏览器还得发出一个新的请求,如果在使用转发和重定向都无所谓的时候建议使用转发。

2、因为转发只能访问当前WEB的应用程序,所以不同WEB应用程序之间的访问,特别是要访问到另外一个WEB站点上的资源的情况,这个时候就只能使用重定向了。

3.一般项目的增删改需要跳转到其他页面,所以用重定向,而查询信息,一般只在当前页面,所以常用转发方式。

总之:通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择重定向。

posted @ 2020-06-30 22:12  木子李和三点水  阅读(340)  评论(0编辑  收藏  举报