一、servlet的概念 Servlet是一種獨立與平臺和協議的伺服器端java應用程式,通過Servlet可以生成動態web頁面,同時使用Servlet還可以在伺服器端對客戶的請求進行處理,控製程序的執行。 Servlet的主要作用就是互動式的瀏覽和更新數據,並生成動態的頁面內容展示。 1. 服務 ...
一、servlet的概念
Servlet是一種獨立與平臺和協議的伺服器端java應用程式,通過Servlet可以生成動態web頁面,同時使用Servlet還可以在伺服器端對客戶的請求進行處理,控製程序的執行。
Servlet的主要作用就是互動式的瀏覽和更新數據,並生成動態的頁面內容展示。
1. 伺服器接收客戶端發送的請求。
2. 伺服器將請求信息發送至Servlet.
3. Servlet進過處理後,生成響應的內容。
4. Servlet將響應的內容返回客戶端。
名稱 說明 所在包
servlet介面 JavaServlet的基礎介面,定義了Servlet必須實現的方法 javax.servlet
GenericServlet 繼承自servlet介面屬於通用的不依賴於協議的servlet javax.servlet
HttpServlet 繼承自GenerticServic類在此繼承上擴展了http協議的Servlet javax.servlet.http
HttpServletRequest 繼承自servletRequest介面用於數據的讀取 javax.servlet.http
HttpServletResponse 繼承自servletResponse介面用於返回數據 javax.servlet.http
二、servlet的生命周期
Servlet容器:是用來裝載Servlet對象的一種容器。是負責管理Servlet的一類組件。
1、 實例化---》Servlet容器創建Servlet的實例
2、 初始化---》該容器調用init()方法
init()方法:初始化方法只會別調用一次,在創建servlet時候調用
3、 服務-----》如果請求Servlet,則容器調用Service()方法
service()方法時執行任務的主要方法,每次伺服器接收到一個servlet請求,都會啟動一個線程並調用服務,service()方法會檢查http請求類型,調用相應的doGet或doPost方法
4、 銷毀-----》銷毀實例之前調用destroy()方法。
destroy()方法也只會被調用一次,在servlet生命周期結束時調用,會關閉資料庫連接,停止線程等,destroy()方法執行後GC會回收servlet對象。
三、創建servlet
(1).創建servlet的三種方法
1.繼承servlet介面(interface)
2.繼承GenericServlet類(class)
3.繼承httpServlet類(class)
(2).在web.xml中添加servlet的配置
<servlet> <servlet-name>myServlet</servlet-name> <servlet-calss>servlet.MyServlet</servlet-calss> </servlet> <servlet-mapping> <servlat-name>myServlat</servlat-name> <url-pattern>/myServlet</url-pattern> <servlat-mapping> <servlet> <servlet-name>servlet</servlet-name> <servlet-class>servlet.servlet</servlet> <init-param> <!-- 初始化參數 --> <param-name>charSetContent</param-name> <param-value>utf-8</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>servlet<servlet-name> <url-pattern>utf-8</url-pattern> </servlet-mapping>
(3).創建servlet類:
package demo.web.servlet; import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyServlet3 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("調用了doGet方法"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); } @Override protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { super.service(arg0, arg1); } @Override public void destroy() { System.out.println("調用了銷毀的方法"); } @Override public void init(ServletConfig config) throws ServletException { System.out.println("init被初始化了"); String initParam=config.getInitParameter("charSerContent"); System.out.println(initParam); } }
說明:<url-pattern>標簽裡面可以有三種設置方法:
1./myservlet
2./xx/*
3.*.do
四、servlet的部署和運行:
1.servlet的運行比較簡單,只要通過url就可以實現訪問,servlet的訪問名稱必須與web.xml文件中設置的url的映射名一致。
2.在瀏覽器中輸入:localhost:8080/項目名/url-pattern對應的類型 (如果是第一種輸入/myservlet,第二種輸入/xx/任意字元,第三種是任意字元.do),就會在控制太輸出信息。
五、servletRequest對象和httpServletRequest對象
當用戶請求時有servlet容器創建servletRequest對象,這個對象被容器作為service()方法之一傳給servlet,servlet能夠利用servletRequest獲取客戶端的數據請求數據。
1.servletRequest對象常用方法
常用方法 說明
getAttribute(String name); 獲取名字為name的值
setAttribute(String name,Object obj); 設置名字為name的值
getParameter(String name); 獲取表單中傳入的參數
2.HttpServletRequest對象常用方法
常用方法 說明
String getContextPath(); 獲取上下文路徑
Cookie[] getCookies(); 返回客戶端發送的所有cookie對象
HttpSession getsession(); 返回和此次請求相管理的session,沒有則創建一個新的session
String getMethod(); 返回此次請求service所調用的方法,doGet,或doPost方法
六、servletResponse介面和HttpServletResponse介面
1.servletResponse介面用來封裝響應介面
常用方法 說明
PrintWriter getWriter(); 返回PrintWriter對象,用於向客戶端發送文本
String getCharacterEncoding(); 獲取編碼類型
String setCharacterEncoding(); 設置編碼類型
void setContentType(String type); 設置發送到客戶端的響應的內容類型
2.httpServletResponse介面常用方法
常用方法 說明
void addCookie(Cookie cookie); 設置一個cookie到響應中,這個方法可多次調用設置多個cookie
void addHeader(String name,String value); 將一個名字為name的值為value的響應報頭添加到響應中
void sendRedirect(String location); 重定向
void encodURL(string url); 使用sessionId對重定向的url進行編碼,