• 转发重定向Servlet之请求转发与重定向区别


    文章结束给大家来个程序员笑话:[M]

        

             前言

                           在前面一片文章中笔者实现了一个简单的登录验证的功能,在验证中触及到了两种页面

                     跳转的方法  请求转发重定向。那么这两种方法到底有什么区分呢?在这篇文章中,笔者

                     将结合实例进行探究。

        

            请求转发

                        在现实的开辟中我们有着这样一种需求,即在客户端浏览器的一次请求中我们希望这个请求

                   (Request)可以转交给多个Servlet进行处置以实现更庞杂的逻辑功能,这种把一次HTTP请求移

                    交给多个Servlet进行处置的方法就是 请求转发。

                            须要明白的是请求转发是服务器端的行为,当客户端浏览器进行一次请求之后,请求转发这一

                        过程就不触及到客户端的行为了。服务器通过RequestDispatcher对象将“请求”的控制权交给

                        不同的Serlvet实现一些列的逻辑功能。

                            具体的过程如下:

                               客户端浏览器发送HTTP请求(LoginSerlvet)-->Tomcat容器初始化LoginSerlet、并调用相关

                            业务逻辑方法-->LoginServlet通过RequestDispatcher将请求控制权移交给CheckSerlvet-->

                            checkServlet实现登录验证。

                             转发和重定向

                            值得注意的是请求转发这一过程只能在同一web应用中进行

                            可以看出的是浏览器并未介入到请求转发这一过程中去,而且我们可以从浏览器的地址的

                            情况来讲明。虽然将请求转发给CheckServlet但是浏览器地址仍显示的是LoginSerlet

                            根据上图可以晓得请求转发的调用方法是通过RequestDispatcher对象来实现的,具体调用

                        代码如下:         

    //跳转到首页,请求转发方法
    request.getRequestDispatcher("index.jsp").forward(request, response);

                         或者这种方法实现调用:

    request.getRequestDispatcher("index.jsp").include(request, response);

                           那么这两种方法又有什么区分呢?

                               forward方法是把请求的内容转发到另外的一个servlet.而include是把另一个servlet处置过后

                                的内容拿过来.

                            口说无凭实例验证一下:

    //跳转到首页,请求转发方法
    			response.setCharacterEncoding("UTF-8");
    			response.getWriter().write("LoginCheck");
    			request.getRequestDispatcher("index.jsp").forward(request, response);

                             这种方法的页面的输出结果只显示index.jsp本身的内容。

                            转发和重定向

                           

                               接下来看看include方法:

                  

        每日一情理
    如果只看到太阳的黑点,那你的生活将缺少温暖;如果你只看到月亮的阴影,那么你的生命历程将难以找到光明;如果你总是发现朋友的缺点,你么你的人生旅程将难以找到知音;一样,如果你总希望自己完美无缺,假设你的这一愿望真的能如愿以偿,那么你最大的缺点就是没有缺点。
    //跳转到首页,请求转发方法
    			response.setCharacterEncoding("UTF-8");
    			response.getWriter().write("LoginCheck");
    			request.getRequestDispatcher("index.jsp").include(request, response);

                            

        转发和重定向

                              举个实例来讲,请求转发类似于这样一种情况:某某要申请XXX称号,申请书提交给A部门,

                             A部门实现相关流程之后提交给B部门,之后某某失掉同意书之后,虽然有B的介入,但是某某

                             并不知情。

        

                  重定向

                                  重定向是指在客户端发送一次请求的过程中,web服务器向客户端浏览器发送一个HTTP响应,

                           浏览器接受此响应,并按照服务其提供的URL发送一个新的HTTP请求给服务器,这一过程就称之

                          为重定向过程。须要注意的是重定向可以定位到任意的URL,不仅限于当前的web应用。这点也

                          造成了其不能同享request、response数据。

                                  转发和重定向

                                    重定向是在客户端发挥作用,通过请求新的地址实现页面转向。。
                                 重定向是通过浏览器从新请求地址,在地址栏中可以显示转向后的地址。
                                对于此,我们通过一个实例说明:一样以上篇的例子

                      

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		//Tomcat将表单信息封装到请求正文中
    		//通过request对象失掉表单信息
    		String name = request.getParameter("username");
    		String password = request.getParameter("password");
    		//验证
    		if(name.equals("kiritor")&&password.equals("kiritor"))
    		{
    			//跳转到首页,请求转发方法
    			response.setCharacterEncoding("UTF-8");
    			response.getWriter().write("LoginCheck");
    			request.getRequestDispatcher("index.jsp").include(request, response);
    		}
    		else {
    		    //跳转错误信息页面,请求重定向方法
    			response.sendRedirect("error.jsp");
    		}
    	}

                             这里我们输入错误的用户名密码

                                转发和重定向

                                 可以瞥见的是,使用重定向的方法地址栏发生了变化!而且重定向的资源可以不限于本web

                                 读者可以自行实验。

                                 一样以申请xxx称号为例,你将申请书投递到A部门,A部门对你说他们不担任这块的业务让你去

                                 B部门,所以你从新将申请书投递给B部门。重定向就是这个情理。

                             参考资料:

                                 http://blog.csdn.net/meiyalei/article/details/2129120      

         

        

    文章结束给大家分享下程序员的一些笑话语录: 腾讯的动作好快,2010年3月5日19时28分58秒,QQ同时在线人数1亿!刚刚看到编辑发布的文章,相差才2分钟,然后连专题页面都做出来了,他们早就预料到了吧?(其实,每人赠送10Q币,轻轻松松上两亿!)

    --------------------------------- 原创文章 By
    转发和重定向
    ---------------------------------

  • 相关阅读:
    【BZOJ】1671: [Usaco2005 Dec]Knights of Ni 骑士(bfs)
    【BZOJ】1689: [Usaco2005 Open] Muddy roads 泥泞的路(贪心)
    Maven使用
    上传图片
    Model、ModelMap和ModelAndView的使用详解
    Spring MVC 基于AnnotationFormatterFactory接口实现自定义的规则
    mybatis 分页插件PageHelper的简单使用
    Mybatis 自动生成mapper文件
    Tomcat部署时war和war exploded区别以及平时踩得坑
    springMVC @response 中文乱码解决
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3109170.html
Copyright © 2020-2023  润新知