Servlet开发(三)Request对象常用方法、常见应用

(WEB学习笔记 二)
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息。简而言之,Request对象是用来获取服务器端发送的各种数据。

一、Request常用方法

1、获得客户机信息

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

具体函数使用以及运行后得到的结果示例如下:

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

                //getRequestURL方法:返回客户端发出请求时的完整URL
                         System.out.println(request.getRequestURL());//http://localhost:8080/JavaServlet/RequestDemo3

                //getRequestURI方法返回请求行中的资源名部分                                                    System.out.println(request.getRequestURI()); //JavaServlet2/RequestDemo3

          //getQueryString 方法返回请求行中的参数部分
        //http://localhost:8080/JavaServlet/RequestDemo3?username=zhangsan
        System.out.println(request.getQueryString());  //username=zhangsan

        //getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。
        //System.out.println(request.getPathInfo()); //null

         //getRemoteAddr方法返回发出请求的客户机的IP地址  
        System.out.println(request.getRemoteAddr());  //127.0.0.1

         //getRemoteHost方法返回发出请求的客户机的完整主机名    如果对应的ip地址有在dns注册那么返回的是地址www.163.com,如果没有则返回对应的ip的地址
        System.out.println(request.getRemoteHost());

         //getRemotePort方法返回客户机所使用的网络端口号
        System.out.println(request.getRemotePort());//远程端口号,不是服务器的端口号  57480

        System.out.println(request.getServerPort());//获取的服务器的端口号  8080

         //获取客户端请求的方法 GET POST方式
        System.out.println(request.getMethod());//GET

          //获取当前资源 
        System.out.println(request.getServletPath()); // /RequestDemo3

        //获取WEB服务器的主机名
        System.out.println(request.getLocalName());  //MS-20160306KAOF

    }

2、获得客户机请求头信息

getHeader方法(String):获取单个请求头信息
getHeaders方法 (枚举):获取所有的请求头中指定的某个头信息的全部内容
getHeaderNames方法 :获取全部的请求头信息

请求头信息示例:

            Accept  
            text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
            Accept-Encoding 
            gzip, deflate
            Accept-Language 
            zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
            Cache-Control   
            max-age=0
            Connection  
            keep-alive
            Cookie  
            JSESSIONID=8CCB5ACFDC24ABD3374D5E6F1BF396A5
            Host    
            localhost:8080
            User-Agent  
            Mozilla/5.0 (Windows NT 5.1; rv:46.0) Gecko/20100101 Firefox/46.0

具体示例代码:

public class RequestDemo1 extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

         //获取单个请求头信息
         String headValue=request.getHeader("Accept-Encoding");
         System.out.println(headValue);

        //获取所有的请求头指定的某个头信息的全部内容,Enumeration装的是指定的属性的全部的value值
         Enumeration<String> en=request.getHeaders("Accept-Encoding");
         while(en.hasMoreElements()){
             String value=en.nextElement();
             System.out.println(value);
         }

       //获取全部的头信息   Enumeration装的是所有的key值
       en=request.getHeaderNames();         
       while(en.hasMoreElements()){
           String name=en.nextElement();//所有的key值
           String value =request.getHeader(name);//根据key值获取value值
           System.out.println("name="+name+"-----value="+value);
       }        
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        doGet(request, response);
    }
}

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

getParameter方法:获取一个值
getParameterValues(String name)方法:获取一个数组
getParameterNames方法:枚举
getParameterMap方法:map集合

http://localhost:8080/JavaServlet/RequestDemo2?name=123&name=zhangsan ,?后即为请求参数


    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //获取单个的请求参数信息   
        //http://localhost:8080/JavaServlet/RequestDemo2?name=123        
        String name = request.getParameter("name");
        System.out.println(name);

        //获取多个同名的参数 
        //http://localhost:8080/JavaServlet/RequestDemo2?name=123&name=zhangsan 
        String [] names = request.getParameterValues("name");
        for(String sname : names){
            System.out.println(sname);
        }

         //获取所有的请求参数
        //http://localhost:8080/JavaServlet/RequestDemo2?name=123&name=zhangsan     
         Enumeration<String> en =request.getParameterNames();
         while(en.hasMoreElements()){
             String key = en.nextElement();
             String vale=request.getParameter(key);
             System.out.println(key+"----"+vale);  //name----123 因为key值唯一,所以只有一个值
         }

         //获取请求参数 以map的形式保存
        //http://localhost:8080/JavaServlet/RequestDemo2?name=123&name=zhangsan&password=123456

        Map<String,Object> map = request.getParameterMap();     
         //对map迭代 获取所有的key 和value值
        for(Map.Entry<String, Object> me : map.entrySet()){         
            String name = me.getKey();
            String [] value = (String []) me.getValue();
            System.out.println(name+"---"+value[0]);  //name---123  password---123456
        }
}   

