zoukankan      html  css  js  c++  java
  • Servlet中的request对象、重定向和转发的差别(6)

    1.这里所说的request对象指的是HttpServletRequest对象,它代表client的请求,当client通过HTTP协议訪问server时。HTTP请求头中的全部信息都封装在这个对象中。我们通过request对象调用里面的方法,能够获得客户发送给webserver的各种信息。

    2.request的经常用法

    (1)获得客户机信息

        getRequestURL方法返回client发出请求时的完整URL。(

                                   比如:url:http://localhost:8080/Summer_Exercise6/Demo1)
        getRequestURI方法返回请求行中的资源名部分。

                                  比如:uri:/Summer_Exercise6/Demo1)
        getQueryString 方法返回请求行中的參数部分。地址栏中?后面的參数(

                                   比如:query:name=wwh&age=12)
        getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于      Servlet的路径之后和查询參数之前的内容,它以“/”开头。

        getRemoteAddr方法返回发出请求的客户机的IP地址。
        getRemoteHost方法返回发出请求的客户机的完整主机名。


         getRemotePort方法返回客户机所使用的网络port号。
         getLocalAddr方法返回WEBserver的IP地址。

    (127.0.0.1)
         getLocalName方法返回WEBserver的主机名。(虚拟主机名:www.wenhao.com)

    (2)获得客户机请求头
         getHeader(string name)方法:String 
         getHeaders(String name)方法:Enumeration 
         getHeaderNames()方法 
    (3)获得客户机请求參数(client提交的数据) 
         getParameter(String)方法
         getParameterValues(String name)方法
         getParameterNames方法+BeanUtils框架

    3.request的常见应用

    (1)防盗链(下载文件,必须从指定站点进入,否则不同意下载文件。判段某个页面来自于何方,即referer请求头)
    (2)各种表单输入项数据的获取
    text、password、radio、checkbox、
    file、select、textarea、 hidden、
    (3)POST方式请求參数的中文乱码问题 
             GET方式请求參数的中文乱码问题(JSP)

    (4)request对象实现请求转发:请求转发指一个web资源收到client请求后,通知server去调用另外一个         web资源进行处理。
    (5)请求转发的应用场景:MVC设计模式
    (6)request对象提供了一个getRequestDispatcher方法,该方法返回一个RequestDispatcher对象。调用这个对象的forward方法能够实现请求转发。
    (7)request对象同一时候也是一个域对象。开发者通过request对象在实现转发时。把数据通过request对象带给其他web资源处理。
                 setAttribute方法 
                 getAttribute方法  
                removeAttribute方法
                getAttributeNames方法

    4.request要注意的地方:
       (1).转发是通过RequestDispatcher对象的forward(request,response)方法完毕的
       (2).forward()方法之前的输出,假设是输出到缓冲区,再转发到其它Servlet。那么原缓冲区的数据忽略不计
       (3).forward()方法之前的输出。假设真正输出到浏览器,再转发到其它Servlet。再转发到其它Servlet代码忽略不计
       (4).forward()方法之前的输出,假设是对响应头的设置。会保留到转发的其它Servlet中

    5.重定向和转发差别
       (1).转发仅仅能相对于当前web应用而言。不能转发到其他web应用
         重定向能够在当前web应用之外的其他web应用重写向资源
      (2).转发/表示当前web应用
         重定向/表示webserver的根文件夹。即webapps文件夹
       (3).转发时。浏览器地址栏不变
         重定向时,浏览器地址栏改变
      (4).转发是服务端的内部行为,浏览器不知
         重定向是浏览器和服务端的共同行为。浏览器必知
       (5).转发时二个Servlet共享request域对象
         重定向时二个Servlet独享request域对象
      (6).request具有二义性:
    a>请求对象
    b>域对象

    6.getRequestDispatcher()和sendRedirect()的差别

    (1).request.getRequestDispatcher()是请求转发,前后页面共享一个request ;
       response.sendRedirect()是又一次定向 前后页面不是一个request .
    (2).RequestDispatcher.forward()是在server端执行;
       HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完毕.
       所以RequestDispatcher.forward()对于浏览器来说是“透明的”。
       而HttpServletResponse.sendRedirect()则不是。
    (3).ServletContext.getRequestDispatcher(String url)中的url仅仅能使用绝对路径;
       而ServletRequest.getRequestDispatcher(String url)中的url能够使用相对路径。
       由于ServletRequest具有相对路径的概念。而ServletContext对象无次概念。

    7.RequestDispatcher对象从client获取请求request。并把它们传递给server上的servlet,html或jsp。

    它有两个方法:

    (1)void  forward(ServletRequest   request, ServletResponse   response)

    用来传递request的,能够一个Servlet接收request请求。还有一个Servlet用这个request请 求来产生response。

    request传递的请求。response是client返回的信息。forward要在response到达client之前调用,也 就是 before response body output has been flushed。假设不是的话,它会报出异常。

    (2).void include(ServletRequest request, ServletResponse response)

    用来记录保留request和response,以后不能再改动response里表示状态的信息。

    8.假设须要把请求转移到另外一个Web App中的某个地址。能够按以下的做法:

    (1). 获得另外一个Web App的ServletConext对象(currentServletContext.getContext(uripath)).

    (2). 调用ServletContext.getRequestDispatcher(String url)方法。

    eg:ServletContext.getRequestDispatcher("smserror.jsp").forward(request,respons);



  • 相关阅读:
    高斯模糊原理,算法
    SIFT算法详解
    第五章:状态图
    ANTLR4权威指南
    第八章:包图,组件图,部署图
    棋盘n皇后问题-递归
    普通页面引入React(使用和不使用JSX)
    浏览器环境
    DevTool-Network
    优化浏览器渲染
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7401166.html
Copyright © 2011-2022 走看看