先看一下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 }