Resquest的详细介绍

原创 2018年04月15日 17:48:24
一、HttpServletRequest
1、HttpServletRequest概述
我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应response。service方法中的request的类型是ServletRequest,而doGet/doPost方法的request的类型是HttpServletRequest,HttpServletRequest是ServletRequest的子接口,功能和方法更加强大。request对象是JSP中重要的对象,每个request对象封装着一次用户请求,并且所有的请求参数都被封装在request对象中,因此request对象是获取请求参数的重要途径。
2、Request的运行流程
同Response。
3、request获得请求内容
请求行
获得客户端的请求方式: String  getMethod();
获得请求的资源: String  getContextPath();---web应用的名称
String getRequestURI()
StringBuffer getRequestURL()
String getContextPath() ---web应用的名称
String getQueryString() ---- get提交url地址后的参数字符串
    
//1、获得请求方式
             String method = request.getMethod();
             System.out.println("method:"+method);
             //2、获得请求的资源相关的内容
             String requestURI = request.getRequestURI();
             StringBuffer requestURL = request.getRequestURL();
             System.out.println("uri:"+requestURI);
             System.out.println("url:"+requestURL);
             //获得web应用的名称
             String contextPath = request.getContextPath();
             System.out.println("web应用:"+contextPath);
             //地址后的参数的字符串
             String queryString = request.getQueryString();
             System.out.println(queryString);
             //3、获得客户机的信息---获得访问者IP地址
             String remoteAddr = request.getRemoteAddr();
             System.out.println("IP:"+remoteAddr);
注意:request获得客户机(客户端)的一些信息
request.getRemoteAddr() --- 获得访问的客户端IP地址

请求头
获得指定请求头: String  getHeader(String  name);
获取所有请求头的名称:java.util.Enumeration<String> getHeaderNames();
long getDateHeader(String name)
String getHeader(String name)
Enumeration getHeaderNames()
Enumeration getHeaders(String name)
int getIntHeader(String name)
            //1、获得指定的头
             String header = request.getHeader("User-Agent");
             System.out.println(header);
             //2、获得所有的头的名称
             Enumeration<String> headerNames = request.getHeaderNames();
             while(headerNames.hasMoreElements()){
                    String headerName = headerNames.nextElement();
                    String headerValue = request.getHeader(headerName);
                    System.out.println(headerName+":"+headerValue);
             }
 
referer 头的作用:执行该此访问的来源做防盗链

请求体
请求体中的内容是通过post提交的请求参数,格式是:
username=zhangsan&password=123&hobby=football&hobby=basketball
key ---------------------- value
username                [zhangsan]
password                [123]
hobby                    [football,basketball]
 
获取paramName请求参数的值:
String getParameter(String paramName);
paramName请求参数的值,当该请求参数有多个值时,该方法将返回多个值所组成的数组:
String[] getParameterValues(String name);
获取所有请求参数名和参数值所组成的Map对象
Map<String,String[]> getParameterMap();
获取所有请求参数名所组成的Enumeration对象
Enumeration getParameterNames();
            //1、获得单个表单值
             String username = request.getParameter("username");
             System.out.println(username);
             String password = request.getParameter("password");
             System.out.println(password);
             //2、获得多个表单的值
             String[] hobbys = request.getParameterValues("hobby");
             for(String hobby:hobbys){
                    System.out.println(hobby);
             }
             //3、获得所有的请求参数的名称
             Enumeration<String> parameterNames = request.getParameterNames();
             while(parameterNames.hasMoreElements()){
                    System.out.println(parameterNames.nextElement());
             }
             System.out.println("------------------");
             //4、获得所有的参数 参数封装到一个Map<String,String[]>
             Map<String, String[]> parameterMap = request.getParameterMap();
             for(Map.Entry<String, String[]> entry:parameterMap.entrySet()){
                    System.out.println(entry.getKey());
                    for(String str:entry.getValue()){
                           System.out.println(str);
                    }
                    System.out.println("---------------------------");
             }
   注:Map复杂了一点,但是比较有用。          
 
注意:不论是get请求方式还是post请求方式,上述的方法一样可以获得。

4、Request的其他功能
a、request是一个域对象
request对象也是一个存储数据的区域对象,所以也具有如下方法:
setAttribute(String name, Object o)
getAttribute(String name)
removeAttribute(String name)
 
注意:request域的作用范围:一次请求中
在request中存储数据,然后通过请求转发能够获取到(重定向没有数据)。(a与b结合来看)
 
b、request完成请求转发
获得请求转发器----path是转发的地址
RequestDispatcher getRequestDispatcher(String path)
通过转发器对象转发
requestDispathcer.forward(ServletRequest request, ServletResponse response)
//servlet1将请求转发给servlet2
             RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet2");
             dispatcher.forward(request, response);
注意:转发与重定向的区别?
        1)重定向两次请求,转发一次请求
        2)重定向地址栏的地址变化,转发地址不变
        3)重新定向可以访问外部网站 转发只能访问内部资源
        4)转发的性能要优于重定向
