1. 程式人生 > >在Java中配置Servlet及Servlet常用方法

在Java中配置Servlet及Servlet常用方法

引言: 最近在寫servlet的時候有一點生疏, 特地寫個筆記記錄一下學習心得, 重點的地方特地加粗放大, 方便日後查閱

什麼是Servlet:

Servlet是一個JavaEE的元件,也是JavaEE中的一個規範
該規範有以下約束.
1:約束伺服器
2:約束web的專案結構

3:約束程式的執行

Servlet是JavaEE中的一個規範:
伺服器其實是對Servlet的實現.
Servlet是一個JavaEE的元件:
Servlet是一個程式(類),只不過必須要遵循Servlet的規範.

重點: 要求類:必須實現javax.servlet.Servlet介面.

搭建標準的JavaWeb的專案結構:
1.建立一個Java專案:servlet;
2.在HelloServlet中建立一個資料夾webapp,表示Web專案的根;
3.在webapp中建立WEB-INF資料夾,
4.在WEB-IN中建立資料夾:lib,classes
5.在WEB-IN中去Tomcat根/conf拷貝web.xml檔案,只需要保留根元素.
6.把當前專案的classpath路徑改成webapp/WEB-IN下的classes中.

重點: Servlet屬於JavaEE的範疇,只依賴JavaSE是不能開發的,得依賴JavaEE的jar.

Servlet的第一個程式編寫步驟:

 1):拷貝Tomcat根/lib/servlet-api.jar到專案的WEB-INF/lib目錄中,並做build path.
 2):編寫Servlet程式,使之實現javax.servlet.Servlet介面,並覆蓋介面中的方法.
    public class HelloServlet implements javax.servlet.Servlet{...實現方法...}
 3):發現方法中引數出現arg0,arg1的情況是因為沒有關聯Servlet的原始碼.
    是否關聯原始碼和程式最終的執行沒有關係,只是在開發階段引數美觀,可閱讀原始碼.
    Tomcat的原始碼程式:apache-tomcat-7.0.57-src.zip
 4):在service(ServletRequest req, ServletResponse res)方法,列印一句話.
    引導:此時HelloServlet類,和Tomcat一點關係都沒有:我們需要告訴Tomcat來幫我們管理HelloServlet類.(Tomcat是Servlet的容器,會負責Servlet物件的生命週期和方法呼叫).
    所以,得以配置的形式,告訴Tomcat來幫我們管理自定義的Servlet類.

ServletRequest介面: 請求物件,封裝了獲取所有請求資訊(請求行,請求頭,請求實體)的方法.

HttpServletRequest介面:是ServletRequest的子介面,處理HTTP協議請求的方法.

常用方法:
1.String getMethod():返回請求方式:如GET/POST
2.String getRequestURI():返回請求行中的資源名字部分:如/test/index.html
3.StringBuffer getRequestURL():返回瀏覽器位址列中所有的資訊
4.String getContextPath():返回當前專案的上下文路徑,該值以/開頭(元素的path屬性值.)
5.String getRemoteAddr():返回發出請求的客戶機的IP地址
6.String getHeader(String name):返回指定名稱的請求頭的值。

獲取請求引數的方法:(從頁面獲取提交引數)
1.String getParameter(String name):根據引數名獲取單個引數值。
2.String[] getParameterValues(String name):根據引數名獲取多個引數值。
3.Enumeration getParameterNames():返回包含所有引數名的Enumeration物件。
4.Map

String username = new String(data,”UTF-8”);

一個引數需要使用兩行程式碼來轉碼,如果有N個引數,需要轉N次,程式碼重複.
解決方案:
針對於POST請求方式:
request.setCharacterEncoding(“UTF-8”);
注意:1:只對POST有效,2:必須放在獲取任意引數之前.

針對於GET請求方式:
修改Tocmcat中的server.xml配置檔案中修改埠的元素,對GET方式的預設編碼
建議:凡是涉及到引數提交都是用post

HttpServletResponse:

ServletResponse介面響應物件.封裝了獲取響應資訊的方法.

HttpServletResponse介面:ServletResponse的子介面,可以處理HTTP響應的方法.

常用方法:
1:OutputStream getOutputStream():獲取位元組輸出流物件
2:PrintWriter getWriter():獲取字元輸出流物件
注意:上述方法,不能共存,否則報錯.

//設定輸出的MIME型別(內容的型別):
response.setContentType(“text/html”);//不能寫錯
//設定輸出資料的編碼方式:
response.setCharacterEncoding(“UTF-8”);

可以將上述兩行程式碼合併成一行程式碼:
5:response.setContentType(“text/html;charset=utf-8”);
注意:必須先設定MIME型別和編碼,再獲取輸出流,否則沒有效果.