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