日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java web—Servlet的请求与响应

發(fā)布時間:2024/9/30 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java web—Servlet的请求与响应 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言:
????????在家上網(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í)行一次。
init(ServletConfig config): 其中的config就是ServletConfig接口對象。
  • service() :響應(yīng)客戶端請求。每次訪問Servlet,都會被執(zhí)行
service(ServletRequest request, ServletResponse response)
  • destroy() :服務(wù)器正常關(guān)閉后,會執(zhí)行該方法 ,只執(zhí)行一次。
public void destroy()
六、配置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方法

  • 請求一個靜態(tài)頁面或圖形文件時使用GET方法,因為僅僅需要發(fā)送文件名;
  • 發(fā)送大數(shù)據(jù)的時候,使用POST方法;
  • 上傳文件時,使用POST方法;
  • 發(fā)送用戶名、密碼或其他保密信息的時候使用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報頭插入一個cookie

    4、設(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表

    public class RefreshServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{response.setCharacterEncoding("GBK");//設(shè)置響應(yīng)類型(Excel)response.setContentType("application/vnd.ms-excel");PrintWriter out = response.getWriter();out.println("姓名\t 年齡\t 性別");out.println(“張小三\t 20\t 男");out.println(“李小斯\t 21\t 女");} }

    結(jié)果會產(chǎn)生一個Excel文件

    九、ServletContext對象:

    作用:在ServletContext中可以存放能夠被所有用戶訪問的共享數(shù)據(jù)。
    特點:

  • 只在web應(yīng)用被關(guān)閉的時候才被銷毀
  • 不同的web應(yīng)用,ServletContext各自獨立存在
  • 每個Web應(yīng)用只有一個ServletContext對象
  • 獲取對象: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

    //必須使用相對于根”/”的路徑 getServletContext().getRequestDispatcher("/x") //可以為當(dāng)前或根的相對路徑 request.getRequestDispatcher("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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。