Request对象

本文详细解析了HttpServletRequest在Java中的应用,包括获取请求头、参数、request域,请求转发等关键操作,并介绍了相关方法如获取内容长度、字符编码等。理解并利用这些技术有助于提升服务器端处理能力。
摘要由CSDN通过智能技术生成

Request翻译过来就是请求的意思,当客户端(网页)想要得到服务器提供的资源,就要向服务器发起请求,发起请求服务器会自动生成一个Request对象。我们可以使用这个request对象进行相应,请求转发等等事情。

关于request对象的应用我们大致可以分为以下部分:

  1. 获取头的参数
  2. 获取请求参数
  3. request域
  4. 请求转发
  5. 其他方法

我们在看request对象有关的类的时候是看Request类的实现类,我们下面讲的都是他的实现类HttpServletRequest类。

1. 获取请求头的参数

        //获取请求头
        request.getHeader("Host");     //一个请求头对应一个值
        Enumeration<String> headers = request.getHeaders("Accept");//一个请求头对应多个值
        while (headers.hasMoreElements()){
            String s = headers.nextElement();
            System.out.println(s);

        }

2. 获取请求参数

为了防止获取的数据产生乱码我们要使用setCharacterEncoding()来进行对请求的内容进行设置字符集编码
获取请求参数一共有三种方法

  1. getParameter()这个方法只能获取的是一个参数名对应一个参数值,比如表单里面的输入框
  2. getParameterValues()这个方法获取的是一个参数名对应多个参数值.比如表单里面的多选框
  3. getParameterMap()这个方法获取的是一个全部参数名与参数值组合的一个map集合
 request.setCharacterEncoding("UTF-8");
 String name = req.getParameter("name");
 String[] parameterValues = req.getParameterValues("love");
        //下面的方法返回的ArrayList是自己内部的一个ArrayList,进行删除,修改,增加,会报异常
 List<String> list = Arrays.asList(parameterValues);

 Map<String, String[]> parameterMap = req.getParameterMap();
        //1.遍历map集合
        //先得到key,再得到value
        //2.得到Entryset集合,再遍历这个集合
 Set<Map.Entry<String, String[]>> entries = parameterMap.entrySet();
for (Map.Entry<String, String[]> entry:entries) {
    String[] value = entry.getValue();
    String key = entry.getKey();
        }

3. request域

request的作用域只能是在当前请求中有效。这里举个例子当李四通过访问网页发送一个请求给服务器,发送的请求里面附带了参数名为name,参数值为lisi的信息给Aservlet,李四又发送了一个请求给服务器,发送的第二次请求是不能访问到参数名为name,参数值为lisi的信息。所以作用域只能在当前请求中有效,在别的请求是无法访问到改请求的参数信息。

4. 请求转发

请求转发通俗的来说就是用户张三发送一条请求到服务器的Aservlet中,Aservlet不能完成该请求,Aservlet又把请求转发给Bservlet,这个过程就叫做请求转发。在这个过程中Aservle只能把请求转发给服务器内部的资源,不可以转发给服务器的外部资源,这个过程中张三不知道Aservlet又把请求转发给Bservlet,所以请求转发对于用户张三来说就只请求了一次服务器。

请求转发的特点

  1. 只能转发到服务器的内部资源
  2. 对于客户端来说只发生一次请求
  3. 地址栏不发生改变(客户端请求url没有改变)
  4. request域在请求转发有效

下面是请求转发的代码

   //请求转发
        RequestDispatcher d1= request.getRequestDispatcher("/Bservlet");//里面的参数  是路径   得到转发器
        d1.forward(request,response);      //进行转发

5. 其他方法

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

  • int getContentLength():获取请求体的字节数,GET请求没有请求体,没有请求体返回-1;
  • String getContentType():获取请求类型,如果请求是GET,那么这个方法返回null;如果是POST请求,那么默认为application/x-www-form-urlencoded,表示请求体内容使用了URL编码;
  • String getMethod():返回请求方法,例如:GET
  • Locale getLocale():返回当前客户端浏览器的Locale。java.util.Locale表示国家和言语,这个东西在国际化中很有用;
  • String getCharacterEncoding():获取请求编码,如果没有setCharacterEncoding(),那么返回null,表示使用ISO-8859-1编码;
  • void setCharacterEncoding(String code):设置请求编码,只对请求体有效!注意,对于GET而言,没有请求体!!!所以此方法只能对POST请求中的参数有效!
  • String getContextPath():返回上下文路径,例如:/hello
  • String getQueryString():返回请求URL中的参数,例如:name=zhangSan
  • String getRequestURI():返回请求URI路径,例如:/hello/oneServlet
  • StringBuffer getRequestURL():返回请求URL路径,例如:http://localhost/hello/oneServlet,即返回除了参数以外的路径信息;
  • String getServletPath():返回Servlet路径,例如:/oneServlet
  • String getRemoteAddr():返回当前客户端的IP地址;
  • String getRemoteHost():返回当前客户端的主机名,但这个方法的实现还是获取IP地址;
  • String getScheme():返回请求协议,例如:http;
  • String getServerName():返回主机名,例如:localhost
  • 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());
3.2.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!");		
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值