Eclipse下創建簡單Servlet
參考文章:一個簡單的Servlet程序 http://blog.csdn.net/a153375250/article/details/50916428
Servlet簡介
Servlet是什麽?簡單地說,它就是一個java程序,是一個運行在web服務器上的程序。它可以對Web瀏覽器或其他HTTP客服端程序發出的請求進行處理。但是使Servlet能夠處理以上請求的前提條件是Servlet對象要被布置在Servlet容器當中,我們這裏用的Servlet容器就是我們前面用到的Tomcat服務器。
Servlet的使用和JSP不同,它需要web.xml文件的配置。當一個客戶端發出HTTP請求時,服務器會根據配置文件中的配置信息將該請求的信息發送給相對應的Servlet進行處理。
Servlet的基本結構
Servlet就是一段由java編寫的程序,由服務器來維護。為了方便服務器的處理,Servlet需要遵循一定的結構規範。通常我們所說的Servlet就是一個實現了HttpServlet抽象類的類的實例。代碼結構如下:
1 import javax.servlet.ServletException; 2 import javax.servlet.http.HttpServlet; 3 import javax.servlet.http.HttpServletRequest; 4 import javax.servlet.http.HttpServletResponse;5 import java.io.IOException; 6 7 public class ServTest extends HttpServlet { 8 //init method 9 public void init() throws ServletException {} 10 //handle get request 11 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {12 } 13 //handle post request 14 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 15 } 16 //handle put request 17 protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 18 } 19 //handle delete request 20 protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 21 } 22 //destroy 23 public void destroy() {} 24 }
7行,Servlet繼承HttpServlet類。
9行,init()方法,服務器在創建Servlet實例後會調用該方法進行初始化的工作。
11~20行,Servlet就是通過這些do方法來處理對應的Http請求的。事實上,這些do方法都是從HttpServlet中繼承來的,我們這裏需要對這些方法進行重寫以處理具體的請求。
23行,當服務器關閉時,該destroy()方法會被調用,銷毀該實例。
Servlet生命周期
我們知道,Servlet是由服務器維護的。那麽服務器是如何管理Servlet的呢?通常有以下幾個階段,這些階段也就是Servlet從生到死的生命周期:
- 當某個Servlet第一次被請求的時候,服務器會加載對應的Servlet類,將其放在Servlet實例池中。
- 創建Servlet實例後,將調用該實例的init()方法進行一些初始化操作。(即Servlet的代碼結構中的init())
- 服務器通過調用Servlet的service()方法來處理客戶端發送的請求。實際上,上面的Servlet的代碼結構中的do方法都是通過service()來調用的。代碼結構中我們沒有顯式地看到service()方法是因為我們沒有對繼承的該方法進行重寫。
- Servlet實例創建後會一直存在於內存中,直到服務器關閉,Servlet的destroy()方法被調用,該實例被銷毀。
Servlet的xml配置
Servlet在使用之前需要進行一定的配置,來告訴服務器被請求的Servlet應該發到哪裏。這其實就是一個Servlet在服務器的註冊過程,這樣服務器就會知道哪個Servlet請求對應哪個Servlet對象。配置過程通常分為Servlet的聲明和Servlet的映射兩部分。
Servlet的聲明
語法格式如下:
1 <servlet> 2 <servlet-name>name</servlet-name> 3 <servlet-class>path</servler-class> 4 </servlet>
第一條語句中的name是聲明的Servlet對象的名字,名字你可以自取,就像聲明一個String abc一樣,abc名字可以自取。
第二條語句中的path是用於指定你的Servlet的class文件的路徑的。通常你把你的Servlet編譯好的class文件放在Tomacat安裝目錄下的/webapp/ProjectName/WEB-INF/classes文件夾下,此時只需要寫你的Servlet的class文件的名字就行了:
1 <servlet-class>ServTest</servler-class>
ProjectName是你的webapp文件夾,裏面的WEB-INF及classes文件夾需要手動創建。
Servlet的映射
語法格式如下:
1 <servlet-mapping> 2 <servlet-name>name</servlet-name> 3 <url-pattern>path</url-pattern> 4 <servlet-mapping>
這裏是對我們上面聲明的Servlet的一個映射,所以這裏的name要和上面聲明中的name一樣才行。
url-pattern用於映射你的訪問URL,例如將你的訪問URL映射為:
1 <url-pattern>/ServletTest<url-pattern>
你就可以通過:localhost:8080/ServletTest
來請求該Servlet了。
如果寫成:* ace這種形式,則所有與ace為結尾的請求都通過本Servlet來處理
如:127.0.0.1:8080/ace.servlet/lalaace
制作簡單Servlet
新建一個Dynamic Web Project,取名為SimpleServlet
在WebContent下新建jsp文件
Index.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Servlet</title> </head> <body> <center> <form action="MyServlet" name="form" method="post"> Your Name:<input type="text" name="USERNAME"><br> <input type="submit" value="SUBMIT"></form> </center> </body> </html>
新建Servlet,package為niiam,ServletTest.java
1 package niiam; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 import javax.servlet.ServletException; 6 import javax.servlet.annotation.WebServlet; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 11 /** 12 * Servlet implementation class ServTest 13 */ 14 @WebServlet("/ServTest") 15 public class ServTest extends HttpServlet { 16 private static final long serialVersionUID = 1L; 17 18 /** 19 * @see HttpServlet#HttpServlet() 20 */ 21 public ServTest() { 22 super(); 23 // TODO Auto-generated constructor stub 24 } 25 26 /** 27 * @see Servlet#destroy() 28 */ 29 public void destroy() { 30 // TODO Auto-generated method stub 31 } 32 33 /** 34 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 35 */ 36 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 37 // TODO Auto-generated method stub 38 response.setContentType("text/html"); 39 response.setCharacterEncoding("gb2312"); 40 41 PrintWriter out = response.getWriter(); 42 String name = request.getParameter("USERNAME"); 43 44 out.println("Your Name : " + name); 45 } 46 47 }
保存,如果Eclipse設置了自動編譯(Project->Build Automatically)
則在制定Build path(在本項目中為build/classes)中會出現.class文件
修改web.xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 3 <display-name>SimpleServlet</display-name> 4 <welcome-file-list> 5 <welcome-file>index.html</welcome-file> 6 <welcome-file>index.htm</welcome-file> 7 <welcome-file>index.jsp</welcome-file> 8 <welcome-file>default.html</welcome-file> 9 <welcome-file>default.htm</welcome-file> 10 <welcome-file>default.jsp</welcome-file> 11 </welcome-file-list> 12 13 <servlet> 14 <servlet-name>ServletHandle</servlet-name> 15 <servlet-class>niiam.ServTest</servlet-class> 16 </servlet> 17 <servlet-mapping> 18 <servlet-name>ServletHandle</servlet-name> 19 <url-pattern>/MyServlet</url-pattern> 20 </servlet-mapping> 21 </web-app>
其中,第15行內容註意要體現對應package中的class
在服務器上運行Index.jsp即可
Eclipse下創建簡單Servlet