Servlet 是服務 HTTP 請求並實現 javax.servlet.Servlet 接口的 Java 類。Web 應用程序開發人員一般編寫 Servlet 來擴展 javax.servlet.http.HttpServlet,並實現 Servlet 接口的抽象類專門用來處理 HTTP 請求。html
下面是 Servlet 輸出 Hello World 的示例源代碼:java
// 導入必需的 java 庫 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; // 擴展 HttpServlet 類 public class HelloWorld extends HttpServlet { private String message; public void init() throws ServletException { // 執行必需的初始化 message = "Hello World"; } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 設置響應內容類型 response.setContentType("text/html"); // 實際的邏輯是在這裏 PrintWriter out = response.getWriter(); out.println("<h1>" + message + "</h1>"); } public void destroy() { // 什麼也不作 } }
讓咱們把上面的代碼寫在 HelloWorld.java 文件中,把這個文件放在 C:\ServletDevel(在 Windows 上)或 /usr/ServletDevel(在 UNIX 上)中,您還須要把這些目錄添加到 CLASSPATH 中。web
假設您的環境已經正確地設置,進入 ServletDevel 目錄,並編譯 HelloWorld.java,以下所示:apache
$ javac HelloWorld.java
若是 Servlet 依賴於任何其餘庫,您必須在 CLASSPATH 中包含那些 JAR 文件。在這裏,我只包含了 servlet-api.jar JAR 文件,由於我沒有在 Hello World 程序中使用任何其餘庫。api
該命令行使用 Sun Microsystems Java 軟件開發工具包(JDK)內置的 javac 編譯器。爲使該命令正常工做,您必須 PATH 環境變量中使用的 Java SDK 的位置。瀏覽器
若是一切順利,上面編譯會在同一目錄下生成 HelloWorld.class 文件。下一節將講解已編譯的 Servlet 如何部署在生產中。tomcat
默認狀況下,Servlet 應用程序位於路徑 <Tomcat-installation-directory>/webapps/ROOT 下,且類文件放在 <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes 中。服務器
若是您有一個徹底合格的類名稱 com.myorg.MyServlet,那麼這個 Servlet 類必須位於 WEB-INF/classes/com/myorg/MyServlet.class 中。app
如今,讓咱們把 HelloWorld.class 複製到 <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes 中,並在位於 <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/ 的 web.xml 文件中建立如下條目:webapp
<web-app> <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>HelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/HelloWorld</url-pattern> </servlet-mapping> </web-app>
上面的條目要被建立在 web.xml 文件中的 <web-app>...</web-app> 標籤內。在該文件中可能已經有各類可用的條目,但不要在乎。
到這裏,您基本上已經完成了,如今讓咱們使用 <Tomcat-installation-directory>\bin\startup.bat(在 Windows 上)或 <Tomcat-installation-directory>/bin/startup.sh(在 Linux/Solaris 等上)啓動 tomcat 服務器,最後在瀏覽器的地址欄中輸入 http://localhost:8080/HelloWorld。若是一切順利,您會看到下面的結果:
2 篇筆記
wk_我主沉浮
wan***javakf@163.com
destory 方法被調用後,servlet 被銷燬,可是並無當即被回收,再次請求時,並無從新初始化。
代碼示例:
private String message; @Override public void init() throws ServletException { message = "Hello World , Nect To Meet You: " + System.currentTimeMillis(); System.out.println("servlet初始化……"); super.init(); } @Override public void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter writer = response.getWriter(); writer.write("<h1>" + message + "</h1>"); destroy(); } @Override public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub super.doPost(req, resp); } @Override public void destroy() { System.out.println("servlet銷燬!"); super.destroy(); }
控制檯打印:
servlet初始化…… servlet銷燬! 2017-7-6 19:48:52 org.apache.catalina.core.StandardContext reload 信息: Reloading Context with name [/myServlet] has started servlet銷燬! 2017-7-6 19:48:52 org.apache.catalina.core.StandardContext reload 信息: Reloading Context with name [/myServlet] is completed servlet初始化…… servlet銷燬! servlet銷燬! servlet銷燬! servlet銷燬! servlet銷燬! servlet銷燬! servlet銷燬!wk_我主沉浮
wk_我主沉浮
wan***javakf@163.com
1年前 (2017-07-06)董大dj
594***060@qq.com
servlet 瀏覽器訪問路徑配置有個小問題:
一、java 類裏的註解 —— @WebServlet("/HelloServlet") 對應瀏覽器路徑:
http://localhost:8080/TomcatTest/HelloServlet
二、配置文件(web.xml)裏對應的瀏覽器訪問路徑:
http://localhost:8080/TomcatTest/TomcatTest/HelloServlet
這兩種配一個就行了,否則路徑重名的話反而會讓tomcat啓動不了。
例如這樣就啓動不了:
修改 web.xml :
<url-pattern>/HelloServlet</url-pattern>
修改後,web.xml 和 java 類的註解,對應路徑都是:
http://localhost:8080/TomcatTest/HelloServlet
致使
命名的 servlet[HelloServlet]和 [com.runoob.test.HelloServlet] 都被映射到 URL 模式 [/ HelloServlet] 這是不容許的。
解決辦法:
將註解去掉或者保留註解進入web.xml將映射刪除既能夠。
董大dj董大dj
594***060@qq.com
10個月前 (09-15)