Servlet中的request对象、重定向和转发的区别(6)

1.这里所说的request对象指的是HttpServletRequest对象,它代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,我们通过request对象调用里面的方法,可以获得客户发送给web服务器的各种信息。

2.request的常用方法

(1)获得客户机信息

    getRequestURL方法返回客户端发出请求时的完整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方法返回客户机所使用的网络端口号。
     getLocalAddr方法返回WEB服务器的IP地址。(127.0.0.1)
     getLocalName方法返回WEB服务器的主机名。(虚拟主机名:www.wenhao.com)

(2)获得客户机请求头
     getHeader(string name)方法:String 
     getHeaders(String name)方法:Enumeration 
     getHeaderNames()方法 
(3)获得客户机请求参数(客户端提交的数据) 
     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资源收到客户端请求后,通知服务器去调用另外一个         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应用
     重定向/表示web服务器的根目录,即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()是在服务器端运行;
   HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成.
   所以RequestDispatcher.forward()对于浏览器来说是“透明的”;
   而HttpServletResponse.sendRedirect()则不是。
(3).ServletContext.getRequestDispatcher(String url)中的url只能使用绝对路径;
   而ServletRequest.getRequestDispatcher(String url)中的url可以使用相对路径。
   因为ServletRequest具有相对路径的概念;而ServletContext对象无次概念。

7.RequestDispatcher对象从客户端获取请求request,并把它们传递给服务器上的servlet,html或jsp。 它有两个方法:

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

用来传递request的,可以一个Servlet接收request请求,另一个Servlet用这个request请 求来产生response。request传递的请求,response是客户端返回的信息。forward要在response到达客户端之前调用,也 就是 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);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值