- Servlet是運行在服務器端的程序,用於處理及響應客戶端的請求。
- Servlet是個特殊的Java類,必須繼承HttpServlet。每一個Servlet能夠響應客戶端的請求。
Servlet相應客戶端請求的方法:html
- doGet():響應客戶端的Get請求
- doPost():響應客戶端的POST請求
- doPut():響應客戶端的PUT請求
- doDelete():響應客戶端的DELETE請求
大部分時候,Servlet對於全部請求的響應都是同樣的,因此能夠只重寫service()
方法。java
另外HttpServlet
還包含兩個方法:web
init(ServletConfig config):建立Servlet實例<br/>
destroy():銷燬Servlet實例服務器
不須要爲Servlet編寫構造器,若是須要對Servlet進行初始化的操做,能夠重寫init
方法。app
例子:學習
//Servlet必須繼承HttpServlet類 @WebServlet(name="firstServlet" ,urlPatterns={"/firstServlet"}) public class FirstServlet extends HttpServlet { //客戶端的響應方法,使用該方法能夠響應客戶端的全部類型請求 public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,java.io.IOException { //設置解碼方式 request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); //獲取name的請求參數 String name = request.getParameter("name"); //獲取gender的請求參數 String gender = request.getParameter("gender"); //獲取color的請求參數 String[] color = request.getParamterValues("color"); //獲取country的請求參數 String national = request.getParameter("national"); //獲取頁面輸出流 PrintStream out = new PrintStream(response.getOutputStream()); //輸出HTML頁面標籤 out.println("<html>"); out.println("<head>"); out.println("<title>Servlet測試</title>"); out.println("</head>"); out.println("<body>"); //輸出請求參數:name out.println("name "+name + "<hr/>"); //輸出請求參數:gender out.println("gender "+gender + "<hr/>"); //輸出請求參數:color for(String c:color) { out.println("color " + c +"<hr/>"); } //輸出請求參數:national out.println("national "+national); out.println("</body>"); out.println("</html>"); } }
Servlet和JSP的區別在於:測試
- Servlet中沒有內置對象,原來JSP中的內置對象都必須由程序顯式建立
- 對於靜態的HTML標籤,Servlet都必須使用頁面輸出流逐行輸出
編輯後的Servlet文件要編譯成class
文件,而後將文件放在WEB-INF/classes
中才可以響應用戶請求。並且還要將Servlet配置在web應用中(修改web.xml)url
配置Servlet的方式有兩種(Servlet3.0開始):spa
- 在Servlet類中使用@WebServlet註解進行配置
- 經過在web.xml文件中進行配置
@WebServlet註解最經常使用的屬性code
- name:指定Servlet的名稱
- urlPatterns:指定Servlet處理的url
配置Servlet的注意事項:
使用註解來配置Servlet:
一、不要在
web.xml
文件的根元素<web-app>
中制定metadata-complete="true"
二、不要在web.xml
文件中配置該文件使用web.xml配置Servlet須要配置兩個部分:
一、配置
Servlet
的名字:對應web.xml
文件中的<servlet/>
元素
二、配置Servlet
的URL:對應web.xml
文件中的<servlet-mapping/>
元素
經過配置web.xml
文件的例子(經過註解的方式的例子在上面的代碼中):
<!--配置Servlet的名字--> <servlet> <!--指定Servlet的名字--> <servlet-name>firstServlet</servlet-name> <!--指定Servlet的實現類--> <servlet-class>FirstServlet</servlet-class> </servlet> <!--配置Servlet的URL--> <servlet-mapping> <!--指定Servlet的名字--> <servlet-name>firstServlet</servlet-name> <!--指定Servlet映射的URL地址--> <url-pattern>/firstServlet</url-pattern> </servlet-mapping>
生命週期:
init
方法,對Servlet進行初始化destroy
方法銷燬Servlet。load-on-startup Servlet的是Web應用啓動時馬上建立Servlet實例。
配置load-on-startup的Servlet的方式有兩種:
- 在
web.xml
文件中經過<servlet../>
元素的子元素<load-on-startup.../>
進行配置- 經過@WebServlet註解的
loadOnStartup
屬性指定<br/><br/>
(無論經過哪一種方式,都之接收一個整型值,數字越小表明優先級越高)
註解配置:
@WebServlet(loadOnStartup=1) public class TimerServlet extends HttpServlet { public void init(ServletConfig config)throws ServletException { super.init(config); Timer t = new Timer(1000.new ActionListener(){ public void actionPerformed(ActionEvent e) { System.out.println(new Date()); } }); } }
web.xml
配置:
<servlet> <!--Servlet名--> <servlet-name>timerServlet</servlet-name> <!--Servlet的實現類--> <servlet-class>hsr.TimerServlet</servlet-class> <!--應用啓動就建立實例--> <load-on-startup>1</load-on-startup> </servlet>
爲Servlet配置參數的方法:
- 經過
@WebServlet
的initParam
屬性指定- 在
web.xml
文件的<serlvet../>
的子元素<init-param../>
指定
經過@WebServlet
指定:
@WebServlet(name="testServlet", urlPatterns={"/testServlet"}, initParam={ @WebInitParam(name="Param_name1",value="Param_value1"), @WebInitParam(name="Param_name2",value="Param_value2") })
經過wel.xml
指定:
<init-param> <param-name>param_name</param-name> <param-name>param_name</param-name> </init-param>
訪問配置參數:
//獲取ServletConfig對象 ServletConfig config = getServletConfig(); //經過ServletConfig對象獲取參數 String param = config.getInitParameter("param_name");