JavaWeb組件Servlet使用實(shí)例解析
在JavaWeb中有三大組件,分別是Servlet、Filter和Listener。其中Servlet的作用是處理請(qǐng)求,服務(wù)器會(huì)把接收到的請(qǐng)求交給Servlet來(lái)處理,即接收請(qǐng)求數(shù)據(jù)、處理請(qǐng)求和完成響應(yīng)。
1. 實(shí)現(xiàn)Servlet的方式
主要有三種實(shí)現(xiàn)方式:1)實(shí)現(xiàn)javax.servlet.Servlet接口;2)繼承javax.servlet.GenericServlet類;3)繼承javax.servlet.http.HttpServlet類;其中最常用的繼承HttpServlet類來(lái)實(shí)現(xiàn)。
2. 關(guān)于Servlet接口
public interface Servlet {
public void init(ServletConfig config) throws ServletException;
public ServletConfig getServletConfig();
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException;
public String getServletInfo();
public void destroy();
}
如上是Servlet接口的源碼,內(nèi)部主要有五個(gè)方法,其中與Servlet生命周期有關(guān)的方法有 init方法、service方法和destroy方法。
1) void init(ServletConfig);它會(huì)在Servlet對(duì)象創(chuàng)建之后馬上執(zhí)行,并且只執(zhí)行一次。
2) void service(ServletRequest,ServletResponse);它會(huì)被調(diào)用多次,每次處理請(qǐng)求都被調(diào)用。
3) void destroy();它會(huì)在Servlet被銷毀之前被Tomcat調(diào)用,并且只執(zhí)行一次。
3. Servlet的創(chuàng)建
服務(wù)器會(huì)在Servlet第一次被訪問(wèn)時(shí)創(chuàng)建Servlet,或者是在服務(wù)器啟動(dòng)時(shí)創(chuàng)建Servlet。如果服務(wù)器啟動(dòng)時(shí)就創(chuàng)建Servlet,那么還需要在web.xml文件中配置。如果 Servlet 的 load-on-startup 配置項(xiàng)大于 0,那么在 Context 容器啟動(dòng)的時(shí)候就會(huì)被實(shí)例化,也就是說(shuō)默認(rèn)情況下,Servlet是在第一次被訪問(wèn)時(shí)由服務(wù)器創(chuàng)建的。而且一個(gè)Servlet類型,服務(wù)器只創(chuàng)建一個(gè)實(shí)例對(duì)象。
4. Servlet與線程安全
因?yàn)橐粋€(gè)類型的Servlet只有一個(gè)實(shí)例對(duì)象,那么就有可能會(huì)現(xiàn)時(shí)出一個(gè)Servlet同時(shí)處理多個(gè)請(qǐng)求,那么Servlet是否為線程安全的呢?答案是:“不是線程安全的”。這說(shuō)明Servlet的工作效率很高,但也存在線程安全問(wèn)題!
所以我們不應(yīng)該在Servlet中隨便創(chuàng)建成員變量,因?yàn)榭赡軙?huì)存在一個(gè)線程對(duì)這個(gè)成員變量進(jìn)行寫操作,另一個(gè)線程對(duì)這個(gè)成員變量進(jìn)行讀操作。
5. Servlet的使用
如果想要瀏覽器可以訪問(wèn)Servlet,需要給Servlet綁定一個(gè)路徑,這個(gè)需要在web.xml中進(jìn)行配置。其中<servlet> 指定HelloServlet這個(gè)Servlet的名稱為hello;<servlet-mapping>:指定/helloworld訪問(wèn)路徑所以訪問(wèn)的Servlet名為hello。<servlet>和<servlet-mapping>通過(guò)<servlet-name>這個(gè)元素關(guān)聯(lián)在一起。
<servlet> <servlet-name>hello</servlet-name> <servlet-class>com.Demrystv.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/helloworld</url-pattern> </servlet-mapping>
6. 關(guān)于HttpServlet
HttpServlet類是GenericServlet的子類,它提供了對(duì)HTTP請(qǐng)求的特殊支持,所以通常我們都會(huì)通過(guò)繼承HttpServlet來(lái)完成自定義的Servlet。
HttpServlet類是一個(gè)抽象類,但是沒(méi)有抽象方法,必須繼承,實(shí)現(xiàn)doGet或者doPost,但是doGet()或doPost()方法不是抽象方法,默認(rèn)的實(shí)現(xiàn)是給客戶一個(gè)405。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JavaWeb servlet實(shí)現(xiàn)下載與上傳功能的方法詳解
- javaWeb使用servlet搭建服務(wù)器入門
- javaweb中ajax請(qǐng)求后臺(tái)servlet(實(shí)例)
- javaweb servlet中使用請(qǐng)求轉(zhuǎn)發(fā)亂碼的實(shí)現(xiàn)
- JavaWeb實(shí)現(xiàn)用戶登錄注冊(cè)功能實(shí)例代碼(基于Servlet+JSP+JavaBean模式)
- javaweb Servlet開(kāi)發(fā)總結(jié)(一)
- javaweb Servlet開(kāi)發(fā)總結(jié)(二)
- JavaWeb編程 Servlet的基本配置
- Servlet開(kāi)發(fā)JavaWeb工程示例詳解
相關(guān)文章
java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):線性表
這篇文章主要介紹了Java的數(shù)據(jù)解構(gòu)基礎(chǔ),希望對(duì)廣大的程序愛(ài)好者有所幫助,同時(shí)祝大家有一個(gè)好成績(jī),需要的朋友可以參考下,希望能給你帶來(lái)幫助2021-07-07
Spring?Boot?Rest常用框架注解詳情簡(jiǎn)介
這篇文章主要介紹了Spring?Boot?Rest常用框架注解,通過(guò)將嘗試解釋Spring?Boot?Rest?API的不同注釋,這些注釋是Spring?Boot中REST?API所必需的,需要的朋友可以參考一下2022-06-06
淺談MyBatisPlus中LocalDateTime引發(fā)的一些問(wèn)題和解決辦法
MyBatisPlus進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),我們經(jīng)常會(huì)遇到處理日期時(shí)間類型的需求,本文主要介紹了淺談MyBatisPlus中LocalDateTime引發(fā)的一些問(wèn)題和解決辦法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07
Java Fluent Mybatis實(shí)戰(zhàn)之構(gòu)建項(xiàng)目與代碼生成篇下
Java中常用的ORM框架主要是mybatis, hibernate, JPA等框架。國(guó)內(nèi)又以Mybatis用的多,基于mybatis上的增強(qiáng)框架,又有mybatis plus和TK mybatis等。今天我們介紹一個(gè)新的mybatis增強(qiáng)框架 fluent mybatis2021-10-10
ibatis結(jié)合oracle批量插入三種方法的測(cè)評(píng)
今天小編就為大家分享一篇關(guān)于ibatis結(jié)合oracle批量插入三種方法的測(cè)評(píng),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12
Java多線程死鎖問(wèn)題詳解(wait和notify)
線程之間形成相互等待資源的環(huán)時(shí),就會(huì)形成順序死鎖,下面這篇文章主要給大家介紹了關(guān)于Java多線程死鎖問(wèn)題(wait和notify)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01
MybatisPlus自動(dòng)填充創(chuàng)建(更新)時(shí)間問(wèn)題
在開(kāi)發(fā)數(shù)據(jù)庫(kù)相關(guān)應(yīng)用時(shí),手動(dòng)設(shè)置創(chuàng)建和更新時(shí)間會(huì)導(dǎo)致代碼冗余,MybatisPlus提供了自動(dòng)填充功能,通過(guò)實(shí)現(xiàn)MetaObjectHandler接口并重寫insertFill、updateFill方法,可以自動(dòng)維護(hù)創(chuàng)建時(shí)間、更新時(shí)間等字段,極大簡(jiǎn)化了代碼,這不僅提高了開(kāi)發(fā)效率,也保證了數(shù)據(jù)的可追溯性2024-09-09

