其他分享
首页 > 其他分享> > HttpServletRequest和HttpServletResponse

HttpServletRequest和HttpServletResponse

作者:互联网

Servlet路径配置方式

  1、 全路径匹配: 以 / 开始 ,/a /aa/bb

    localhost:8080/项目名称/aa/bb

  2.、路径匹配 , 前半段匹配: 以 / 开始 , 但是以 * 结束: /a/* /*。* 其实是一个通配符,匹配任意文字

    localhost:8080/项目名称/aa/bb

  3.、以扩展名匹配:没有/, 以 * 开始 ,*.扩展名 :*.aa *.bb

ServletContext:

  1、每个web工程都只有一个ServletContext对象。 说白了也就是不管在哪个servlet里面,获取到的这个类的对象都是同一个。

    ServletContext context = getServletContext();

  2、作用:获取全局配置参数;获取web工程中的资源;存取数据,servlet间共享数据 域对象

  3、ServletContext 何时创建, 何时销毁:服务器启动的时候,会为托管的每一个web应用程序,创建一个ServletContext对象;从服务器移除托管,或者是关闭服务器时候销毁。

   ServletContext 的作用范围:只要在这个项目里面,都可以取。 只要同一个项目。 A项目 存, 在B项目取,是取不到的,因为ServletContext对象不同。

HttpServletRequest:

  这个对象封装了客户端提交过来的一切数据。 

  1、可以获取客户端请求头信息:

    //得到一个枚举集合  
        Enumeration<String> headerNames = request.getHeaderNames();
        while (headerNames.hasMoreElements()) {
            String name = (String) headerNames.nextElement();
            String value = request.getHeader(name);
            System.out.println(name+"="+value);     
        }

  2、获取客户端提交过来的数据

     String name = request.getParameter("name");
        String address = request.getParameter("address");
        System.out.println("name="+name);
        System.out.println("address="+address);

        -------------------------------------------------

        //name=zhangsan&name=lisi&name=wangwu 一个key可以对应多个值。
        Map<String, String[]> map = request.getParameterMap();
        
        Set<String> keySet = map.keySet();
        Iterator<String> iterator = keySet.iterator();
        while (iterator.hasNext()) {
            String key = (String) iterator.next();
            System.out.println("key="+key + "--的值总数有:"+map.get(key).length);
            String value = map.get(key)[0];
            String value1 = map.get(key)[1];
            String value2 = map.get(key)[2];
            
            System.out.println(key+" ======= "+ value + "=" + value1 + "="+ value2);
        }

  3、获取中文数据:客户端提交数据给服务器端,如果数据中带有中文的话,有可能会出现乱码情况,那么可以参照以下方法解决。

    GET方式:

    1)代码转码:

       String username = request.getParameter("username");
            String password = request.getParameter("password");
            
            System.out.println("userName="+username+"==password="+password);
            
            //get请求过来的数据,在url地址栏上就已经经过编码了,所以我们取到的就是乱码,
            //tomcat收到了这批数据,getParameter 默认使用ISO-8859-1去解码
            
            //先让文字回到ISO-8859-1对应的字节数组 , 然后再按utf-8组拼字符串
            username = new String(username.getBytes("ISO-8859-1") , "UTF-8");
            System.out.println("userName="+username+"==password="+password);

    2)可以在tomcat里面做设置处理 conf/server.xml 加上URIEncoding="utf-8"

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

    POST方式:

      request.setCharacterEncoding("UTF-8");  这行设置一定要写在getParameter之前。

HTTPServletResponse:负责返回数据给客户端。 

  1、响应的数据中有中文,那么有可能出现中文乱码

    1)以字符流输出:response.getWriter()

      //1. 指定输出到客户端的时候,这些文字使用UTF-8编码
      response.setCharacterEncoding("UTF-8");

      //2. 直接规定浏览器看这份数据的时候,使用什么编码来看。
      response.setHeader("Content-Type", "text/html; charset=UTF-8");

      response.getWriter().write("我爱中国");

    2)以字节流输出:response.getOutputStream()

      //1. 指定浏览器看这份数据使用的码表
      response.setHeader("Content-Type", "text/html;charset=UTF-8");

      //2. 指定输出的中文用的码表
      response.getOutputStream().write("我爱中国.".getBytes("UTF-8"));

    3)不管是字节流还是字符流,直接使用一行代码就可以了。

      response.setContentType("text/html;charset=UTF-8");  然后在写数据即可。

标签:HttpServletRequest,UTF,name,request,HttpServletResponse,key,response,String
来源: https://www.cnblogs.com/gengshao/p/15914406.html