Servlet是一個用java編寫的應用程序,在服務器上運行,處理請求的信息并將其發送到客戶端。
Servlet的客戶端提出請求并獲得該請求的響應。
對于所有的客戶端請求,只需要創建Servlet的實例一次(這是和CGI(Common Gateway Interface)的重要區別,CGI是每個請求創建一個新實例),因此節省了大量的內存。
Servlet在初始化后即駐留內存中,因此每次作出請求時無需加載。
下面通過一個例子來介紹如何編寫一個簡單的Servlet。
準備工作:
1. 下載并啟動Tomcat(作為Servlet的容器)實例步驟:1. 在Tomcat/webapps下面創建新的folder,helloapp2. 創建helloapp的子文件夾如下helloapp----WEB-INF--------web.xml--------classes--------lib3.在classes下面創建新的java文件,Hello.java4. 引入servlet-api.jar, import javax.servlet.*;5. Servlet的實現有3種方式,下面分開進行介紹(重點)HttpServlet繼承GenericServlet,GenericServlet實現了Servlet。5.1 實現Servlet接口public class Hello implements Servlet{@Overridepublic void init(ServletConfig sc) throws ServletException {//只有第一次被調用,初始化函數。System.out.println("initialization...");}@Overridepublic ServletConfig getServletConfig() {return null;}@Overridepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {//每次訪問都被調用,業務邏輯寫在這里。System.out.println("call service");PrintWriter pw = res.getWriter();pw.write("My first web app.");}@Overridepublic String getServletInfo() {return null;}@Overridepublic void destroy() {//最后關閉時,調用。System.out.println("destroy...");}}
5.2 繼承GenericServlet
public class Hello2 extends GenericServlet{@Overridepublic void service(ServletRequest sr, ServletResponse sr1) throws ServletException, IOException {//業務邏輯,每次訪問都被調用。System.out.println("Testing....");PrintWriter pw = sr1.getWriter();pw.println("my second web app.");}}
5.3 繼承HttpServlet
public class Hello3 extends HttpServlet{@Overridepublic void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException{System.out.println("do get method...");PrintWriter pw = res.getWriter();pw.println("do get method.");}public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException{System.out.println("do post method...");PrintWriter pw = res.getWriter();pw.println("do post method.");}}
6. 編譯源文件
7.修改web.xml
<servlet> <servlet-name>Hello</servlet-name>//servlet 名稱,隨便起 <servlet-class>com.test.servlet.Hello</servlet-class>//對應的類</servlet><servlet-mapping> <servlet-name>Hello</servlet-name>//servlet名稱,隨便起,但是要與servlet中的名稱一致。 <url-pattern>/h1</url-pattern>//對應的,瀏覽器中url。</servlet-mapping>
8.訪問helloapp/h1,可以看到結果。
新聞熱點
疑難解答