javaweb中servlet技術(shù)的用法
本文講解"javaweb中servlet技術(shù)的用法",希望能夠解決相關(guān)問題。
servlet
servlet(server applet)是java servlet的簡稱。 是在服務(wù)器端執(zhí)行的 , 用于響應(yīng)客戶端請求的java類。httpservlet 是使用java語言對http通信的實現(xiàn)。
servlet聲明
在 web.xml 中聲明servlet的請求url及對應(yīng)的類路徑 , 3.0版本后可以在類上使用 @webservlet(“/test”) 注解來聲明
servlet-class : 內(nèi)部地址路徑
url-pattern : 對外發(fā)布的名字
servlet-name : 兩者的對應(yīng)
testservlet com.yuan.servlet.testservlet testservlet /testservlet
servlet生命周期
加載 : 在web.xml中聲明servlet相關(guān)信息
實例化 : 由webserver( 如 : tomcat )根據(jù)web.xml中聲明信息進行實例化, 實例化后才能調(diào)用方法
第一種方式 : 第一次被請求時, 先實例化, 然后調(diào)用了 init() 方法進行初始化
第二種方式 : 在 web.xml 文件中在下加入 0web服務(wù)器啟動時就會實例化
初始化 : 在init() 方法中,進行初始屬性設(shè)置
服務(wù) : 用戶發(fā)請求后, 會調(diào)用 service(request, response) 方法, 請求/響應(yīng)的信息由webserver封裝成httpservletrequest / httpservletresponse對象
銷毀 : 當(dāng)servlet被銷毀時, 調(diào)用destroy()方法, 可以在這個方法中釋放一些資源
垃圾回收 : 被jvm進行垃圾回收時, 調(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。
一個url地址,它用于描述一個網(wǎng)絡(luò)上的資源,而http中的get,post,put,delete就對應(yīng)著對這個資源的查,改,增,刪4個操作。
get/post比較get一般用于獲取/查詢資源信息,而post一般用于更新資源信息
默認方式 :
-get 超鏈接, location.href, form表單 默認都是get的
-post 將 form表單的 method屬性設(shè)置成 post, form通信轉(zhuǎn)成post方式
傳值方式 :
-get 數(shù)據(jù)會附在url之后, 參數(shù)顯示在地址欄。所以是明文傳值
-post 數(shù)據(jù)放置在http包的包體中, 參數(shù)不在地址欄顯示, 登錄時要使用post, 隱藏登錄信息
傳值大小:
-get 1k~8k,受瀏覽器的影響, 通常為2k
-post 理論上沒有大小的限制, 所以做上傳文件時, 由于文件的大小原因, 只能使用post
中文傳遞 :
-get 默認使用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個圖形字符,其中包括6763個漢字。
big5編碼:臺灣地區(qū)繁體中文標(biāo)準(zhǔn)字符集,采用雙字節(jié)編碼,共收錄13053個中文字,1984年實施。
gbk編碼:1995年12月發(fā)布的漢字編碼國家標(biāo)準(zhǔn),是對gb2312編碼的擴充,對漢字采用雙字節(jié)編碼。
gbk字符集共收錄21003個漢字,包含國家標(biāo)準(zhǔn)gb13000-1中的全部中日韓漢字,和big5編碼中的所有漢字。
unicode編碼(utf-8):國際標(biāo)準(zhǔn)字符集,它將世界各種語言的每個字符定義一個唯一的編碼,以滿足跨語言、跨平臺的文本信息轉(zhuǎn)換。
u4e00-u9fa5 , 0x3400-0x4db5 (中文)
兩種轉(zhuǎn)頁
內(nèi)部轉(zhuǎn) :
request.getrequestdispatcher( "目標(biāo)頁面" ) .forward( request, response );
跳轉(zhuǎn)后瀏覽器地址欄不會變化
目標(biāo)頁面路徑可以使用相對路徑
使用這種方式跳轉(zhuǎn),傳值可以使用三種方法:url中帶parameter,session,request.setattribute()
重定向 :
response.sendredirect( request.getcontextpath() + "目標(biāo)頁面" );
跳轉(zhuǎn)后瀏覽器地址欄變化。
目標(biāo)頁面要使用絕對路徑
這種方式要傳值出去的話,只能在url中帶parameter或者放在session中,無法使用request.setattribute()來傳遞
三種容器
存儲容器 : 是指用于在請求或轉(zhuǎn)頁過程中用來存儲所在傳遞的參數(shù)值的對象
常用方法
// 添加屬性 .setattribute(key, value) // 取屬性值 .getattribute(key) // 移除屬性 .removeattribute(key)
在web項目中有三種容器, 因為它們的作用范圍(生命周期)不同, 也叫三種作用域
其中 application 包含 多個session , session 包含多個 request
所以 從 request能得到session , 而從 request, session 能得到 application
request請求類型 : httpservletrequest
生命周期 : 客戶端發(fā)起請求創(chuàng)建
遇到響應(yīng) response 或者生成頁面結(jié)束
常用方法 :
// 接頁面?zhèn)鱽淼闹? string value = request.getparameter(key); //接一個值 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(); // 得到客戶端ipsession請求
類型 : httpsession
生命周期 : 瀏覽器與服務(wù)器建立通信開始
主動關(guān)閉或長時間不與服務(wù)器通信結(jié)束
常用方法 :
// 取session 的 標(biāo)識 id string sid = session.getid(); // 獲取最長等待時間 int max = session.getmaxinactiveinterval(); // 設(shè)置最長等待時間, 以秒為單位 session.setmaxinactiveinterval(len); // 取所屬的上下文 servletcontext app = session.getservletcontext();
在 web.xml中也可以設(shè)置最長等待時間, 單位是分鐘
30application上下文(全局)
類型 : servletcontext
生命周期 : 項目啟動創(chuàng)建
項目關(guān)閉結(jié)束
常用方法 :
// 取項目的真實路徑(發(fā)布路徑) string path = app.getrealpath(path); // 取 web.xml 中設(shè)置的參數(shù) string pv = app.getinitparameter(paramname);
在web.xml 里信息可以被application獲取
paramname paramvalue
servletconfig設(shè)置對象
在 servlet的init() 初始化方法傳入?yún)?shù) servletconfig
public void init(servletconfig config) throws servletexception { // 取web.xml 文件中在下的信息 string icon = config.getinitparameter(configname); // 取所屬的上下文 servletcontext app = config.getservletcontext(); }
在web.xml 文件中在下的信息
configname configvalue testservlet com.yuan.servlet.testservlet