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-09-17 18:01:28
    并且request.getParameter(),request.getInputStream(),request.getReader()这三种方法是有冲突的,因为流只能读取一次。   HttpServletRequest.getParameter();  debug看到HttpServletRequ...
  • Request和Response详解

    2020-03-16 19:38:24
    Request 1.request对象和response对象的原理 1.request和response对象是由服务器创建的,我们来使用他们 2.request对象对象是来获取请求消息,response对象是来设置响应消息 request对象继承体系结构: ...
  • Request&Response

    2019-01-21 09:28:08
    1 request和response 1.1获取请求参数 1.1.1通过request的getParameter方法获取请求参数。 此方法在ServletRequest接口中,而doGet/doPost方法中传入的参数是HttpServletRequest,是servletRequest的子接口。 ...
  • Request和Response讲解

    万次阅读 2018-06-24 20:55:37
    1.Request和Response概述我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应的response。service方法中的request的类型是ServletRequest,而...
  • 概念:Hyper Text Transfer Protocol 超文本传输协议 传输协议:定义了,客户端和服务器端通信时,发送数据的格式 特点: 基于TCP/IP的高级协议 默认端口号:80 基于请求/响应模型的:一次请求对应一次响应 ...
  • request的几种常用方法

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

    万次阅读 多人点赞 2019-12-02 13:06:54
    提示:建议一定要看后面的@RequestBody的核心逻辑源码以及六个重要结论!本文前半部分的内容都是一些基 本知识常识,可选择性跳过。 声明:本文是基于SpringBoot,进行的演示说明。 基础知识介绍: @Request...
  • request详解

    万次阅读 2018-01-11 10:00:11
    前篇说到了Response容器对象,这篇我们就来看一下Request容器对象,之前也说过了,这个两个容器对象是相对应的,每次用户请求服务器的时候web容器就会给创建这对容器对象,他们是共存亡的,当然Request除了有一个...
  • 配置、方法、传参都正确,但是就是报错Current request is not a multipart request,最后发现测试工具的content-type问题,在测试接口的时候content-type设置为application/json,上传文件接口测试去掉content-type...
  • 文件上传报错:Current request is not a multipart request 文件上传报错:Could not parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util....
  • urllib.request.Request的用法

    万次阅读 多人点赞 2018-10-16 15:23:26
    我们可以利用urlopen()方法可以实现最基本请求的发起,但这几个简单的参数并不足以 ...也许这就是一下两个方式的区别吧:respponse = urllib.request.urlopen(url)req = urllib.request.Request(url) res
  • Java中获取request对象的几种方法

    万次阅读 2017-07-15 10:20:15
    1.通过注解获取(很简单,推荐): public class Hello { @Autowired HttpServletRequest request; //这里可以获取到request } 2.在web.xml中配置一个... org.springframework.web.context.request.Request
  • 最近再弄springboot,再上传文件时出现【MultipartException: Current request is not a multipart request】的错误 以下是需要检查的点: 1.页面<head></head>标签里面加上<meta ...
  • 在servlet请求中,使用request获取整个请求url: String url="http://" + request.getServerName() //服务器地址 + ":" + request.getServerPort() //端口号 + request.getRequestURI(); 然后判断有
  • 常见Request获取URL的方法

    万次阅读 2018-06-11 14:13:38
    1、request.getRequestURL()返回的是完整的url,...2、request.getRequestURI()得到的是request URL的部分值,并且web容器没有decode过的3、request.getContextPath() 返回 the context of the request.4、reque...
  • 有一个评论接口,不一定会上传文件(图片),没有上传图片时就报The current request is not a multipart request错误,怎么过滤掉啊,就是当没有上传文件的时候就不进入上传文件接口
1 2 3 4 5 ... 20
收藏数 1,939,623
精华内容 775,849
关键字:

request