JavaWeb?Servlet技術(shù)及其應(yīng)用實(shí)踐
Servlet
Servlet(Server Applet)是Java Servlet的簡稱。 是在服務(wù)器端執(zhí)行的 , 用于響應(yīng)客戶端請求的Java類。HttpServlet 是使用java語言對http通信的實(shí)現(xiàn)。
Servlet聲明
在 web.xml 中聲明Servlet的請求url及對應(yīng)的類路徑 , 3.0版本后可以在類上使用 @WebServlet(“/test”) 注解來聲明
servlet-class
: 內(nèi)部地址路徑
url-pattern
: 對外發(fā)布的名字
servlet-name
: 兩者的對應(yīng)
<servlet> <servlet-name>TestServlet</servlet-name> <servlet-class>com.yuan.servlet.TestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/testServlet</url-pattern> </servlet-mapping>
Servlet生命周期
加載 : 在web.xml中聲明Servlet相關(guān)信息
實(shí)例化 : 由WebServer( 如 : Tomcat )根據(jù)web.xml中聲明信息進(jìn)行實(shí)例化, 實(shí)例化后才能調(diào)用方法
? 第一種方式 : 第一次被請求時(shí), 先實(shí)例化, 然后調(diào)用了 init() 方法進(jìn)行初始化
? 第二種方式 : 在 web.xml 文件中在<servlet></servlet>
下加入 <load-on-startup>0</load-on-startup>
Web服務(wù)器啟動(dòng)時(shí)就會(huì)實(shí)例化
初始化 : 在init() 方法中,進(jìn)行初始屬性設(shè)置
服務(wù) : 用戶發(fā)請求后, 會(huì)調(diào)用 service(request, response) 方法, 請求/響應(yīng)的信息由WebServer封裝成HttpServletRequest / HttpServletResponse對象
銷毀 : 當(dāng)servlet被銷毀時(shí), 調(diào)用destroy()方法, 可以在這個(gè)方法中釋放一些資源
垃圾回收 : 被JVM進(jìn)行垃圾回收時(shí), 調(diào)用 finalize() 方法
package com.yuan.servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/testServlet") public class TestServlet extends HttpServlet { @Override public void init(ServletConfig config) throws ServletException { // 初始化方法 } @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 服務(wù)方法 } @Override public void destroy() { //銷毀方法 } }
請求方式
Http定義了與服務(wù)器交互的不同方法,最基本的方法有4種,分別是GET,POST,PUT,DELETE。
一個(gè)URL地址,它用于描述一個(gè)網(wǎng)絡(luò)上的資源,而HTTP中的GET,POST,PUT,DELETE就對應(yīng)著對這個(gè)資源的查,改,增,刪4個(gè)操作。
GET/POST比較
GET一般用于獲取/查詢資源信息,而POST一般用于更新資源信息
默認(rèn)方式 :
? -GET 超鏈接, location.href, form表單 默認(rèn)都是GET的
? -POST 將 form表單的 method屬性設(shè)置成 post, form通信轉(zhuǎn)成POST方式
傳值方式 :
? -GET 數(shù)據(jù)會(huì)附在URL之后, 參數(shù)顯示在地址欄。所以是明文傳值
? -POST 數(shù)據(jù)放置在HTTP包的包體中, 參數(shù)不在地址欄顯示, 登錄時(shí)要使用POST, 隱藏登錄信息
傳值大小:
? -GET 1K~8K,受瀏覽器的影響, 通常為2K
? -POST 理論上沒有大小的限制, 所以做上傳文件時(shí), 由于文件的大小原因, 只能使用POST
中文傳遞 :
? -GET 默認(rèn)使用ISO-8859-1, 現(xiàn)在的瀏覽器都有優(yōu)化
? -POST 根據(jù)頁面的中文編碼設(shè)置, 服務(wù)器接值要轉(zhuǎn)碼
字符編碼
GB2312編碼
:1981年5月1日發(fā)布的簡體中文漢字編碼國家標(biāo)準(zhǔn)。GB2312對漢字采用雙字節(jié)編碼,收錄7445個(gè)圖形字符,其中包括6763個(gè)漢字。
BIG5編碼
:臺(tái)灣地區(qū)繁體中文標(biāo)準(zhǔn)字符集,采用雙字節(jié)編碼,共收錄13053個(gè)中文字,1984年實(shí)施。
GBK編碼
:1995年12月發(fā)布的漢字編碼國家標(biāo)準(zhǔn),是對GB2312編碼的擴(kuò)充,對漢字采用雙字節(jié)編碼。
? GBK字符集共收錄21003個(gè)漢字,包含國家標(biāo)準(zhǔn)GB13000-1中的全部中日韓漢字,和BIG5編碼中的所有漢字。
Unicode編碼(UTF-8)
:國際標(biāo)準(zhǔn)字符集,它將世界各種語言的每個(gè)字符定義一個(gè)唯一的編碼,以滿足跨語言、跨平臺(tái)的文本信息轉(zhuǎn)換。
u4e00-u9fa5 , 0x3400-0x4DB5 (中文)
兩種轉(zhuǎn)頁
內(nèi)部轉(zhuǎn) :
request.getRequestDispatcher( "目標(biāo)頁面" ) .forward( request, response );
跳轉(zhuǎn)后瀏覽器地址欄不會(huì)變化
目標(biāo)頁面路徑可以使用相對路徑
使用這種方式跳轉(zhuǎn),傳值可以使用三種方法:url中帶parameter,session,request.setAttribute()
重定向 :
response.sendRedirect( request.getContextPath() + "目標(biāo)頁面" );
跳轉(zhuǎn)后瀏覽器地址欄變化。
目標(biāo)頁面要使用絕對路徑
這種方式要傳值出去的話,只能在url中帶parameter或者放在session中,無法使用request.setAttribute()來傳遞
三種容器
存儲(chǔ)容器 : 是指用于在請求或轉(zhuǎn)頁過程中用來存儲(chǔ)所在傳遞的參數(shù)值的對象
常用方法
// 添加屬性 .setAttribute(key, value) // 取屬性值 .getAttribute(key) // 移除屬性 .removeAttribute(key)
在Web項(xiàng)目中有三種容器, 因?yàn)樗鼈兊淖饔梅秶?生命周期)不同, 也叫三種作用域
其中 application 包含 多個(gè)session , session 包含多個(gè) request
所以 從 request能得到session , 而從 request, session 能得到 application
request請求
類型 : HttpServletRequest
生命周期 : 客戶端發(fā)起請求創(chuàng)建
? 遇到響應(yīng) Response 或者生成頁面結(jié)束
常用方法 :
// 接頁面?zhèn)鱽淼闹? String value = request.getParameter(key); //接一個(gè)值 String[] vals = request.getParameterValues(key); //接一組值 // 得到其它容器 HttpSession session = request.getSession(); ServletContext app = request.getServletContext(); // 得到URL 信息 StringBuffer url = request.getRequestURL(); String scheme = request.getScheme(); String serverName = request.getServerName(); int serverPort = request.getServerPort(); String uri = request.getRequestURI(); String cpath = request.getContextPath(); // 得到絕對路徑 String servletUrl = request.getServletPath(); // 被請求servlet String remoteAddr = request.getRemoteAddr(); // 得到客戶端IP
session請求
類型 : HttpSession
生命周期 : 瀏覽器與服務(wù)器建立通信開始
? 主動(dòng)關(guān)閉或長時(shí)間不與服務(wù)器通信結(jié)束
常用方法 :
// 取session 的 標(biāo)識(shí) id String sid = session.getId(); // 獲取最長等待時(shí)間 int max = session.getMaxInactiveInterval(); // 設(shè)置最長等待時(shí)間, 以秒為單位 session.setMaxInactiveInterval(len); // 取所屬的上下文 ServletContext app = session.getServletContext();
在 web.xml中也可以設(shè)置最長等待時(shí)間, 單位是分鐘
<session-config> <session-timeout>30</session-timeout> </session-config>
application上下文(全局)
類型 : ServletContext
生命周期 : 項(xiàng)目啟動(dòng)創(chuàng)建
? 項(xiàng)目關(guān)閉結(jié)束
常用方法 :
// 取項(xiàng)目的真實(shí)路徑(發(fā)布路徑) String path = app.getRealPath(path); // 取 web.xml 中設(shè)置的參數(shù) String pv = app.getInitParameter(paramName);
在web.xml 里信息可以被application獲取
<context-param> <param-name>paramName</param-name> <param-value>paramValue</param-value> </context-param>
ServletConfig設(shè)置對象
在 Servlet的init() 初始化方法傳入?yún)?shù) ServletConfig
public void init(ServletConfig config) throws ServletException { // 取web.xml 文件中在<servlet></servlet>下的信息 String icon = config.getInitParameter(configName); // 取所屬的上下文 ServletContext app = config.getServletContext(); }
在web.xml 文件中在下的信息
<servlet> <init-param> <param-name>configName</param-name> <param-value>configValue</param-value> </init-param> <servlet-name>TestServlet</servlet-name> <servlet-class>com.yuan.servlet.TestServlet</servlet-class> </servlet>
到此這篇關(guān)于JavaWeb Servlet技術(shù)及其應(yīng)用實(shí)踐的文章就介紹到這了,更多相關(guān)JavaWeb Servlet內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Mybatis多參數(shù)傳遞入?yún)⑺姆N處理方式
這篇文章主要介紹了詳解Mybatis多參數(shù)傳遞入?yún)⑺姆N處理方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Spring創(chuàng)建bean實(shí)例的幾種方式分享
這篇文章主要介紹了Spring創(chuàng)建bean實(shí)例的幾種方式分享,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07Java中使用正則表達(dá)式的一個(gè)簡單例子及常用正則分享
這篇文章主要介紹了Java中使用正則表達(dá)式的一個(gè)簡單例子及常用正則分享,本文用一個(gè)驗(yàn)證Email的例子講解JAVA中如何使用正則,并羅列了一些常用的正則表達(dá)式,需要的朋友可以參考下2015-06-06Java模擬實(shí)現(xiàn)QQ三方登錄(單點(diǎn)登錄2.0)
這篇文章主要為大家詳細(xì)介紹了Java模擬實(shí)現(xiàn)QQ三方登錄,單點(diǎn)登錄2.0,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06優(yōu)化Java虛擬機(jī)總結(jié)(jvm調(diào)優(yōu))
這篇文章主要介紹了優(yōu)化Java虛擬機(jī)總結(jié)(jvm調(diào)優(yōu)),具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Spring學(xué)習(xí)筆記2之表單數(shù)據(jù)驗(yàn)證、文件上傳實(shí)例代碼
這篇文章主要介紹了Spring學(xué)習(xí)筆記2之表單數(shù)據(jù)驗(yàn)證、文件上傳 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07Springboot項(xiàng)目監(jiān)聽器失效問題解決
這篇文章主要介紹了Springboot項(xiàng)目監(jiān)聽器失效問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03