Java web—Servlet的请求与响应
前言:
????????在家上網(wǎng)課快上瘋了╰(‵□′)╯,上課連課本都沒有,太難受了嗚嗚嗚~, 只能在blog里記錄一下這段時間的學(xué)習(xí)的內(nèi)容,太難了…
一、servlet概述:
- 運(yùn)行在WEB服務(wù)器端的一個JAVA小程序,也就是一個Java類。
- 一個用來被用戶訪問的動態(tài)資源。
- 通常把實現(xiàn)了Servlet接口的java類統(tǒng)稱為Servlet。
- 編寫好的Servlet需要在web.xml文件中做配置才能供外界訪問。
二、servlet的作用:
- 用于處理客戶端傳來的HTTP請求,并返回一個響應(yīng)
- 它能夠處理的請求有doGet()和doPost()等方法。
三、servlet體系結(jié)構(gòu):
- Servlet由Servlet容器提供
- Servlet容器是指提供了Servlet 功能的服務(wù)器(這里指Tomcat)
- Servlet容器將Servlet動態(tài)的加載到服務(wù)器上。
- Servlet的請求首先會被HTTP服務(wù)器接收,HTTP服務(wù)器只負(fù)責(zé)靜態(tài)HTML頁面的解析。
- Servlet的請求轉(zhuǎn)交給Servlet容器,Servlet容器會根據(jù)web.xml文件中的映射關(guān)系,調(diào)用相應(yīng)的Servlet。
- Servlet將處理的結(jié)果返回給Servlet容器,并通過HTTP服務(wù)器將響應(yīng)傳輸給客戶端。
四、創(chuàng)建servlet的三種方式:
- 直接實現(xiàn)Servlet接口
- 繼承GenericServlet類
- 繼承HttpServlet類(常用)
其中關(guān)系如下:
五、servlet生命周期的三個方法:
- init():首次訪問這個Servlet,Servlet對象會被創(chuàng)建,執(zhí)行初始化方法。只執(zhí)行一次。
- service() :響應(yīng)客戶端請求。每次訪問Servlet,都會被執(zhí)行
- destroy() :服務(wù)器正常關(guān)閉后,會執(zhí)行該方法 ,只執(zhí)行一次。
六、配置web.xml文件:
編寫好的Servlet需要在web.xml文件中做配置才能供外界訪問,Servlet容器會根據(jù)web.xml文件中的映射關(guān)系,調(diào)用相應(yīng)的Servlet
例:
<web-app> <servlet><servlet-name> FirstServlet </servlet-name> //為了方便使用Servlet,取的別名<servlet-class> pdsu.edu.cn.hm.HelloWorld </servlet-class> //完整的包名+類名 </servlet><!-- 配置如何訪問這個servlet --> <servlet-mapping><servlet-name> FirstServlet </servlet-name> //和上面那個起的別名必須相同!<url-pattern> /HelloServlet </url-pattern> //訪問Servlet的URL </servlet-mapping> </web-app>根據(jù)上面配置的web.xml那么項目的訪問路徑為:
七、繼承類創(chuàng)建servlet:
定義HelloWorld類繼承HttpServlet類:
1、實現(xiàn)doGet或doPost方法(或兩者都實現(xiàn))。
2、這兩個方法的方法參數(shù)均為:
- HttpServletRequest: 用于獲取Form表單的數(shù)據(jù)、HTTP請求頭部信息等等。
- HttpServletResponse: 用于設(shè)置HTTP狀態(tài)代碼、HTTP響應(yīng)頭部信息、獲取用于向客戶端發(fā)送數(shù)據(jù)的輸出流對象。
3、多數(shù)情況下在doPost方法中調(diào)用 doGet, 或相反。
八、servlet請求與響應(yīng):
1、Get與Post提交的區(qū)別:
2、何時使用GET/POST方法:
3、響應(yīng)狀態(tài)頭:
setHeader() 設(shè)置響應(yīng)頭,String類型的值 addHeader() 加響應(yīng)頭 setIntHeader()設(shè)置響應(yīng)頭,int類型的值 setDateHeader()設(shè)置響應(yīng)頭,date類型的值 containsHeader()是否包含指定的響應(yīng)頭 addCookie()向set-cookie報頭插入一個cookie4、設(shè)置處理亂碼的方法:
setContentType() 設(shè)置響應(yīng)的類型和編碼方式,比如response.setContentType("text/html;charset=utf-8"); setCharacterEncoding() 設(shè)置響應(yīng)字符編碼,比如response.setCharacterEncoding("utf-8");5、響應(yīng)消息體:
getWriter( ) 方法用于得到一個文本輸出流
PrintWriter out = response.getWriter(); 調(diào)用print()、println()或write()方法getOutputStream( ) 方法用于得到一個二進(jìn)制輸出流
ServletOutputStream out = response.getOutputStream(); OutputStream比使用PrinterWriter發(fā)送文本效率更高,可以動態(tài)地創(chuàng)建任何形式的數(shù)字內(nèi)容例:
public void doGet( HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();....}public void doPost( HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}6、HttpServletRequest對象方法:
獲取請求行:
getMethod():獲取HTTP的請求方法,GET、POST等 getRequestURI():獲取請求的URI,如 /項目名/servlet路徑 getRequestURL():獲取請求的URL,包含協(xié)議名、服務(wù)器名或IP、端口號和請求資源但不包括查詢字符串參數(shù),如http://127.0.0.1:8080/lovo/index.html getQueryString():獲取請求URL后面的查詢字符串,如name=zhangsan getProtocol():獲取請求的協(xié)議名和版本號,如HTTP/1.1 getContextPath():獲取項目名稱 getServletPath():獲取Servlet的映射路徑,如Analyz獲取請求頭:
getHeader(name):返回指定的請求頭的值 getHeaders(name):返回一個Enumeration(枚舉)包含請求頭中的所有值 getHeaderNames():特定請求中接收到的所有請求頭的名稱 getIntHeader(name):獲取特定請求頭的值,并將其轉(zhuǎn)化為int類型 getDateHeader(name):獲取特定請求頭的值,并將其轉(zhuǎn)化為Date類型7、獲取表單數(shù)據(jù):
- getParameter(parameterName):獲取表單參數(shù)的值,參數(shù)名區(qū)分大小寫,與HTML表單中出現(xiàn)的參數(shù)名一致,GET請求還是POST請求都可以采用相同的方式
- getParameterValues(parameterName):獲取同一個參數(shù)名的多個參數(shù)值,返回字符串?dāng)?shù)組對象
- getParameterNames():以Enumeration (枚舉)的方式返回請求中所有的表單參數(shù)名列表
例:
String name=request.getParameter("username"); String sex=request.getParameter("sex"); String email=request.getParameter("email");8、請求重定向:
- 當(dāng)Web服務(wù)器接受到客戶端的請求后,由于某些條件限制,不能訪問當(dāng)前請求URL所指向的Web資源,可以指定了一個新的資源路徑,讓客戶端重新發(fā)送請求,這就是請求重定向。
實現(xiàn)重定向的兩種方式:
1、狀態(tài)碼302+location配合使用:
response.setStatus(302); response.setHeader(“l(fā)ocation”,“/項目名/頁面名或servlet名”)2、直接指定URI跳轉(zhuǎn):
response.sendRedirect("/lovobook/bar.html");9、設(shè)置頁面自動刷新:
1、定時跳轉(zhuǎn):從一個頁面定時跳到另一個頁面,比如注冊頁面跳轉(zhuǎn)到登錄頁面
response.setHeader("Refresh", "5;URL=http://www.baidu.com");2、定時刷新:頁面地址不變,頁面數(shù)據(jù)變化,比如網(wǎng)絡(luò)購票
response.setHeader("Refresh", "3"); response.getWriter().println(new java.util.Date());10、響應(yīng)狀態(tài)頭:
例:
輸出Excel表
結(jié)果會產(chǎn)生一個Excel文件
九、ServletContext對象:
作用:在ServletContext中可以存放能夠被所有用戶訪問的共享數(shù)據(jù)。
特點:
獲取對象:getServletContext()
- 同一Web應(yīng)用中不同Servlet調(diào)用getServletContext 方法獲得的是同一個ServletContext對象實例
可以對其進(jìn)行鎖定,用以防止web應(yīng)用程序?qū)﹃P(guān)鍵部分的訪問。
ServletContext的常用方法:
訪問初始參數(shù)的方法:
getInitParameter(String name), getInitParameterNames()讀取web應(yīng)用屬性的方法:
getAttribute(String name), getAttributeNames( )操縱web應(yīng)用屬性的方法:
setAttribute(String, Object), removeAttribute(String)獲取資源轉(zhuǎn)發(fā)器:
RequestDispatcher getRequestDispatcher(String path)十、RequestDispatcher對象:
作用:將客戶發(fā)送的請求發(fā)送給服務(wù)器的其他資源。
資源類型可以是靜態(tài)資源(如HTML文件)也可以動態(tài)資源(如 Servlet 或JSP 文件) 。
例:
要將請求發(fā)送給資源x
RequestDispatcher的方法:
將請求從當(dāng)前的Servlet轉(zhuǎn)發(fā)到其他資源 :
void forward(ServletRequest request,ServletResponse response)在響應(yīng)對象中包含資源的內(nèi)容:
void include(ServletRequest request,ServletResponse response)例:轉(zhuǎn)發(fā)到index.html
getServletContext().getRequestDispatcher("/index.html").forward(request, response);ok,這次就先到這里吧,后面會話的Cookie和Session單獨再記錄一篇。
總結(jié)
以上是生活随笔為你收集整理的Java web—Servlet的请求与响应的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下tar命令简介
- 下一篇: java美元兑换,(Java实现) 美元