JavaWeb筆記一、Servlet 詳解,javawebservlet

來源:互聯網
上載者:User

JavaWeb筆記一、Servlet 詳解,javawebservlet
一、建立一個 Servlet 簡單實作類別1、建立一個 HelloServlet 類(測試 Servlet 介面方法)

 1 //建立一個 HelloServlet 類並實現 Servlet 介面 2 public class HelloServlet implements Servlet { 3  4     // Tomcat 停止服務時 Servlet 的銷毀方法 5     @Override 6     public void destroy() { 7         System.out.println("destroy....."); 8     } 9 10     @Override11     public ServletConfig getServletConfig() {12         System.out.println("getServletConfig");13         return null;14     }15 16     @Override17     public String getServletInfo() {18         System.out.println("getServletInfo");19         return null;20     }21 22     // Servlet 載入時 初始化方法23     @Override24     public void init(ServletConfig servletConfig) throws ServletException {25         System.out.println("init");26     }27 28     // servlet 運行時的方法 每次請求調用29     @Override30     public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {31         System.out.println("service");32     }33 34     // HelloServlet 實作類別的構造方法 載入時調用35     public HelloServlet() {36         System.out.println("HelloServlet's constructor");37     }38 39 }
2、配置和映射 Servlet
 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3     xmlns="http://xmlns.jcp.org/xml/ns/javaee" 4     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 5     id="WebApp_ID" version="3.1"> 6  7     <!-- 配置和映射 Servlet --> 8     <servlet> 9         <!-- Servlet 註冊的名字 -->10         <servlet-name>HelloServlet_java</servlet-name>11         <!-- Servlet 的全類名 -->12         <servlet-class>com.panku.javaWeb1.HelloServlet</servlet-class>13         <!-- 可以指定 Servlet 被建立的時機 -->14         <load-on-startup>1</load-on-startup>15     </servlet>16 17     <servlet-mapping>18         <!-- 需要和某一個 Servlet 節點的 servlet-name 子節點的文本節點一致 -->19         <servlet-name>HelloServlet_java</servlet-name>20         <!-- 映射的具體訪問路徑: / 代表當前 Web 應用程式的根目錄. -->21         <url-pattern>/hello</url-pattern>22     </servlet-mapping>23 24 </web-app>

 

二、Servlet 生命週期Servlet 生命週期的方法: 以下方法都是由 Serlvet 容器負責調用.

1). 構造器: 只被調用一次. 只有第一次請求 Servlet 時, 建立 Servlet 的執行個體. 調用構造器. 這說明 Serlvet 的單一實例的!

2). init 方法: 只被調用一次. 在建立好執行個體後立即被調用. 用於初始化當前 Servlet. 

3). service: 被多次調用. 每次請求都會調用 service 方法. 實際用於響應請求的. 

4). destroy: 只被調用一次. 在當前 Servlet 所在的 WEB 應用被卸載前調用. 用於釋放當前 Servlet 所佔用的資源.

三、ServletConfig 對象(getInitParameterNames、getInitParameter、getServletName(不常用)、getServletContext四個介面方法)1、在 web.xml 檔案中配置 servlet 的初始化參數(init-param-節點)
 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3     xmlns="http://xmlns.jcp.org/xml/ns/javaee" 4     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 5     id="WebApp_ID" version="3.1"> 6  7     <!-- 配置和映射 Servlet --> 8     <servlet> 9         <!-- Servlet 註冊的名字 -->10         <servlet-name>HelloServlet_java</servlet-name>11         <!-- Servlet 的全類名 -->12         <servlet-class>com.panku.javaWeb1.HelloServlet</servlet-class>13 14         <!-- 配置 Servlet 的初始化參數 -->15         <init-param>16             <!-- 參數名 -->17             <param-name>user</param-name>18             <!-- 參數值 -->19             <param-value>root</param-value>20         </init-param>21 22         <init-param>23             <param-name>password</param-name>24             <param-value>123456</param-value>25         </init-param>26 27         <!-- 可以指定 Servlet 被建立的時機 -->28         <load-on-startup>1</load-on-startup>29     </servlet>30 31     <servlet-mapping>32         <!-- 需要和某一個 Servlet 節點的 servlet-name 子節點的文本節點一致 -->33         <servlet-name>HelloServlet_java</servlet-name>34         <!-- 映射的具體訪問路徑: / 代表當前 Web 應用程式的根目錄. -->35         <url-pattern>/hello</url-pattern>36     </servlet-mapping>37 38 </web-app>

 

