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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM