什么是Servlet
- Server Applet:小服務程序
- Servlet需要在一個web應用中運行
- 一個web應用是部署在tomcat中的
最原始的方式創(chuàng)建j2ee項目
- 因為是開發(fā)Servlet所以需要用到
servlet-api.jar
這個包里的相關類。 - 鏈接:https://pan.baidu.com/s/1svoVuOgM192urZjC4bZehw
- 提取碼:58sh
- 新建一個項目:
File->New->Java Project
- 導入必須的
servlet-api.jar
包:右鍵點擊項目->properties->Java Build Path->Libraries->Add External JARs
- 編寫HelloServlet
import java.io.IOException;
import java.util.Date;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse responce) {
// TODO Auto-generated method stub
try {
responce.getWriter().println("<h1>Hello Servlet!</h1>");
responce.getWriter().println(new Date().toLocaleString());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
- 配置web.xml:
- 首先在j2ee下創(chuàng)建目錄
web
- 接著再創(chuàng)建目錄
web/WEB-INF
- 然后創(chuàng)建
web.xml
文件 - web.xml提供路徑與servlet的映射關系,把/hello這個路徑,映射
- 我少寫了一個
/
, 導致Tomcat啟動失敗,花了好長時間,找到這個Bug
- 首先在j2ee下創(chuàng)建目錄
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
-
指定項目輸出到classes目錄
- 首先在WEB-INF下創(chuàng)建classes目錄
- 步驟:
項目右鍵->properties->Java Build Path->Source->右下角的Browse->指定位置j2ee/web/WEB-INF/classes
- 為什么要有這一步:eclipse默認字節(jié)碼文件輸出到bin,但是tomcat默認是WEB-INF/classes,所以必須調整Eclipse的輸出目錄,這樣才能和tomcat兼容
-
配置tomcat的server.xml中的context
- 打開tomcat/conf/server.xml
-
在 <Host name="localhost" 。。。 下面加一句
image.png - path="/"就表示直接通過http://127.0.0.1/hello就可以訪問
-
刪除tomcat webapps下的ROOT目錄
- 在上一步context path配置為
/
,與webapps下的ROOT目錄沖突了 - 所以要刪除ROOT目錄,如果沒有就不用刪除了
- 在上一步context path配置為
-
重啟tomcat,訪問http://127.0.0.1/hello
- 大功告成,每一次刷新,都能看到時間的改變
image.png
我是怎么找到那個少寫"/"的NUG
- 首先我的Tomcat原本是可以啟動的,這就證明我的Tomcat是完好無損的
- 然后我替換了整個j2ee項目,發(fā)現(xiàn)Tomcat可以啟動了,證明問題出在我的j2ee上
- 逐一檢查我的j2ee文件,替換HelloServlet類,Tomcat依然無法啟動,證明問題必然出在web.xml
- 仔細查看web.xml,沒找到問題
- 最后借助于diffmerge,終于發(fā)現(xiàn)少寫了"/"
image.png