day04(后端实习技能)HTTPServletRequest和HTTPServletResponse的知识总结

第一部分:
首先理解ServlContext的用法:
1.1定义
ServletContext官方叫servlet上下文。服务器会为每一个工程创建对象,这个对象就是ServletContext对象,这个对象是全局唯一的。而且工程内部的所有servlet都共享这个对象。所以叫全局应用程序共享对象。
1.2.ServletContext的作用

  1. 获取全局配置参数
    例子:ServletContextDemo这个web工程;配置信息在web.xml里面设置;创建两个类,分别检验是否获取同一个的配置参数。
  2. 获取web工程中的资源
    例子:demo03;(
    加载配置文件,web工程目录下的config.propertites。
    步骤:创建对象;指定载入数据源(这里需要小心路径的事项);读取
  3. 存取数据,servlet间共享数据 域对象
    例子:demo04(注册登录例子,包括统计登录次数,次数就是利用contextServlet的共享域对象)

ServletContext 何时创建, 何时销毁?

服务器启动的时候,会为托管的每一个web应用程序,创建一个ServletContext对象

从服务器移除托管,或者是关闭服务器。

  • ServletContext 的作用范围

只要在这个项目里面,都可以取。 只要同一个项目。 A项目 存, 在B项目取,是取不到的? ServletContext对象不同。

下面讲述HTTPServletRequest部分
在Servlet的API中,定义了一个HttpServletRequest接口,它继承ServletRequest接口,专门用于封装Http的请求,由于HTTP请求包含着请求行,请求头和请求体三部分,因此在HttpServletRequest中分别定义了接受请求行,请求头和请求体的相关方法。

  1. 可以获取客户端请求头信息
    例子:RequestDemo01
    //得到一个枚举集合
    Enumeration headerNames = request.getHeaderNames();
    while (headerNames.hasMoreElements()) {
    String name = (String) headerNames.next Element();
    String value = request.getHeader(name);
    System.out.println(name+"="+value)
    }

  2. 获取客户端提交过来的数据
    例子:RequestDemo01
    //获取姓名和地址
    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. 获取中文数据
    例子:requestDemo02

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

  • 如果是GET方式

    扫描二维码关注公众号,回复: 5898708 查看本文章
    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);
      
       直接在tomcat里面做配置,以后get请求过来的数据永远都是用UTF-8编码。 
      
    2. 可以在tomcat里面做设置处理 conf/server.xml 加上URIEncoding=“utf-8”

  • 如果是POST方式

      这个说的是设置请求体里面的文字编码。  get方式,用这行,有用吗? ---> 没用
      request.setCharacterEncoding("UTF-8");
    
      这行设置一定要写在getParameter之前。
    

HTTPServletResponse的简介部分

Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。

request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了。要向客户机输出数据,只需要找response对象就行了。

例子:ResponseDemo01

  • 输出数据到页面上

      //以字符流的方式写数据	
      //response.getWriter().write("<h1>hello response...</h1>");
      
      //以字节流的方式写数据 
      response.getOutputStream().write("hello response2222...".getBytes());
    
  • 响应的数据中有中文,那么有可能出现中文乱码
    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"));

源码链接:https://pan.baidu.com/s/1Ab_YnYOtKUQIvQK-F-1NFw

猜你喜欢

转载自blog.csdn.net/StrongHelper/article/details/85149757