簡單來說:servlet實際上是根據Servlet開發的java類,Servlet由服務器調用,運行在服務器端。
壹張圖描述了B/S中Servler的作用:
2.Tomcat和Servlet之間的關系
Tomcat是壹個Web應用服務器和壹個Servlet/JSP容器。Tomcat作為壹個Servlet容器,負責處理客戶請求,將請求發送給Servlet,並將Servlet的響應發送回客戶。Servlet是運行在支持Java語言的服務器上的組件。
Servlet最常見的用途是擴展Java Web server的功能,提供壹個非常安全、便攜、易用的CGI替代品。
從Http協議中的請求和響應可以知道,瀏覽器發出的請求是請求文本,瀏覽器收到的也應該是響應文本。但是上圖中,我們不知道它是怎麽變的,只知道瀏覽器發出的請求也是請求,我們回復的時候用的是響應。忽略細節,現在就來探究壹下。
①: Tomcat接收並解析Http請求文本,然後封裝成壹個HttpServletrequest對象。所有的Http頭數據讀取都可以通過Request對象調用相應的方法進行查詢。
②:同時,Tomcat將響應信息封裝為HttpServletresponse類型的響應對象。通過設置response屬性,可以控制輸出到瀏覽器的內容,然後將響應交給Tomcat,Tomcat會將其轉換為響應文本格式並發送給瀏覽器。
Java servlet API是servlet容器(tomcat)和Servlet之間的接口,定義了Servlet的各種方法,也定義了Servlet容器發送給Servlet的對象類,其中最重要的是ServletRequest和ServletResponse。所以我們在編寫Servlet的時候,需要實現Servlet接口,按照它的規範來操作。
3.servlet接口的主要方法
Servlet接口有三種主要方法:
Init()方法:它只會被調用壹次,而且只有在創建servlet實例的時候才會被創建。
Service()方法:用於數據處理。只要壹個請求被接受壹次,就會被調用壹次。
Destroy()方法:當Servlet對象被銷毀時調用。在停止服務器或重新部署Web應用程序時銷毀Servlet對象也是壹個調用。
編寫Servlet
首先,我有點困惑。有時候我們看到別人在壹些材料裏這樣寫:
公?班級?TestServlet?器物?Servlet?{
初始化()...
服務()...
getServletConfig()...
...
}
而這裏我們要繼承HttpServlet類,那麽問題來了。繼承HttpServlet和實現Servlet有什麽區別?
首先,直觀上,Servlet就是壹個接口。如果實現了此接口,則必須實現接口中定義的所有方法。
HttpServlet實現Servlet接口,並實現Servlet接口中的方法。
繼承Httpservelt實際上實現了Servlet接口。
但是,我們不需要實現Servlet中定義的生命周期方法,因為Httpservlet中已經有了默認的實現,而且這些默認的實現是相當標準和實用的。doget和dopost是執行用戶請求的端點。get請求將調用doget方法,post請求將執行dopost方法。我們可以用這兩種方法定義自己的業務邏輯。
最後,在實現Servlet接口時,HttpSrvlet已經實現了Servlet中的所有方法,所以從HttpPsvlet繼承的類不需要覆蓋相應的生命周期和其他方法。
4.1寫Java類,繼承HttpServlet。
創建壹個MyServlet java類,繼承HttpServlet實現服務方法:
公?班級?MyServlet?延伸?HttpServlet?{
@覆蓋
受保護?作廢?服務(HttpServletRequest?請求,?HttpServletResponse?回應)?摔投?ServletException,?IOException?{
//設置字符編碼
request . setcharacterencoding(" utf8 ");
//從?請求?從對象獲取用戶名和密碼。
字符串?用戶名?=?request.getParameter("用戶名");
字符串?密碼?=?request . getparameter(" password ");
request.setAttribute("用戶名",用戶名);
request.setAttribute("password ",密碼);
request.getRequestDispatcher(?"/index2.jsp ")。轉發(請求,?回應);;
}
}
4.2配置web.xml文件
Web.xml配置Servlet訪問路徑,以便其他人可以通過鏈接訪問您的Servlet:
& ltwe B- app & gt;
& lt顯示名稱& gt原型?創造了?Web?應用程序& lt/display-name & gt;
& ltservlet & gt
& ltservlet-name & gt;MyServlet & lt/servlet-name & gt;
& ltservlet-class & gt;club . sscai . demo . my servlet & lt;/servlet-class & gt;
& lt/servlet & gt;
& ltservlet映射& gt
& ltservlet-name & gt;MyServlet & lt/servlet-name & gt;
& lturl模式& gt/my servlet & lt;/URL-pattern & gt;
& lt/servlet-mapping & gt;
& lt/we B- app & gt;
4.3 jsp界面顯示
index2.jsp:
& lthtml & gt
& ltbody & gt
& lth2 & gt2222222 & lt/H2 & gt;
用戶名:?& lt% = request . getparameter(" username ")?% & gt
& ltbr & gt
密碼:?& lt% = request . getparameter(" password ")?% & gt
& lt/body & gt;
& lt/html & gt;