HttpServletRequest和HttpServletResponse实例

先看一下web.xml文件配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

  <servlet>
    <servlet-name>RequestDemo</servlet-name>
    <servlet-class>cn.test.request.RequestDemo</servlet-class>
  </servlet> 
  <servlet>
    <servlet-name>ResponseDemo</servlet-name>
    <servlet-class>cn.test.response.ResponseDemo</servlet-class>
  </servlet>

    
  <servlet-mapping>
    <servlet-name>RequestDemo</servlet-name>
    <url-pattern>/RequestDemo</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ResponseDemo</servlet-name>
    <url-pattern>/ResponseDemo</url-pattern>
  </servlet-mapping>
 
</web-app>

当一个请求发送到tomcat服务器时,服务器会查询web.xml文件,先访问所有的<servlet-mapping>,匹配其中<url-pattern>,找到相应的信息后,提取<servlet-name>,然后分别匹配<servlet>中的<servlet-name>,当匹配到结果时,再根据相对应的<servlet-class>找到后台程序并执行,这就完成了一次访问过程。

requestdemo

  1 public class RequestDemo extends HttpServlet {
  2 
  3     public void doGet(HttpServletRequest request, HttpServletResponse response)
  4             throws ServletException, IOException {
  5         /**
  6          * 设置参数查询的编码
  7          * 该方法只能对请求实体内容的数据编码起作用。POST提交的数据在实体内容中,所以该方法对POST方法有效!
  8          * GET方法的参数放在URI后面,所以对GET方式无效!!!
  9          */
 10         request.setCharacterEncoding("utf-8");
 11         
 12         
 13     /*    System.out.println("GET方式");
 14         //接收GET方式提交的参数
 15         String value = request.getQueryString();
 16         System.out.println(value);*/
 17         
 18         
 19         /**
 20          * 统一方便地获取请求参数的方法
 21          */
 22         System.out.println(request.getMethod()+"方式");
 23         //getParameter(name): 根据参数名得到参数值(只能获取一个值的参数)
 24         String name = request.getParameter("name");
 25         
 26         /**
 27          * 手动重新解码(iso-8859-1 字符串-> utf-8 字符串)
 28          */
 29         /*if("GET".equals(request.getMethod())){
 30             name = new String(name.getBytes("iso-8859-1"),"utf-8");
 31         }*/
 32         
 33         String password = request.getParameter("password");
 34         
 35         /*if("GET".equals(request.getMethod())){
 36             password = new String(password.getBytes("iso-8859-1"),"utf-8");
 37         }*/
 38         
 39         System.out.println(name+"="+password);
 40         
 41         System.out.println("=============================");
 42         Enumeration<String> enums = request.getParameterNames();
 43         while( enums.hasMoreElements() ){
 44             String paramName = enums.nextElement();
 45             
 46             //如果参数名是hobit,则调用getParameterValues 获取多个参数值
 47             if("hobit".equals(paramName)){
 48                 /**
 49                  * getParameterValues(name): 根据参数名获取参数值(可以获取多个值的同名参数)
 50                  */
 51                 System.out.println(paramName+":");
 52                 String[] hobits = request.getParameterValues("hobit");
 53                 for(String h: hobits){
 54                 /*    if("GET".equals(request.getMethod())){
 55                         h = new String(h.getBytes("iso-8859-1"),"utf-8");
 56                     }*/
 57                     System.out.print(h+",");
 58                 }
 59                 System.out.println();
 60                 //如果不是hobit,则调用getParameter
 61             }else{
 62                 String paramValue = request.getParameter(paramName);
 63                 /*
 64                 if("GET".equals(request.getMethod())){
 65                     paramValue = new String(paramValue.getBytes("iso-8859-1"),"utf-8");
 66                 }*/
 67                 
 68                 System.out.println(paramName+"="+paramValue);
 69             }
 70         }
 71     }
 72     public void doPost(HttpServletRequest request, HttpServletResponse response)
 73             throws ServletException, IOException {
 74         /*System.out.println("POST方式");
 75         InputStream in = request.getInputStream();
 76         byte[] buf = new byte[1024];
 77         int len = 0;
 78         while(  (len=in.read(buf))!=-1 ){
 79             System.out.println(new String(buf,0,len));
 80         }*/
 81         
 82         /**
 83          * 统一方便地获取请求参数的方法
 84          */
 85         /*System.out.println("POST方式");
 86         //根据参数名得到参数值
 87         String name = request.getParameter("name");
 88         String password = request.getParameter("password");
 89         System.out.println(name+"="+password);
 90         
 91         System.out.println("=============================");
 92         Enumeration<String> enums = request.getParameterNames();
 93         while( enums.hasMoreElements() ){
 94             String paramName = enums.nextElement();
 95             String paramValue = request.getParameter(paramName);
 96             System.out.println(paramName+"="+paramValue);
 97         }*/
 98         
 99         //一定调用doGet方式
100         this.doGet(request, response);
101     }
102 
103 }

responsedemo

public class ResponseDemo extends HttpServlet {

    /**
     * 1)tomcat服务器把请求信息封装到HttpServletRequest对象,且把响应信息封装到HttpServletResponse
     * 2)tomcat服务器调用doGet方法,传入request,和response对象
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        /**
         * 3)通过response对象改变响应信息
         */
        /**
         * 3.1 响应行
         */
        //response.setStatus(404);//修改状态码
        //response.sendError(404); // 发送404的状态码+404的错误页面
        
        
        
        /**
         * 3.2 响应头
         */
        response.setHeader("server", "JBoss");
        
        
        /**
         * 3.3 实体内容(浏览器直接能够看到的内容就是实体内容)
         */
//        response.getWriter().write("01.hello world"); //字符内容。
        response.getOutputStream().write("02.hello world".getBytes());//字节内容
         

    }
    
    /**
     * 4)tomcat服务器把response对象的内容转换成响应格式内容,再发送给浏览器解析。
     */

}

response重定向:

 1 public class ResponseDemo2 extends HttpServlet {
 2 
 3     public void doGet(HttpServletRequest request, HttpServletResponse response)
 4             throws ServletException, IOException {
 5         /**
 6          * 需求: 跳转到adv.html
 7          * 使用请求重定向: 发送一个302状态码+location的响应头
 8          */
 9         /*response.setStatus(302);//发送一个302状态码
10         response.setHeader("location", "/day09/adv.html"); //location的响应头
11 */        
12         
13         //请求重定向简化写法
14         response.sendRedirect("/day09/adv.html");
15         
16         
17     }
18 
19 }

定时刷新:

 1 public class ResponseDemo extends HttpServlet {
 2 
 3     public void doGet(HttpServletRequest request, HttpServletResponse response)
 4             throws ServletException, IOException {
 5         /**
 6          * 定时刷新
 7          * 原理:浏览器认识refresh头,得到refresh头之后重新请求当前资源
 8          */
 9         //response.setHeader("refresh", "1"); //每隔1秒刷新次页面
10         
11         /**
12          * 隔n秒之后跳转另外的资源
13          */
14         response.setHeader("refresh", "3;url=/day09/adv.html");//隔3秒之后跳转到adv.html
15     }
16 
17 }

 

posted @ 2017-09-03 14:19  K_artorias  阅读(1814)  评论(0编辑  收藏  举报