Servlet相關知識1
1.什麼是Servlet?能做什嗎?
Sun公司制定的用於擴充web伺服器功能的組件規範(早期CGI:Common Gateway Interface)
擴充:
web伺服器本身沒有計算能力,也就是說,不能處理動態資源的請求。servlet可以處理動態資源的請求。
組件規範:
組件是符合規範,完成一定功能,並可以單獨部署的軟體模組。一般不能獨立運行,需要依賴容器才能運行。
JSR:Java Specification request
JCP:Java Communication process
容器:
是一種程式,提供組件的運行環境,並且管理組件的運行周期。
Servlet容器:
提供Servlet啟動並執行環境,並且管理Servlet的運行周期。一般常見的web伺服器,比如Tomcat,除了是
一個servlet容器以外,同時也是一個web伺服器。
能做什嗎?
servlet只能採用java語言開發,servlet可以作java類能做的所有的事件。
2.如何開發一個Servlet?
step1: 寫一個java類,實現Servlet介面或者繼承HttpServlet類。
step2: 編譯(依賴servlet api)
step3: 打包(定義一個特定的目錄結構,將相應的位元組碼,設定檔,相關的jar檔案放到對應的目錄結構裡)
appname(名稱任意,一般稱為應用程式名稱)
WEB-INF(必須以該名稱命名)
classes(放.class檔案)
lib(可選,放.jar檔案)
web.xml(部署描述檔案)
step4: 部署(將step3中的結果放到特定的目錄,對於tomcat是webapps)
step5: 啟動伺服器
windows -> startup.bat -> shutdown.bat
linux -> startup.sh -> shutdown.sh
啟動成功:http://localhost:8080/
step6: 訪問servlet
http://localhsot:8080/appname/url-pattern
3.Servlet是如何啟動並執行?
假如我們在瀏覽器欄輸入了如下地址:http://ip:port/appname/servletname
step1: 瀏覽器依據ip,port串連伺服器。
step2: 瀏覽器將請求資料按http協議打成一個http請求資料包(包含了appname/servletname)
step3: 伺服器當中的一個負責通訊的模組(一般稱為servlet引擎)會建立HttpServletRequest的一個執行個體
(HttpServletRequest實際上是一個介面,由伺服器提供者來實現),該執行個體包含了請求資料包中的
資料。另外,還建立了一個HttpServletResponse的一個執行個體。
step4: 伺服器依據appname/url-pattern找到web.xml依據資訊找到對應的servlet類名。會查看該servlet
有沒有對應的執行個體,如果沒有,則建立執行個體,有的話,則不建立,使用現成的執行個體。接下來,調用service()
方法,service方法裡面的代碼可以通過HttpServletRequest提供的方法來獲得請求中的資料,並且,也
可以將處理之後的結果通過HttpServletRequest提供的方法設定返回的結果。
step5: Servlet引擎會從HttpServletResponse擷取資料,產生http響應資料包,發送給瀏覽器。
4.使用MyEclipse開發servlet
(1) 安裝MyEclipse
(2) 開發步驟
step1: 建立一個web project
step2: 在src下面編寫java類
step3: 在web.xml中配置servlet
step4: 部署
a.讓MyEclipse管理Tomcat
window -> preferences -> MyEclipse -> Servers -> Tomcat -> Tomcat 6.X
b.部署
step5: 訪問
http://ip:port/appname/url-pattern
5.web.xml檔案內容
<?xml version="1.0" encoding="UTF-8"?>
<!-- 檔案的第一行一定是上面的資訊,說明xml檔案的版本和字元編碼 -->
<!-- 下面用來配置web工程 -->
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<description>HelloServlet</description>
<display-name>HelloServlet</display-name>
<!-- 一般是定義Servlet時的名字 -->
<servlet-name>HelloServlet</servlet-name>
<!-- 該Servlet的全名 -->
<servlet-class>ttwork.servlet.HelloServlet</servlet-class>
</servlet>
<servlet>
...
</servlet>
<servlet-mapping>
<!-- 和上面Servlet使用的名字一樣 -->
<servlet-name>HelloServlet</servlet-name>
<!-- 訪問Servlet時的相對路徑 -->
<url-pattern>/servlet/HelloServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
...
</servlet-mapping>
<error-page>
<error-code>500</error-code>
<location>/error.html</location>
</error-page>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>