2、servlet實作類別的 init()方法中 ServletConfig 對象執行個體(ServletConfig的getInitParameterNames、getInitParameter、getServletName(不常用)方法執行個體)
 1     // Servlet 載入時 初始化方法 2     @Override 3     public void init(ServletConfig servletConfig) throws ServletException { 4         System.out.println("init"); 5  6         // 擷取初始化參數值 7         String user = servletConfig.getInitParameter("user"); 8         System.out.println("user:" + user); 9 10         // 擷取初始化參數名和值11         Enumeration<String> names = servletConfig.getInitParameterNames();12         while (names.hasMoreElements()) {13             String name = names.nextElement();14             String value = servletConfig.getInitParameter(name);15             System.out.println("^^name:" + name + ":" + value);16         }17 18         // 擷取 Servlet 註冊名稱19         String servletName = servletConfig.getServletName();20         System.out.println(servletName);21     }

 

3、在 servlet 實作類別的 init()方法中 通過 ServletConfig 對象得到 ServletContext 對象ServletContext的常見方法: getInitParameter()、getInitParameterNames()、getRealPath()、getContextPath()、getResourceAsStream()
 1     // Servlet 載入時 初始化方法 2     @Override 3     public void init(ServletConfig servletConfig) throws ServletException { 4         System.out.println("init"); 5  6         // WEB初始化參數: 可以為所有的 Servlet 所擷取, 而 Servlet 的初始化參數只用那個 Serlvet 可以擷取. 7         // 擷取 ServletContext 對象 8         ServletContext servletContext = servletConfig.getServletContext(); 9 10         // 擷取當前 WEB 初始化參數值11         String driver = servletContext.getInitParameter("driver");12         System.out.println("driver:" + driver);13 14         // 擷取當前 WEB 初始化參數名和值15         Enumeration<String> name2 = servletContext.getInitParameterNames();16         while (name2.hasMoreElements()) {17             String name = name2.nextElement();18             String value = servletContext.getInitParameter(name);19             System.out.println("-->" + name + ":" + value);20         }21 22         // 擷取當前 WEB 應用的某一個檔案在伺服器上的絕對路徑, 而不是不部署前的路徑23         String realPath = servletContext.getRealPath("/111.txt");24         // 不是 E:\eclipse\workspace\JavaWeb\WebContent\111.txt25         System.out.println(realPath);26 27         // 擷取當前 WEB 應用的名稱28         String contextPath = servletContext.getContextPath();29         System.out.println(contextPath);30 31         // 擷取一個檔案的輸入資料流(部署前的路徑)32         try {33             ClassLoader classLoader = getClass().getClassLoader();34             InputStream is = classLoader.getResourceAsStream("jdbc.properties");35             System.out.println("1." + is);36         } catch (Exception e) {37             e.printStackTrace();38         }39 40         // 擷取一個檔案的輸入資料流(伺服器上的路徑)41         try {42             InputStream is2 = servletContext.getResourceAsStream("/WEB-INF/classes/jdbc.properties");43             System.out.println("2." + is2);44         } catch (Exception e) {45             e.printStackTrace();46         }47     }
 四、servlet 實作類別的 service()方法中的 Request 對象1、Request 的常用方法: getParameter(String name)、getParameterValues(String name)、getParameterNames()、getParameterMap()
 1     // 用於應答請求: 因為每次請求都會調用 service() 方法 2     // ServletRequest: 封裝了請求資訊, 可以從中擷取到任何的請求資訊 3     // ServletResponse: 封裝了響應資訊, 如果想給使用者什麼響應, 具體可以使用該介面的方法實現 4     @Override 5     public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { 6         System.out.println("請求成功......."); 7         System.out.println(request); 8  9         // String getParameter(String name): 根據請求參數的名字, 返回參數值.10         String user = request.getParameter("user");11         String password = request.getParameter("password");12         System.out.println(user + "," + password);13 14         // getParameter()方法只能擷取一個參數值15         String interesting = request.getParameter("interesting");16         System.out.println(interesting);17 18         // String[] getParameterValues(String name): 根據請求參數的名字, 返回請求參數對應的字串數組19         String[] interestings = request.getParameterValues("interesting");20         for (String string : interestings) {21             System.out.println("-->" + string);22         }23 24         // Enumeration getParameterNames(): 返回參數名對應的 Enumeration 對象,類似於25         // ServletConfig(或 ServletContext) 的 getInitParameterNames() 方法.26         Enumeration<String> names = request.getParameterNames();27         while (names.hasMoreElements()) {28             String name = names.nextElement();29             String valuee = request.getParameter(name);30             System.out.println("==>" + name + ", " + valuee);31         }32 33         // Map getParameterMap(): 返回請求參數的索引值對: key: 參數名, value: 參數值, String 數群組類型.34         Map<String, String[]> map = request.getParameterMap();35         for (Map.Entry<String, String[]> entry : map.entrySet()) {36             System.out.println("**" + entry.getKey() + ":" + Arrays.asList(entry.getValue()));37         }38     }

 

 2、httpServletRequest 的常用方法:getRequestURI()、getMethod()、getQueryString()、getServletPath()
 1     public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { 2         System.out.println("請求成功......."); 3         System.out.println(request); 4         // 擷取請求的 URI 5         HttpServletRequest httpServletRequest = (HttpServletRequest) request; 6         String requestURI = httpServletRequest.getRequestURI(); 7         System.out.println(requestURI); 8  9         // 擷取請求方式10         String method = httpServletRequest.getMethod();11         System.out.println(method);12 13         // 若是一個 GET 請求, 擷取請求參數對應的那個字串, 即 ? 後的那個字串.14         String queryString = httpServletRequest.getQueryString();15         System.out.println(queryString);16 17         // 擷取請求的 Serlvet 的映射路徑18         String servletPath = httpServletRequest.getServletPath();19         System.out.println(servletPath);20     }

 

五、servlet 實作類別的 service()方法中的 Response 對象Response 目前常用方法:setContentType()、getWriter()
 1     public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { 2         System.out.println("請求成功......."); 3         System.out.println(request); 4         // 設定回應程式式 5         response.setContentType("application/msword"); 6  7         // 在頁面響應一個內容 8         PrintWriter out = response.getWriter(); 9         out.println("HelloWorld...");10     }
 六、GenericServlet 實現 Servelt、ServletConfig介面
 1 public abstract class MyGenericServlet implements Servlet, ServletConfig { 2  3     // 以下方法為 Servlet 介面的方法 4     @Override 5     public void destroy() { 6     } 7  8     @Override 9     public ServletConfig getServletConfig() {10         return servletconfig;11     }12 13     @Override14     public String getServletInfo() {15         return null;16     }17 18     private ServletConfig servletconfig;19 20     @Override21     public void init(ServletConfig arg0) throws ServletException {22         this.servletconfig = arg0;23         init();24     }25 26     public void init() throws ServletException {27     }28 29     @Override30     public abstract void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException;31 32     // 以下方法為 ServletConfig 介面的方法33     @Override34     public String getInitParameter(String arg0) {35         return servletconfig.getInitParameter(arg0);36     }37 38     @Override39     public Enumeration<String> getInitParameterNames() {40         return servletconfig.getInitParameterNames();41     }42 43     @Override44     public ServletContext getServletContext() {45         return servletconfig.getServletContext();46     }47 48     @Override49     public String getServletName() {50         return servletconfig.getServletName();51     }52 53 }
View Code

 

 

 

 七、HttpServlet 繼承 GenericServlet類
 1 public class MyHttpServlet extends MyGenericServlet { 2  3     @Override 4     public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { 5  6         if (arg0 instanceof HttpServletRequest) { 7             HttpServletRequest request = (HttpServletRequest) arg0; 8  9             if (arg1 instanceof HttpServletResponse) {10                 HttpServletResponse response = (HttpServletResponse) arg1;11 12                 service(request, response);13             }14         }15     }16 17     public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {18 19         // 1.擷取請求方式20         String method = request.getMethod();21 22         // 2.根據請求方式再調用對應的處理方法23         if ("get".equalsIgnoreCase(method)) {24             doGet(request, response);25         } else if ("set".equalsIgnoreCase(method)) {26             doPost(request, response);27         }28     }29 30     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {31 32     }33 34     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {35 36     }37 38 }
View Code

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.