編寫第一個servlet例子
servlet簡介
簡單來說,servlet就相當於是後臺處理資料的一個東西。比如說表單要提交了 action提交到哪裡去呢?就寫一個比如XX.java 這個裡面寫一個java類(servlet) 這個類用於處理提交過來的資訊。
然後接下來我們瞎bb一會兒:
servlet是jsp的前身,是一個可以通過”請求-響應”程式設計模型來訪問的 在伺服器上執行的小程式。
servlet容器管理context容器,一個context容器對應一個web工程
Servlet(介面):有三個方法 :Init()、service()和destroy();
類的關係
GenericServlet(抽象類,實現servlet介面):是與協議無關的servlet類。
HttpServlet(抽象類):實現了http協議的servlet類。
自定義Servlet(繼承HttpServlet方法):一般重寫(覆蓋)doGet與doPost方法。重寫哪個方法取決於使用者用什麼方式提交請求。
servlet生命週期
- init 初始化
- 響應客戶請求 service-(doGet或doPost)
- 伺服器關閉-終止:destroy(只有伺服器被關閉時才會執行destroy,僅僅終止程式是沒有用的)
一旦servlet例項被裝載,servlet物件會一直儲存在伺服器記憶體當中
Tomcat裝載servlet的三種情況:
- 當客戶端首次訪問某個servlet時
- servlet容器啟動時可以自動裝載某些servlet(不需要客戶端進行請求)
需要在web.xml檔案中進行如下配置:
<servlet>
<loadon-startup>1</loadon-startup >//數字越小優先順序越高
</servlet>
- servlet類檔案被更新後,也會重新裝載servlet
手動編寫servlet步驟
- 繼承HttpServlet
- 重寫(覆蓋)doGet與doPost方法.(這取決於使用者用什麼方式提交請求,超連結使用的是get方式,表單可以指定使用post方法)
- 在web.xml中註冊servlet
在新版的eclipse中建立servlet時取消了自動在web.xml中生成servlet 和mapping,取而代之的時在servlet中加入註解@webservlet
,在@WebServlet 中定義Servlet的name、urlPatterns等資訊。
雖然已經不需要它了,但還是講講web.xml的配置方法吧
注意不要既配置web.xml又配置@WebServlet,不然可能tomcat會啟動出錯
在<welcome-file-list></welcome-file-list>
後面加上:
<servlet>
<servlet-name>TaxiPriceServlet</servlet-name>//servlet的名字
<servlet-class>Servlet.TaxiPriceServlet</servlet-class>//這裡的類名要寫完整,是帶包名的
</servlet>
<servlet-mapping>
<servlet-name>TaxiPriceServlet</servlet-name>//和上面的servlet-name相同(對應)
<url-pattern>/Servlet/TaxiPriceServlet</url-pattern>//對映地址
</servlet-mapping>
實現第一個servlet例子——向頁面輸出內容
- 在src中新建一個包。就叫servlet好了。
- 右鍵包-新建servlet,然後就會發現它自己生成了很多內容。
- 我們現在只需要覆寫一下doGet方法
因為一般來說自動生成的doPost都會呼叫doGet,像這樣:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
當然覆寫doPost然後用doGet去呼叫它也是可以的,也可以都進行覆寫(兩種提交方式寫不同的程式碼)
4. 呼叫PrintWriter類(需要import java.io.PrintWriter)——實現向瀏覽器輸出東西
doGet和doPost方法要丟擲異常:ServletException, IOException(import java.io.IOException;
import javax.servlet.ServletException;)
response.setContentType("text/html;charset=utf-8");//可以使下面的引號裡支援html程式碼 並向頁面輸出中文 注意這句一定要寫在printwriter前 不然輸出的中文會是問號
PrintWriter out = response.getWriter();
out.println("");
//當然也可以用system.out.println來向後臺輸出東西