HttpServletRequest 和 HttpServletResponse

###ServletContext重点

> Servlet 上下文

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

服务器启动的时候给每一个应用都创建一个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);

        }

##HttpServletResponse

> 负责返回数据给客户端。 

输出数据到页面上


        //以字符流的方式写数据    
        //response.getWriter().write("<h1>hello response...</h1>");
        
        //以字节流的方式写数据 
        response.getOutputStream().write("hello response2222...".getBytes());



中文乱码问题

如果是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);
        
            直接在tomcat里面做配置,以后get请求过来的数据永远都是用UTF-8编码。 
    

    2. 可以在tomcat里面做设置处理 conf/server.xml 加上URIEncoding="utf-8"
 
          <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>


如果是POST方式

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

        这行设置一定要写在getParameter之前。


文件下载

 protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    // 获取要下载文件的名字
    String fileName = request.getParameter("filename");
    // 获取文件地址 在tcomcat的绝对路径
    String path = getServletContext().getRealPath("download/" + fileName);
    // 让浏览器收到资源的时候 以下载的方式提醒用户而不是直接展示
    response.setHeader("Content-Disposition", "attachment;filename" + fileName);
    //转换为流
    InputStream is = new FileInputStream(path);
    OutputStream os = response.getOutputStream();
    int len = 0;
    byte[] buffer = new byte[1024];
    while ((len = is.read(buffer)) != -1) {
      os.write(buffer, 0, len);
    }
    os.close();
    is.close();
  }



猜你喜欢

转载自blog.csdn.net/kikock/article/details/80506493
今日推荐