重定向是服务器外部行为,请求转发是服务器内部行为。
 
注意:ServletContext域与Request域的生命周期比较?
        ServletContext:
            创建:服务器启动
            销毁:服务器关闭
            域的作用范围:整个web应用
        request:
            创建:访问时创建request
            销毁:响应结束request销毁
            域的作用范围:一次请求中
 
注意:客户端地址与服务器端地址的写法?
    客户端地址:是客户端去访问服务器的地址,服务器外部的地址。其特点:写上Web应用的名称。
    客户端地址有:直接输入地址;重定向;
 
    服务器端地址:服务器内部资源跳转的地址。其特点:不需要写Web应用的名称。
 

解决获取数据的中文乱码问题?
//设置request的编码-----只适合post方式
             request.setCharacterEncoding("UTF-8");
 
乱码过程:王五----使用UTF-8编码------使用iso8859-1解码------乱码xxx,
实现乱码的解决:xxx------使用iso8859-1编码------使用utf-8解码----王五
编码:str.getByte("iso8859-1");
new String(string,"utf-8");
       //get方式乱码解决
        String username = request.getParameter("username");//乱码
       //先用iso8859-1编码,再使用utf-8解码
        username = new String(username.getBytes("iso8859-1"),"UTF-8");
适用于get  post
get不适用于表单提交。
 
四、总结
1、request获得行的内容(请求参数)
request.getMethod();
request.getRequestURI();
request.getRequestURL();
request.getContextPath();
request.getRemoteAddr();
 
2、request获得头的内容
request.getHeader(name);
 
3、request获得体(请求参数)
String  request.getParameter(name);
Map<String, String[]> request.getParameterMap();
String[] request.getParametherValues(name);
注意:客户端发送的参数到服务器端获得的值都是字符串。
 
中文乱码问题:
post:
request.setCharacterEncoding("UTF-8");
get(原始方法):
 username = new String(username.getBytes("iso8859-1"),"UTF-8");
 
4、request其他内容 (转发和域)
在域存储数据:
request.setAttribute(name,value);
request.getAtteribute(name);
转发:
request.getRequestDispatcher(转发的地址(服务器内部地址)).forward(request,response);

参考连接http://www.cnblogs.com/scalpel-ct/p/7502986.html
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZJ_2420441444/article/details/79951232

Response和Resquest基础知识+实际开发中需要注意的点(经典)

一、response ServletResponse -- 最基本的response对象,提供了一个响应对象应该具有的最基本的功能 | |-HttpServletResponse 针对于HTTP...
  • escdelete
  • escdelete
  • 2014-02-24 20:39:27
  • 1609

springmvc获取resquest/response

java代码:HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttri...
  • Blue_Red_1314
  • Blue_Red_1314
  • 2017-11-20 11:33:17
  • 121

【JSP开发】response重定向和resquest转发

response重定向 package cn.edu.Response; import java.io.IOException; import java.io.PrintWriter; im...
  • u013517797
  • u013517797
  • 2015-01-31 16:09:38
  • 1476

JSP中内置对象之resquest

Request对象是JSP的内置对象,用来处理从客户端浏览器发送来的表单。#注:jsp获取到提交表单中的汉字可能会出现编码问题,可先将得到的乱码字符串打散成一个ISO-8859-1的byte数组,然后...
  • friskit
  • friskit
  • 2011-07-14 10:54:12
  • 965

Resquest学习

equest的生命周期:浏览器发出的每一次请求都是一个新的。—即使是页面刷新也是一个新的request对象request的编码如果我们没有手动设,则是默认编码—返回值为:nullString char...
  • weixin_37720904
  • weixin_37720904
  • 2017-07-10 15:29:10
  • 119

asp.net几个对象案例

  • 2010年08月08日 20:17
  • 40KB
  • 下载

Servlet——Response 和 Resquest

当一个 Servlet 首次被 Web 服务器创建时,会传递一个 Response 和 Request 对象过去。     Web 服务器收到客户端的 HTTP 请求时,会针对每一次请求分别创建...
  • u010940949
  • u010940949
  • 2013-12-25 09:07:48
  • 743

三大作用域request、session、application

  • 2011年04月28日 17:47
  • 760B
  • 下载

ServletContext对象(3)、转发和请求重定向、HttpServletResquest域对象

ServletContext对象: 一、 ServletContext对象的核心API(作用): 5、转发和请求重定向: 1)RequestDispatcher getRequestDispat...
  • qq_34944851
  • qq_34944851
  • 2016-11-21 13:38:44
  • 388

Cookie的介绍,生命和路径的设置

Cookie遵循的是Http协议,虽然Http协议是无状态协议,也就是说每次的请求都是独立的,无法记录前一次请求的状态,但是我们可以通过Cookie来执行会话跟踪的技术。它是服务器在客户端用来寄存数据...
  • dawiebazhanlang
  • dawiebazhanlang
  • 2018-04-01 12:29:19
  • 9
收藏助手
不良信息举报
您举报文章:Resquest的详细介绍
举报原因:
原因补充:

(最多只允许输入30个字)