Servlet
是在服務(wù)器上運行的小程序。一個Servlet
就是一個Java
類,并且可以通過“請求-響應(yīng)”編程模型來訪問的這個駐留在服務(wù)器內(nèi)存里的Servlet
程序。
Tomcat
的容器分為四個等級,Servlet
的容器管理Context
容器,一個Context
對應(yīng)一個Web
工程。結(jié)構(gòu)如下圖所示:
在tomcat中建立如下的目錄結(jié)構(gòu):
即在tomcat
的安裝目錄下的webapps
下新建一個MyWebSite
文件夾,用來保存自己網(wǎng)站的內(nèi)容,接下來,在MyWebSite
中,建立一個文件夾WEB-INF
(注:大小寫都必須完全一樣),在WEB_INF
中,建立一個名為classes
和一個名為lib
的文件夾,還有一個web.xml
的文件(該文件可以從與MyWebSite
同級的ROOT
文件夾中復(fù)制一個過來)共三個文件,如此,就建立好了自己網(wǎng)站的目錄結(jié)構(gòu)。
1 實現(xiàn)Servlet
接口,然后實現(xiàn)接口中的五個方法,代碼為:
public class Hello implements Servlet{ //該函數(shù)用于初始化servlet,類似于類的構(gòu)造函數(shù),該函數(shù)只會被調(diào)用一次 public void init(ServletConfig parm1) throws ServletException { System.out.println("init it!"); } public ServletConfig getServletConfig() { // TODO: Add your code here return null; } //這個函數(shù)用于處理業(yè)務(wù)邏輯 //當(dāng)用戶每訪問servlet時,都會調(diào)用 //req:用于獲得客戶端(瀏覽器)信息 //res:用于向客戶端(瀏覽器)返回信息 public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { //從res中得到PrintWriter System.out.println("Service it"); PrintWriter pw = res.getWriter(); pw.println("Hello world!"); } public String getServletInfo() { return ""; } //銷毀,釋放內(nèi)存,三種方式會觸發(fā)destroy //1. reload該servlet(webApps) 2. 關(guān)閉tomcat 3.關(guān)機 public void destroy() { System.out.println("destroy it!"); }}
2 繼承GenericServlet
,只需要實現(xiàn)一個方法:service
public class HelloGen extends GenericServlet{ //重寫一個方法service即可 public void service(ServletRequest req, ServletResponse res){ //返回Hello world, generic try{ PrintWriter pw = res.getWriter(); pw.println("Hello generic"); } catch(Exception e){ e.printStackTrace(); } }}
3 繼承HttpServlet
,復(fù)寫doGet
和doPost方法
public class HelloHttp extends HttpServlet{ //處理get請求 public void doGet(HttpServletRequest req, HttpServletResponse res){ //業(yè)務(wù)邏輯 try{ PrintWriter pw = res.getWriter(); pw.println("hello, Http"); } catch (Exception e){ e.printStackTrace(); } } public void doPost(HttpServletRequest req, HttpServletResponse res){ this.doGet(req,res); }}
當(dāng)然,每次寫好代碼之后,需要在web.xml
中注冊新的servlet
web.xml
:
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0" metadata-complete="true"> <display-name>Welcome to Tomcat</display-name> <description> Welcome to Tomcat </description> //第一種方式需要加入的部分 <servlet> <servlet-name>hello</servlet-name> <servlet-class>com.thorin.Hello</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/thorin</url-pattern> </servlet-mapping> //第二種方式需要加入的部分 <servlet> <servlet-name>hellogen</servlet-name> <servlet-class>com.thorin.HelloGen</servlet-class> </servlet> <servlet-mapping> <servlet-name>hellogen</servlet-name> <url-pattern>/hellogen</url-pattern> </servlet-mapping> //第三種方式需要加入的部分 <servlet> <servlet-name>hellohttp</servlet-name> <servlet-class>com.thorin.HelloHttp</servlet-class> </servlet> <servlet-mapping> <servlet-name>hellohttp</servlet-name> <url-pattern>/hellohttp</url-pattern> </servlet-mapping></web-app>
然后在tomcat
的管理界面中reload
就可看到效果了:
效果1:
效果2:
效果3:
當(dāng)然,目前使用最常使用的是第三種方式,即繼承HttpServlet
的方式。