(注:浏览器访问网址http://localhost:8080/JavaServlet/RequestDemo2?name=123 ,?代表设置参数)

二、request常见应用

1、各种表单输入项数据的获取

各种类型的表单信息都可以获取,text、password、radio、checkbox、file、select、textarea、 hidden、image、button
如果我们建立了一个注册表单,则需要把先获取用户填写的注册信息,再保存到数据库以备调用

表单示例:

<!DOCTYPE html>
<html>
  <head>
    <title>form.html</title>
  </head>  
  <body>
    <!-- action是指定提交表单的位置      method是指提交的方式  有 get方式 和post方法 -->
    <form action="/JavaServlet/RequestDemo4" method="post">
        <!-- name属性,提交表单的时候,根据name属性获取值 -->
        用户名:<input type = "text" name="username"> <br/>
        密码:<input type="password" name="password"><br/>
        性别:<input type = "radio" name="gender" value = "male"><input  type="radio" name="gender" value="femal"><br/>     
        所在地:<select name="city">
            <option value="beijing">北京</option>
            <option value="hangzhou">杭州</option>
            <option value="shanghai">上海</option>
        </select><br/>
        爱好:<input type="checkbox" name="likes" value="single"/>唱歌
    <input type="checkbox" name="likes" value="dance"/>跳舞
    <input type="checkbox" name="likes" value="sleep"/>睡觉
    <input type="checkbox" name="likes" value="football"/>足球
    <br/>    
    备注:<textarea rows="5" cols="60" name="description"></textarea><br/>
     大头照:<input type="file"  name="image">       
     <input type = "hidden" name = "id" value = "123456">
     <input type = "submit" value = "提交">     
    </form>
  </body>
</html>

利用Request对象获取表单数据:
表单的数据都是请求参数,可以以请求参数的方式获取

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

         //表单的数据都是请求参数,可以以请求参数的方式获取
         String username =request.getParameter("username");
         String password = request.getParameter("password");
         String gender =request.getParameter("gender");
         String city =request.getParameter("city");
         String [] likes =request.getParameterValues("likes");
         String description=request.getParameter("description");
         String id=request.getParameter("id");

         //得到的数据封装到领域对象中传递到业务层  完成相关的操作         
            System.out.println("用户名是"+username+"密码是:"+password+"性别是:"+gender+"所在城市是:"+city+"描述是:"+description+"隐藏的id是:"+id);

            for (String ss : likes) {
                System.out.println("爱好是:"+ss);
            }           
    }

2、请求参数的中文乱码问题 (以表单输入为例)

这里分为post方式和get方式,两种提交方式的解决方法不一样

示例表单:

<!DOCTYPE html>
<html>
  <head>
    <title>form2.html</title>
  </head>  
  <body>    
     <form action="/JavaServlet/RequestDemo5" method="post">
            用户名:<input type="text" name="username">
            <input type="submit" value="提交">
    </form>    
    <form action="/JavaServlet/RequestDemo5" method="get">
            用户名:<input type="text" name="username2">
            <input type="submit" value="提交">
    </form>
  </body>
</html>
1)解决post方式乱码 问题

解决post方式乱码,直接设置编码集即可

request.setCharacterEncoding("UTF-8");
2)解决get方式乱码

用户只能通过手动转换,把默认的编码集”ISO-8859-1”转换为我们所需要的编码集就可以了

String uname=new String(username.getBytes("ISO-8859-1"),"UTF-8");  
public void test1(HttpServletRequest request) throws IOException{   

         // 解决post方式乱码 直接设置编码集即可
        request.setCharacterEncoding("UTF-8");      
        String username = request.getParameter("username");
        System.out.println(username);
    }

     //解决get方式的乱码
    public void test2(HttpServletRequest request) throws IOException{  

        String username = request.getParameter("username2");
         String uname= new String(username.getBytes("ISO-8859-1"),"UTF-8");
         System.out.println(uname);
    }
3)如果是get方式乱码 ,还可以直接改变服务器的配置实现(不推荐使用)

打开 tomcat 安装目录 –> conf –> server.xml :
在下面代码中加入 URIEncoding=”UTF-8” 即可

<Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443"
    URIEncoding="UTF-8"  
/>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整全套资源下载地址:https://download.csdn.net/download/qq_27595745/70761177 【完整课程列表】 完整版Java web开发教程PPT课件 Java开发进阶教程 第01章 JavaScript简介以及基本语法(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第03章 表单验证,常用函数(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第04章 自定义web服务器(共14页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第06章 SERVLET(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第07章 JSP语法及运行过程(共13页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第08章 JSP内置对象(共22页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第09章 jstl、el、java bean(共18页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第10章 过滤器、监听器、自定义标签(共19页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第11章 AJAX实现(共11页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第12章 自定义mvc框架(共11页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第13章 spring ioc aop(共18页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第14章 spring mvc介绍,原理以及搭建(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第15章 spring mvc核心对象拦截器(共26页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第17章 自定义orm框架(共11页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第18章 mybatis框架的搭建以及应用(共13页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第19章 mybatis高级应用(共21页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第20章 数据库连接池,缓存(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第22章 常用框架的介绍以及环境搭建(共16页).pptx JS课程案例ebookHTML\网上书店需求文档.doc

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值