request_requests - CSDN
request 订阅
request这个对象不用事先声明,就可以在JSP网页中使用,在编译为Servlet之后,它会转换为javax.servlet.http.HttpServletRequest形态的对象,HttpServletRequest对象是有关于客户端所发出的请求的对象,只要是有关于客户端请求的信息,都可以藉由它来取得,例如请求标头、请求方法、请求参数、客户端IP,客户端浏览器等等信息。 展开全文
request这个对象不用事先声明,就可以在JSP网页中使用,在编译为Servlet之后,它会转换为javax.servlet.http.HttpServletRequest形态的对象,HttpServletRequest对象是有关于客户端所发出的请求的对象,只要是有关于客户端请求的信息,都可以藉由它来取得,例如请求标头、请求方法、请求参数、客户端IP,客户端浏览器等等信息。
信息
外文名
Request
使用协议
HTTP/1.1
请求方法
GET
使用者
127.0.0.1
Request主要方法
getParameterNames():取得客户端所发出的请求参数名称.getParameter():可以让您指定请求参数名称,以取得对应的设定值.getServerName():请求的服务器.getProtocol():使用协议.getMethod():请求方法.getServerPort():请求端口号.getContextPath():Context路径.getServletPath(): Servlet路径.getRequestURI():URI路径.getQueryString():查询字符串.getRemoteAddr():使用者主机IP.getRemotePort():使用者使用端口号.
收起全文
精华内容
参与话题
  • request用法以及详解

    千次阅读 2019-07-04 19:50:50
    1request概述 request是Servlet.service()方法的一个参数,类型为javax.servlet.http.HttpServletRequest。在客户端发出每个请求时,服务器都会创建一个request对象,并把请求数据封装到request中,然后在调用...

    1request概述

    request是Servlet.service()方法的一个参数,类型为javax.servlet.http.HttpServletRequest。在客户端发出每个请求时,服务器都会创建一个request对象,并把请求数据封装到request中,然后在调用Servlet.service()方法时传递给service()方法,这说明在service()方法中可以通过request对象来获取请求数据。

     

    request的功能可以分为以下几种:

    l 封装了请求头数据;

    l 封装了请求正文数据,如果是GET请求,那么就没有正文;

    l request是一个域对象,可以把它当成Map来添加获取数据;

    l request提供了请求转发和请求包含功能。

     

    2request域方法

    request是域对象!在JavaWeb中一共四个域对象,其中ServletContext就是域对象,它在整个应用中只创建一个ServletContext对象。request其中一个,request可以在一个请求中共享数据。

    一个请求会创建一个request对象,如果在一个请求中经历了多个Servlet,那么多个Servlet就可以使用request来共享数据。现在我们还不知道如何在一个请求中经历之个Servlet,后面在学习请求转发和请求包含后就知道了。

    下面是request的域方法:


    void setAttribute(String name, Object value):用来存储一个对象,也可以称之为存储一个域属性,例如:servletContext.setAttribute(“xxx”, “XXX”),在request中保存了一个域属性,域属性名称为xxx,域属性的值为XXX。请注意,如果多次调用该方法,并且使用相同的name,那么会覆盖上一次的值,这一特性与Map相同;

    l Object getAttribute(String name):用来获取request中的数据,当前在获取之前需要先去存储才行,例如:String value = (String)request.getAttribute(“xxx”);,获取名为xxx的域属性;

    l void removeAttribute(String name):用来移除request中的域属性,如果参数name指定的域属性不存在,那么本方法什么都不做;

    l Enumeration getAttributeNames():获取所有域属性的名称;

     

    3request获取请求头数据

    request与请求头相关的方法有:

    l String getHeader(String name):获取指定名称的请求头;

    l Enumeration getHeaderNames():获取所有请求头名称;

    l int getIntHeader(String name):获取值为int类型的请求头。

     

    4request获取请求相关的其它方法

    request中还提供了与请求相关的其他方法,有些方法是为了我们更加便捷的方法请求头数据而设计,有些是与请求URL相关的方法。

    l int getContentLength():获取请求体的字节数,GET请求没有请求体,没有请求体返回-1;

    l String getContentType():获取请求类型,如果请求是GET,那么这个方法返回null;如果是POST请求,那么默认为application/x-www-form-urlencoded,表示请求体内容使用了URL编码;

    l String getMethod():返回请求方法,例如:GET

    l Locale getLocale():返回当前客户端浏览器的Locale。java.util.Locale表示国家和言语,这个东西在国际化中很有用;

    l String getCharacterEncoding():获取请求编码,如果没有setCharacterEncoding(),那么返回null,表示使用ISO-8859-1编码;

    l void setCharacterEncoding(String code):设置请求编码,只对请求体有效!注意,对于GET而言,没有请求体!!!所以此方法只能对POST请求中的参数有效!

    l String getContextPath():返回上下文路径,例如:/hello

    l String getQueryString():返回请求URL中的参数,例如:name=zhangSan

    l String getRequestURI():返回请求URI路径,例如:/hello/oneServlet

    l StringBuffer getRequestURL():返回请求URL路径,例如:http://localhost/hello/oneServlet,即返回除了参数以外的路径信息;

    l String getServletPath():返回Servlet路径,例如:/oneServlet

    l String getRemoteAddr():返回当前客户端的IP地址;

    l String getRemoteHost():返回当前客户端的主机名,但这个方法的实现还是获取IP地址;

    l String getScheme():返回请求协议,例如:http;

    l String getServerName():返回主机名,例如:localhost

    l int getServerPort():返回服务器端口号,例如:8080

     

    System.out.println("request.getContentLength(): " + request.getContentLength());

    System.out.println("request.getContentType(): " + request.getContentType());

    System.out.println("request.getContextPath(): " + request.getContextPath());

    System.out.println("request.getMethod(): " + request.getMethod());

    System.out.println("request.getLocale(): " + request.getLocale());

     

    System.out.println("request.getQueryString(): " + request.getQueryString());

    System.out.println("request.getRequestURI(): " + request.getRequestURI());

    System.out.println("request.getRequestURL(): " + request.getRequestURL());

    System.out.println("request.getServletPath(): " + request.getServletPath());

    System.out.println("request.getRemoteAddr(): " + request.getRemoteAddr());

    System.out.println("request.getRemoteHost(): " + request.getRemoteHost());

    System.out.println("request.getRemotePort(): " + request.getRemotePort());

    System.out.println("request.getScheme(): " + request.getScheme());

    System.out.println("request.getServerName(): " + request.getServerName());

    System.out.println("request.getServerPort(): " + request.getServerPort());

     

    4.1 案例:request.getRemoteAddr():封IP

      可以使用request.getRemoteAddr()方法获取客户端的IP地址,然后判断IP是否为禁用IP。

    String ip = request.getRemoteAddr();

    System.out.println(ip);

    if(ip.equals("127.0.0.1")) {

    response. getWriter().print("您的IP已被禁止!");

    } else {

    response.getWriter().print("Hello!");

    }

     

    5request获取请求参数

    最为常见的客户端传递参数方式有两种:

    l 浏览器地址栏直接输入:一定是GET请求;

    l 超链接:一定是GET请求;

    l 表单:可以是GET,也可以是POST,这取决与<form>的method属性值;

     

    GET请求和POST请求的区别:

    l GET请求:

    Ø 请求参数会在浏览器的地址栏中显示,所以不安全;

    Ø 请求参数长度限制长度在1K之内;

    Ø GET请求没有请求体,无法通过request.setCharacterEncoding()来设置参数的编码;

    l POST请求:

    Ø 请求参数不会显示浏览器的地址栏,相对安全;

    Ø 请求参数长度没有限制;

     

        <a href="/hello/ParamServlet?p1=v1&p2=v2">超链接</a>

        <hr/>

        <form action="/hello/ParamServlet" method="post">

         参数1:<input type="text" name="p1"/><br/>

         参数2:<input type="text" name="p2"/><br/>

         <input type="submit" value="提交"/>

        </form>

     

     

    下面是使用request获取请求参数的API:

    l String getParameter(String name):通过指定名称获取参数值;

     

    public void doGet(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    String v1 = request.getParameter("p1");

    String v2 = request.getParameter("p2");

    System.out.println("p1=" + v1);

    System.out.println("p2=" + v2);

    }

     

    public void doPost(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    String v1 = request.getParameter("p1");

    String v2 = request.getParameter("p2");

    System.out.println("p1=" + v1);

    System.out.println("p2=" + v2);

    }

     

    l String[] getParameterValues(String name):当多个参数名称相同时,可以使用方法来获取;

    <a href="/hello/ParamServlet?name=zhangSan&name=liSi">超链接</a>

    public void doGet(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    String[] names = request.getParameterValues("name");

    System.out.println(Arrays.toString(names));

    }

     

    l Enumeration getParameterNames():获取所有参数的名字;

        <form action="/hello/ParamServlet" method="post">

         参数1:<input type="text" name="p1"/><br/>

         参数2:<input type="text" name="p2"/><br/>

         <input type="submit" value="提交"/>

        </form>

    public void doPost(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    Enumeration names = request.getParameterNames();

    while(names.hasMoreElements()) {

    System.out.println(names.nextElement());

    }

    }

     

    l Map getParameterMap():获取所有参数封装到Map中,其中key为参数名,value为参数值,因为一个参数名称可能有多个值,所以参数值是String[],而不是String。

    <a href="/day05_1/ParamServlet?p1=v1&p1=vv1&p2=v2&p2=vv2">超链接</a>

    Map<String,String[]> paramMap = request.getParameterMap();

    for(String name : paramMap.keySet()) {

    String[] values = paramMap.get(name);

    System.out.println(name + ": " + Arrays.toString(values));

    }

    p2: [v2, vv2]

    p1: [v1, vv1]

     

    6 请求转发和请求包含

    无论是请求转发还是请求包含,都表示由多个Servlet共同来处理一个请求。例如Servlet1来处理请求,然后Servlet1又转发给Servlet2来继续处理这个请求。

     

    6.1 请求转发

    在AServlet中,把请求转发到BServlet:

    public class AServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    System.out.println("AServlet");

    RequestDispatcher rd = request.getRequestDispatcher("/BServlet");

    rd.forward(request, response);

    }

    }

    public class BServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    System.out.println("BServlet");

    }

    }

    Aservlet

    BServlet

     

    6.2 请求包含

    在AServlet中,把请求包含到BServlet:

    public class AServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    System.out.println("AServlet");

    RequestDispatcher rd = request.getRequestDispatcher("/BServlet");

    rd.include(request, response);

    }

    }

    public class BServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    System.out.println("BServlet");

    }

    }

    Aservlet

    BServlet

     

    6.3 请求转发与请求包含比较

    l 如果在AServlet中请求转发到BServlet,那么在AServlet中就不允许再输出响应体,即不能再使用response.getWriter()和response.getOutputStream()向客户端输出,这一工作应该由BServlet来完成;如果是使用请求包含,那么没有这个限制;

    l 请求转发虽然不能输出响应体,但还是可以设置响应头的,例如:response.setContentType(”text/html;charset=utf-8”);

    l 请求包含大多是应用在JSP页面中,完成多页面的合并;

    l 请求请求大多是应用在Servlet中,转发目标大多是JSP页面;

     

     

     

    6.4 请求转发与重定向比较

    l 请求转发是一个请求,而重定向是两个请求;

    l 请求转发后浏览器地址栏不会有变化,而重定向会有变化,因为重定向是两个请求;

    l 请求转发的目标只能是本应用中的资源,重定向的目标可以是其他应用;

    l 请求转发对AServlet和BServlet的请求方法是相同的,即要么都是GET,要么都是POST,因为请求转发是一个请求;

    l 重定向的第二个请求一定是GET;

     

    展开全文
  • request库的基本用法

    万次阅读 2018-02-27 21:49:54
    requesturllib获取urlrequest = requests.get("http://www...com")request = urllib2.Request("http://www....com",headers = headers)response = urllib2.urlopen(request)获取状态码 request...


     requesturllib
    获取urlrequest = requests.get("http://www...com")

    request = urllib2.Request("http://www....com",headers = headers)

    response = urllib2.urlopen(request)

    获取状态码   request.states_code  response.getcode()
    返回htmlrequest.textresponse.read()
    获得头部信息request.headersresponse.info()
    返回请求的urlrequest.urlresponse.geturl()
       
    request库的7个主要方法
    方法说明
    requests.request()构造一个请求,支撑以下各方法的基础方法
    requests.get()获取HTML网页的主要方法,对应于HTTP的GET
    requests.post()向HTML网页提交POST请求的方法,对应于HTTP的POST
    requests.head()获取HTML网页头信息的方法,对应于HTTP的HEAD
    requests.put()向HTML网页提交PUT请求的方法,对应于HTTP的PUT
    requests.patch()向HTML网页提交局部修改请求,对应于HTTP的PATCH
    requests.delete()向HTML页面提交删除请求,对应于HTTP的DELETE
      

    r = requests.get(url,params=None,**kwargs)

    ~url         :模拟获取页面的url连接

    ~params   :url中的额外参数,字典或字节流格式

    ~**kwargs :12个控制访问的参数


    Response对象属性

    属性    说明
    r.status_codeHTTP请求的返回状态,200表示连接成功,404表示失败
    r.textHTTP响应内容的字符串形式,即,url对应的页面内容
    r.encoding从HTTP header中猜测的响应内容编码方式
    r.apparent_encoding从内容中分析出的响应内容编码方式(备选编码方式)
    r.contentHTTP响应内容的二进制形式
    r.encoding:如果header中不存在charset,则认为编码为ISO‐8859‐1r.text根据r.encoding显示网页内容r.apparent_encoding:根据网页内容分析出的编码方式可以看作是r.encoding的备选


    Requests库异常

    异常说明
    requests.ConnectionError网络连接错误异常,如DNS查询失败、拒绝连接等
    requests.HTTPErrorHTTP错误异常
    requests.URLRequiredURL缺失异常
    requests.TooManyRedirects超过最大重定向次数,产生重定向异常
    requests.ConnectTimeout连接远程服务器超时异常
    requests.Timeout

    请求URL超时,产生超时异常


    爬取网页的通用代码框架

    import requests
    def getHTMLText(url):
        try:
            r = requests.get(url, timeout=30)
            r.raise_for_status()  # 如果状态不是200, 引发HTTPError异常
            r.encoding = r.apparent_encoding
            return r.text
        except:
            return "产生异常"
    
    if __name__=="__main__":
        url = "http://www.baidu.com"
        print(getHTMLText(url))


    展开全文
  • Request介绍

    2019-09-16 00:18:23
    request和response是服务器创建的两个对象给我们使用,request封装了浏览器发送过来的所有数据,如果是获取浏览器发送过来的信息那么就找request对象,如果想告诉浏览器展示信息那么就找response对象; 1.2 Requst...

    1. Requst对象获取请求行/头方法

    1.1 Request原理

    request和response是服务器创建的两个对象给我们使用,request封装了浏览器发送过来的所有数据,如果是获取浏览器发送过来的信息那么就找request对象,如果想告诉浏览器展示信息那么就找response对象;
    在这里插入图片描述

    1.2 Requst对象获取请求行方法

    1. 获取请求方式 :GET
    	String getMethod()  
    2. (*)获取虚拟目录:/day14
    	String getContextPath()
    3. 获取Servlet路径: /demo1
    	String getServletPath()
    4. 获取get方式请求参数:name=zhangsan
    	String getQueryString()
    5. (*)获取请求URI:/day14/demo1
    	String getRequestURI():		/day14/demo1	不全的路径
    	StringBuffer getRequestURL()  :http://localhost/day14/demo1   全路径
    	URL:统一资源定位符 : http://localhost/day14/demo1	中华人民共和国
    	URI:统一资源标识符 : /day14/demo1				共和国
    
    6. 获取协议及版本:HTTP/1.1
    	String getProtocol()
    7. 获取客户机的IP地址:
    	String getRemoteAddr()
    

    重点掌握:获取虚拟目录的getServletPath()方法,getRequestURI()方法作为一个次掌握的方法

    1.3 Requst对象获取请求头方法

    1. String getHeader(String name) ;根据指定的请求头获取请求头的值;
    2. Enumeration<E> getHeaderNames() ;获取所有请求头
    

    2.Request对象获取请求参数方法

    2.1 获取请求参数的三个方法

    String getParameter(String name)  :根据一个name获取一个value值		
    String[] getParameterValues(String name)  :根据一个name获取多个value值
    Map<String,String[]> getParameterMap()  :获取所有请求参数	
    

    2.2 请求参数中文乱码问题

    说明:从tomcat8.0之后,get请求参数不再乱码,但是post请求参数依然乱码

    原因:request缓冲区默认字符集是iso-8859-1不支持中文
    解决办法:在获取请求参数之前设置request缓冲区字符集为utf-8
    request.setCharacterEncoding("utf-8");
    

    3.Request对象请求转发和作为域对象

    3.1 请求转发实现页面跳转

    1.请求转发api:
    	request.getRequestDispatcher("/转发的路径,不带虚拟路径").forward(request,response);
    2.转发的特点:
    	2.1 请求转发是一次请求一次响应;
    	2.2 请求转发浏览器地址栏不会发生变化
    	2.3 请求转发api中路径不需要携带虚拟路径,默认是访问项目内部资源;
    

    3.2 request作为域对象数据共享(存值、取值、移除值)

    作用范围:一次请求范围,浏览器发送请求到服务器做成响应结束,请求转发在一次请求范围内;
    创建和销毁时间:浏览器发送请求之后服务器创建request对象,服务器做成相应之后销毁;
    存值、取值、移除值api:
    	存值:request.setAttribute(String name,Object value);
    	取值:Object value=request.getAttribute(String name);
    	移除值:request.removeAttribute(String name);
    

    4.登录案例以及BeanUtils

    4.1 案例分析

    在这里插入图片描述

    4.2 BeanUtils的使用

    //3.创建User对象
    User loginUser = new User();
    //3.2使用BeanUtils封装
    try {
        BeanUtils.populate(loginUser,req.getParameterMap());
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }
    

    注意:form表单的name属性要和javabean的属性一一对应;

    4.3 javabean规范

    就是一个标准的java类。
    javabean的成员变量和属性的区别:
    	成员变量:成员变量都是private修饰的;
    	属性:去掉setter和getter方法的set和get部分,将首字母变小写之后就是属性
    		setUsername()----->Username----->username;
    注意:往往javabean的属性和成员变量是一样,因为getter和setter方法都是idea工具根据成员变量自动生成的。
    

    5. 重点内容总结

    1、http协议-请求部分(4部分)
    	请求行:
    	  请求方式 url路径 协议/版本
    		POST /day14/servletDemo2 HTTP/1.1
    	请求头:都是一个key对应一个或者多个value值,多个value值用逗号隔开
    		user-agent:获取当前浏览器的类型和版本信息,下一次课文件下载会用到。
    		referer:当前请求的来源,用于防盗链和统计工作。
    	请求空行:就是一个换行
    	请求体:只有post请求才有请求体,get请求没有请求体。
    		存放post请求的请求参数: username=zhouxiangyang&password=123456
      继承体系:tomcat中的RequestFacade--->实现了HttpServletRequest接口--->继承ServletRequest
    2、request对象获取请求行的方法:
    	获取虚拟目录/路径:String contextPath=request.getContextPath();
    	获取URI:String uri=request.getRequestURI()
      
    3、获取请求参数的通用方法
    String getParameter(String name):根据一个name获取一个value值。
    String[] getParameterValues(String name):根据一个name获取多个value值。
    Map<String,String[]> getParameterMap():获取所有的请求参数
    4、请求中文乱码问题的原因和解决办法
    		get请求:在tomcat8之后中文就不再乱码。
    		post请求:中文会乱码
    			原因:request缓冲区字符集默认是iso-8859-1不支持中文
    			解决办法:在第一次获取请求参数之前设置缓冲区字符集
    				request.setCharacterEncoding("utf-8");
    
    5、请求转发实现页面跳转:
    	api:request.getRequestDispatcher("不带虚拟目录的路径").forward(request,response);
    	特点:
    		1、本质:请求转发是一次请求一次响应。
    		2、请求转发地址栏不会发生变化
    		3、请求转发的路径不带虚拟目录
    		4、请求转发只能跳转到项目内部资源
    6、request作为域对象共享数据
    	域对象:有一定作用范围的对象。
    	作用范围:一次请求,从浏览器发送亲请求到接收响应结束。请求转发在一次请求范围内。
    	存值、取值、移除值的API:
    		存值:void setAttribute(String name,Object value);
    		取值:Object getAttribute(String name);
    		移除值:void removeAttribute(String name);
    
    7、登录案例
    	1、案例的环境搭建
    			准备数据库
    			创建项目,创建包结构、拷贝资源代码、相关jar包、相关工具类和配置文件
    			相关jar包:数据库驱动jar、druid连接池、jdbcTemplate工具类,lib目录必须在WEB-INF	中,名字也必须叫lib。
    	2、登录逻辑分析
    	3、Servlet代码实现
    	4、dao操作数据库代码实现
    
    展开全文
  • http请求与Request常用方法

    万次阅读 2018-10-06 07:28:15
    一、http请求 HTTP请求报文由3部分组成(请求行+请求头+请求体): ①是请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。不过,当前的大多数浏览器只支持GET和POST,...

    一、http请求

    HTTP请求报文由3部分组成(请求行+请求头+请求体):

    ①是请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。不过,当前的大多数浏览器只支持GET和POST,Spring 3.0提供了一个HiddenHttpMethodFilter,允许你通过“_method”的表单参数指定这些特殊的HTTP方法(实际上还是通过POST提交表单)。服务端配置了HiddenHttpMethodFilter后,Spring会根据_method参数指定的值模拟出相应的HTTP方法,这样,就可以使用这些HTTP方法对处理方法进行映射了。 
    ②为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL,③是协议名称及版本号。 
    ④是HTTP的报文头,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。 
    ⑤是报文体,它将一个页面表单中的组件值通过param1=value1&param2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1&param2=value2”的方式传递请求参数。 
    对照上面的请求报文,我们把它进一步分解,你可以看到一幅更详细的结构图:  --------------------- 本文来自 咚浸暖的过去 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u010256388/article/details/68491509?utm_source=copy

    响应报文结构 

    HTTP的响应报文也由三部分组成(响应行+响应头+响应体): 

    ①报文协议及版本; 
    ②状态码及状态描述; 
    ③响应报文头,也是由多个属性组成; 
    ④响应报文体,即我们真正要的“干货”。 

    请求映射

    http请求信息包含六部分信息:

    ①请求方法,如GET或POST,表示提交的方式;

    ②URL,请求的地址信息;

    ③协议及版本;

    ④请求头信息(包括Cookie信息);

    ⑤回车换行(CRLF);

    ⑥请求内容区(即请求的内容或数据),如表单提交时的参数数据、URL请求参数(?abc=123 ?后边的)等。

    此处我们可以看到有①、②、④、⑥一般是可变的,因此我们可以这些信息进行请求到处理器的功能处理方法的映射,因此请求的映射分为如下几种:

    URL路径映射:使用URL映射请求到处理器的功能处理方法;

    请求方法映射限定:如限定功能处理方法只处理GET请求;

    请求参数映射限定:如限定只处理包含“abc”请求参数的请求;

    请求头映射限定:如限定只处理“Accept=application/json”的请求。

    二、Request

      HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。

    获得客户机信息

      getRequestURL方法返回客户端发出请求时的完整URL。
      getRequestURI方法返回请求行中的资源名部分。
      getQueryString 方法返回请求行中的参数部分。
      getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。
      getRemoteAddr方法返回发出请求的客户机的IP地址。
      getRemoteHost方法返回发出请求的客户机的完整主机名。
      getRemotePort方法返回客户机所使用的网络端口号。
      getLocalAddr方法返回WEB服务器的IP地址。
      getLocalName方法返回WEB服务器的主机名。

    获得客户机请求头

      getHeader(string name)方法:String 
      getHeaders(String name)方法:Enumeration 
      getHeaderNames()方法

    获得客户机请求参数(客户端提交的数据)

    • getParameter(String)方法(常用)
    • getParameterValues(String name)方法(常用)
    • getParameterNames()方法(不常用)
    • getParameterMap()方法(编写框架时常用)

    在服务器端使用getParameter方法和getParameterValues方法接收表单参数

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.security.Principal;
    import java.util.Enumeration;
    import java.util.Locale;
    import java.util.Map;
    
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletInputStream;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    
    
    /**
     * 代理线程中的HttpServletRequest变量,使代码中可以通过静态方法访问request
     * @version $Revision: 9961 $
     */
    public class Request {
    	/**
    	 * 输入参数
    	 */
    	public enum In {
    		/** */
    		RECORD {
    			/** {@inheritDoc} */
    			public String toString() {
    				return "record";
    			}
    		}
    	}
    
    	/**
    	 * 获取Request实例
    	 *
    	 * @return Request实例对象
    	 */
    	public static HttpServletRequest getInst() {
    		return (HttpServletRequest) AppMgr.threadVar("request");
    	}
    
    	/**
    	 * TODO$
    	 *
    	 * @param request
    	 *            void
    	 */
    	public static void setInst(HttpServletRequest request) {
    		AppMgr.setThreadVar("request", request);
    	}
    
    	/**
    	 * 获取当前用户
    	 *
    	 * @return 用户信息
    	 */
    	public static User curUser() {
    		try {
    			return (User) getSession(true).getAttribute(User.KEY_SESSION_USER);
    		} catch (Exception e) {
    			// 没有用户用guest处理
    			IBean guest = new Bean();
    			guest.set("USER_CODE", "guest");
    			guest.set("USER_NAME", "guest");
    			return new User(guest);
    		}
    	}
    
    	/**
    	 * 返回这个请求使用的HTTP方法(例如:GET、POST、PUT)。
    	 *
    	 * @return 方法名称
    	 */
    	public static String getMethod() {
    		return getInst().getMethod();
    	}
    
    	/**
    	 * 返回请求URL中访问路径。 如果有查询字符串存在,将不包括在返回值当中。 例如:
    	 * 请求URL为http://localhost:8080/web/main/list.do?id=1,将返回/web/main/list.do
    	 *
    	 * @return URI
    	 */
    	public static String getRequestURI() {
    		return getInst().getRequestURI();
    	}
    
    	/**
    	 * 返回请求的URL。包含协议(例如http和https)和端口,但不包含查询字符串。
    	 *
    	 * @return 包含URL的StringBuffer
    	 */
    	public static StringBuffer getRequestURL() {
    		return getInst().getRequestURL();
    	}
    
    	/**
    	 * 返回web应用名称路径,如为根目录,则返回""。 例如:
    	 * web应用名称是web,请求URL为http://localhost:8080/web/main/list.do?id=1,将返回/web
    	 *
    	 * @return Context Path
    	 */
    	public static String getContextPath() {
    		return getInst().getContextPath();
    	}
    
    	/**
    	 * 返回servlet路径。 例如:
    	 * web应用名称是web,请求URL为http://localhost:8080/web/main/list.do?
    	 * id=1,将返回/main/list.do
    	 *
    	 * @return Servlet Path
    	 */
    	public static String getServletPath() {
    		return getInst().getServletPath();
    	}
    
    	/**
    	 * 返回这个URL请求的Servlet路径之后的额外路径信息。 例如:
    	 * 请求URL为http://localhost:8080/web/main/list/product1/,
    	 * 其中Servlet的url-pattern为/main/list/* 则返回/product1/
    	 *
    	 * @return Path Info
    	 */
    	public static String getPathInfo() {
    		return getInst().getPathInfo();
    	}
    
    	/**
    	 * 这个方法获得这个请求的URL的Servlet路径之后的额外的路径信息,并将它转换成一个真实的路径。
    	 *
    	 * @return path
    	 */
    	public static String getPathTranslated() {
    		return getInst().getPathTranslated();
    	}
    
    	/**
    	 * 返回请求URL所包含的查询字符串。
    	 *
    	 * @return 查询字符串
    	 */
    	public static String getQueryString() {
    		return getInst().getQueryString();
    	}
    
    	/**
    	 * 返回一个请求头域的值。 如果这个请求头域不存在,这个方法返回null。
    	 *
    	 * @param name
    	 *            头域名称
    	 * @return 头域值
    	 */
    	public static String getHeader(String name) {
    		return getInst().getHeader(name);
    	}
    
    	/**
    	 * 返回一个请求头域的值列表。
    	 *
    	 * @param name
    	 *            头域名
    	 * @return 包含头域值的Enumeration对象
    	 */
    	public static Enumeration getHeaders(String name) {
    		return getInst().getHeaders(name);
    	}
    
    	/**
    	 * 返回请求的所有头域名。
    	 *
    	 * @return 包含所有头域名的Enumeration对象
    	 */
    	public static Enumeration getHeaderNames() {
    		return getInst().getHeaderNames();
    	}
    
    	/**
    	 * 返回指定的请求头域的值,这个值被转换成一个整数。
    	 *
    	 * @param name
    	 *            头域名
    	 * @return 值为整数的头域值
    	 */
    	public static int getIntHeader(String name) {
    		return getInst().getIntHeader(name);
    	}
    
    	/**
    	 * 返回指定的请求头域的值,这个值被转换成一个自1970-1-1日(GMT)以来的精确到毫秒的长整数。
    	 *
    	 * @param name
    	 *            头域名
    	 * @return 值为长整数的头域值
    	 */
    	public static long getDateHeader(String name) {
    		return getInst().getDateHeader(name);
    	}
    
    	/**
    	 * 返回一个Cookie数组,该数组包含这个请求中当前的所有Cookie。 如果这个请求中没有Cookie,返回一个空数组。
    	 *
    	 * @return Cookie数组
    	 */
    	public static Cookie[] getCookies() {
    		return getInst().getCookies();
    	}
    
    	/**
    	 * 返回当前请求的Session
    	 *
    	 * @param create
    	 *            没有有效的Session时,是否创建新Session,不创建返回null
    	 * @return Session
    	 */
    	public static HttpSession getSession(boolean create) {
    		return getInst().getSession(create);
    	}
    
    	/**
    	 * 返回当前请求的Session
    	 *
    	 * @return Session
    	 */
    	public static HttpSession getSession() {
    		return getInst().getSession();
    	}
    
    	/**
    	 * 返回当前请求的Session Id
    	 *
    	 * @return Session Id
    	 */
    	public static String getRequestedSessionId() {
    		return getInst().getRequestedSessionId();
    	}
    
    	/**
    	 * 检查当前请求的Session是否可用。
    	 *
    	 * @return boolean值,是否可用
    	 */
    	public static boolean isRequestedSessionIdValid() {
    		return getInst().isRequestedSessionIdValid();
    	}
    
    	/**
    	 * 判断请求的Session Id是否是通过客户端的一个cookie提供的。
    	 *
    	 * @return boolean值,是否是cookie提供
    	 */
    	public static boolean isRequestedSessionIdFromCookie() {
    		return getInst().isRequestedSessionIdFromCookie();
    	}
    
    	/**
    	 * 如果这个请求的Session Id是通过客户端的URL的一部分提供的,该方法返回真,否则返回假。
    	 *
    	 * @return boolean值,Session Id是否来自URL
    	 */
    	public static boolean isRequestedSessionIdFromURL() {
    		return getInst().isRequestedSessionIdFromURL();
    	}
    
    	/**
    	 * 返回这个请求的身份验证模式。
    	 *
    	 * @return 如BASIC_AUTH, FORM_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH(suitable
    	 *         for == comparison) 或者其他模式 如果请求没有验证, 则返回null
    	 */
    	public static String getAuthType() {
    		return getInst().getAuthType();
    	}
    
    	/**
    	 * 返回作了验证请求的用户名。 如果在请求中没有用户名信息,这个方法返回null。
    	 *
    	 * @return 用户名
    	 */
    	public static String getRemoteUser() {
    		return getInst().getRemoteUser();
    	}
    
    	/**
    	 * 判断验证用户是否包含在一个角色中。
    	 *
    	 * @param role
    	 *            角色名称
    	 * @return 是否包含在角色中
    	 */
    	public static boolean isUserInRole(String role) {
    		return getInst().isUserInRole(role);
    	}
    
    	/**
    	 * 返回一个java.security.Principal对象,此对象包含了验证用的名称。 如果没有验证用户,则返回null。
    	 *
    	 * @return Principal对象
    	 */
    	public static Principal getUserPrincipal() {
    		return getInst().getUserPrincipal();
    	}
    
    	/**
    	 * 返回这个请求所用的协议,其形式是协议/主版本号.次版本号。例如对于一个HTTP1.0的请求,该方法返回HTTP/1.0。
    	 *
    	 * @return 请求协议
    	 */
    	public static String getProtocol() {
    		return getInst().getProtocol();
    	}
    
    	/**
    	 * 返回请求URL所使用的Scheme。 例如: http、https或者ftp等。
    	 *
    	 * @return Scheme名称
    	 */
    	public static String getScheme() {
    		return getInst().getScheme();
    	}
    
    	/**
    	 * 返回接收请求的服务器的主机名。
    	 *
    	 * @return 主机名
    	 */
    	public static String getServerName() {
    		return getInst().getServerName();
    	}
    
    	/**
    	 * 返回接收请求的端口号。
    	 *
    	 * @return 端口号
    	 */
    	public static int getServerPort() {
    		return getInst().getServerPort();
    	}
    
    	/**
    	 * 返回请求者的IP地址。
    	 *
    	 * @return IP地址
    	 */
    	public static String getRemoteAddr() {
    		return getInst().getRemoteAddr();
    	}
    
    	/**
    	 * 返回请求者的主机名称。不能或者选择不解析主机名,将会直接返回IP地址。
    	 *
    	 * @return 主机名称
    	 */
    	public static String getRemoteHost() {
    		return getInst().getRemoteHost();
    	}
    
    	/**
    	 * 返回请求者的端口号。
    	 *
    	 * @return 端口号
    	 */
    	public static int getRemotePort() {
    		return getInst().getRemotePort();
    	}
    
    	/**
    	 * 获得本地IP。
    	 *
    	 * @return IP地址
    	 */
    	public static String getLocalAddr() {
    		return getInst().getLocalAddr();
    	}
    
    	/**
    	 * 获得本地主机名。
    	 *
    	 * @return 主机名
    	 */
    	public static String getLocalName() {
    		return getInst().getLocalName();
    	}
    
    	/**
    	 * 获得本地端口号
    	 *
    	 * @return 端口号
    	 */
    	public static int getLocalPort() {
    		return getInst().getLocalPort();
    	}
    
    	/**
    	 * 重新设置请求的字符编码。 这个方法必需在读取请求参数或流之前调用。
    	 *
    	 * @param env
    	 *            字符编码名称
    	 * @throws UnsupportedEncodingException
    	 *             如果字符编码不可用
    	 */
    	public static void setCharacterEncoding(String env)
    			throws UnsupportedEncodingException {
    		getInst().setCharacterEncoding(env);
    	}
    
    	/**
    	 * 返回指定请求参数的值,如果这个参数不存在返回null。
    	 *
    	 * @param name
    	 *            参数名称
    	 * @return 参数值
    	 */
    	public static String getParameter(String name) {
    		return getInst().getParameter(name);
    	}
    
    	/**
    	 * 返回指定请求参数的值(String数组),如果这个参数不存在返回null。
    	 *
    	 * @param name
    	 *            参数名称
    	 * @return 参数值数组
    	 */
    	public static String[] getParameterValues(String name) {
    		return getInst().getParameterValues(name);
    	}
    
    	/**
    	 * 返回所有参数名的列表。
    	 *
    	 * @return 包含所有参数名的Enumeration对象
    	 */
    	public static Enumeration getParameterNames() {
    		return getInst().getParameterNames();
    	}
    
    	/**
    	 * 返回请求参数的Map对象
    	 *
    	 * @return Map对象
    	 */
    	public static Map getParameterMap() {
    		return getInst().getParameterMap();
    	}
    
    	/**
    	 * 返回一个输入流。
    	 *
    	 * @return 输入流对象ServletInputStream
    	 * @throws IOException
    	 *             IO异常
    	 */
    	public static ServletInputStream getInputStream() throws IOException {
    		return getInst().getInputStream();
    	}
    
    	/**
    	 * 返回读取请求的BufferedReader。
    	 *
    	 * @return BufferedReader
    	 * @throws IOException
    	 *             IO异常
    	 * @throws IllegalStateException
    	 *             如果这个请求的输入流已经被getInputStream调用获得
    	 */
    	public static BufferedReader getReader() throws IOException,
    			IllegalStateException {
    		return getInst().getReader();
    	}
    
    	/**
    	 * 返回请求的字符编码。
    	 *
    	 * @return 字符编码
    	 */
    	public static String getCharacterEncoding() {
    		return getInst().getCharacterEncoding();
    	}
    
    	/**
    	 * 请求内容的长度,如果长度未知就返回-1。
    	 *
    	 * @return 长度整数
    	 */
    	public static int getContentLength() {
    		return getInst().getContentLength();
    	}
    
    	/**
    	 * 返回请求的MIME类型,如果类型未知返回null。
    	 *
    	 * @return MIME类型
    	 */
    	public static String getContentType() {
    		return getInst().getContentType();
    	}
    
    	/**
    	 * 得到Locale对象。
    	 *
    	 * @return Locale对象
    	 */
    	public static Locale getLocale() {
    		return getInst().getLocale();
    	}
    
    	/**
    	 * 得到Locale对象列表。
    	 *
    	 * @return 包含所有Locale对象的Enumeration
    	 */
    	public static Enumeration getLocales() {
    		return getInst().getLocales();
    	}
    
    	/**
    	 * 请求是否使用了安全通道,如https
    	 *
    	 * @return boolean值
    	 */
    	public static boolean isSecure() {
    		return getInst().isSecure();
    	}
    
    	/**
    	 * 返回指定属性的值(Object),如不存在则返回null。
    	 *
    	 * @param name
    	 *            属性名
    	 * @return 值对象
    	 */
    	public static Object getAttribute(String name) {
    		return getInst().getAttribute(name);
    	}
    
    	/**
    	 * 设置一个属性
    	 *
    	 * @param name
    	 *            属性名称
    	 * @param o
    	 *            值对象
    	 */
    	public static void setAttribute(String name, Object o) {
    		getInst().setAttribute(name, o);
    	}
    
    	/**
    	 * 得到所有request中的属性名称列表。
    	 *
    	 * @return Enumeration对象,包含了所有request属性名称。
    	 */
    	public static Enumeration getAttributeNames() {
    		return getInst().getAttributeNames();
    	}
    
    	/**
    	 * 移除一个request属性。
    	 *
    	 * @param name
    	 *            属性名称
    	 */
    	public static void removeAttribute(String name) {
    		getInst().removeAttribute(name);
    	}
    
    	/**
    	 * 返回一个指定路径的RequestDispatcher对象,如果过路径无效返回null。
    	 *
    	 * @param path
    	 *            路径
    	 * @return RequestDispatcher对象
    	 */
    	public static RequestDispatcher getRequestDispatcher(String path) {
    		return getInst().getRequestDispatcher(path);
    	}
    
    	/**
    	 * 获取DATA标签内参数值
    	 *
    	 * @param name
    	 *            DATA标签内的编码
    	 * @return 编码值
    	 */
    	public static String getParamBean(String name) {
    		String rtnVal = "";
    		IBean paramBean = (IBean) AppMgr.threadVar("paramBean");
    		if (paramBean != null) {
    			rtnVal = String.valueOf(paramBean.get(name));
    		}
    		return rtnVal != null && rtnVal.length() > 0 ? rtnVal : getInst()
    				.getParameter(name);
    	}
    
    	public static String getWebAddress() {
    		StringBuffer webAddress = new StringBuffer(getInst().getScheme());
    		webAddress.append("://").append(getInst().getServerName());
    		if (80!=getInst().getServerPort()) {
    			webAddress.append(":").append(getInst().getServerPort());
    		}
    		webAddress.append(getInst().getContextPath());
    		return webAddress.toString()+"/";
    	}
    }
    

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • Request参数解析

    千次阅读 2018-12-12 21:24:45
    Request结构 Request结构主要由以下部分组成 URL字段 Header字段 Body字段 Form字段、PostForm字段和MultipartForm字段 type Request struct { Method string URL *url.URL Proto string // "...
  • Request对象和Response对象是由服务器创建的,Response对象来获取请求消息,Response对象来设置响应消息 tomcat会根据请求url中的资源路径创建对应的Servlet对象 tomcat会创建Request和Response对象,Request对象中...
  • 2.服务器会自动创建request对象和response对象,request对象中封装请求消息数据。不是编程人员创建的,我们只是使用它们。我们使用Request获取请求消息,我们使用Response设置响应消息 3.服务器将request和response...
  • Request原理 @WebServlet("/demo1") public class ServletDemo1 implements Servlet { @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException...
  • request对象 request和response对象是由服务器创建的。我们来使用它们 request对象是来获取请求消息,response对象是来设置响应消息 request和response的内部实现 public interface HttpServletRequest extends ...
  • Request与Response

    2020-07-12 21:29:41
    这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的...
  • 关于request获取请求参数

    万次阅读 2018-09-17 18:01:28
    并且request.getParameter(),request.getInputStream(),request.getReader()这三种方法是有冲突的,因为流只能读取一次。   HttpServletRequest.getParameter();  debug看到HttpServletRequ...
  • request的几种常用方法

    千次阅读 2018-12-18 10:22:16
    request.getparameter(String key); 返回由前台传过来的一个指定的参数的属性值; request.getAttribute(String name); 返回由name指定的属性值
  • request详解

    万次阅读 2018-01-11 10:00:11
    前篇说到了Response容器对象,这篇我们就来看一下Request容器对象,之前也说过了,这个两个容器对象是相对应的,每次用户请求服务器的时候web容器就会给创建这对容器对象,他们是共存亡的,当然Request除了有一个...
  • @RequestBody的使用

    万次阅读 多人点赞 2019-12-02 13:06:54
    提示:建议一定要看后面的@RequestBody的核心逻辑源码以及六个重要结论!本文前半部分的内容都是一些基 本知识常识,可选择性跳过。 声明:本文是基于SpringBoot,进行的演示说明。 基础知识介绍: @Request...
  • HTTP请求中,如果是get请求,那么表单参数以name=value&name1=value1的形式附到url的后面,如果是post请求,那么表单参数是在请求体中,也是以name=value&name1=value1的形式在请求体中。...RequestURL:http://127.
  • 1:The current request is not a multipart request 1:from中涉及到图片上传的就要用post提交方式。否则就会报这个错误。 2:第一中:在jsp页面的&lt;head&gt;&lt;/head&gt;标签里面加上&lt...
  • 400 Bad Request-异常总结!!!

    万次阅读 2019-05-20 13:19:48
    400 Bad Request 今天调试项目时遇到了400 Bad Request的异常,上网找了一些资料,但是对我帮助不大,主要还是他们的描述与我的具体问题不一样。 后来经过各种尝试,发现了问题所在,就是因为我在请求访问接口时传入...
  • nginx 出现413 Request Entity Too Large问题的解决方法

    万次阅读 多人点赞 2015-05-07 00:07:19
    使用php上传图片(大小1.9M),出现 nginx: 413 Request Entity Too Large 错误。 根据经验是服务器限制了上传文件的大小,但php默认的文件上传是2M,应该不会出现问题。 打开php.ini,把 upload_max_filesize 和 ...
  • 解决Nginx 400 Bad Request问题的一些思路

    万次阅读 多人点赞 2018-04-30 17:27:54
    400 Bad Request是一种HTTP错误状态码。HTTP/1.1对400 Bad Request的定义主要是:1、语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。2、请求参数有误。 在这段时间笔者遇到...
  • 关于request.getServletPath(),request.getContextPath()的总结

    万次阅读 多人点赞 2019-11-09 19:24:45
    最近对于request中的几种“路径”有点混淆,查找网上资源都没有很好的总结,希望此文章能够帮助我理解一下这几种“路径”。 +++++++++++++++++++++++++++++++++++++++++++++++++ 本文章主要讨论以下几种request...
1 2 3 4 5 ... 20
收藏数 1,914,681
精华内容 765,872
关键字:

request