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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Servlet】HTTP 协议之请求方式、Servlet介绍、Servlet 的生命周期

發(fā)布時(shí)間:2024/2/28 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Servlet】HTTP 协议之请求方式、Servlet介绍、Servlet 的生命周期 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

HTTP 協(xié)議之請求格式

HTTP協(xié)議官網(wǎng):其中有http協(xié)議原文https://www.w3.org/Protocols/

請求格式的結(jié)構(gòu):
請求頭:請求方式、請求的地址和HTTP 協(xié)議版本
請求行:消息報(bào)頭,一般用來說明客戶端要使用的一些附加信息
空行: 位于請求行和請求數(shù)據(jù)之間,空行是必須的。
請求數(shù)據(jù):非必須。


HTTP 協(xié)議之請求方式

根據(jù)HTTP 標(biāo)準(zhǔn),HTTP 請求可以使用多種請求方法。
HTTP1.0 定義了三種請求方法: GET, POST 和HEAD 方法。
HTTP1.1 新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

常見狀態(tài)碼:

200 OK //客戶端請求成功 400 Bad Request //客戶端請求有語法錯(cuò)誤,不能被服務(wù)器所理401 Unauthorized //請求未經(jīng)授權(quán),這個(gè)狀態(tài)代碼必須和WWW-Authenticate 報(bào)頭域一起使用 403 Forbidden //服務(wù)器收到請求,但是拒絕提供服務(wù) 404 Not Found //請求資源不存在,eg:輸入了錯(cuò)誤的URL 500 Internal Server Error //服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤 503 Server Unavailable //服務(wù)器當(dāng)前不能處理客戶端的請求,一段時(shí)間后可能恢復(fù)正常

目錄結(jié)構(gòu)

Servlet 技術(shù)

狹義的Servlet 是指Java 語言實(shí)現(xiàn)的一個(gè)接口,廣義的Servlet 是指任何實(shí)現(xiàn)了這個(gè)Servlet 接口的類,一般情況下,人們將Servlet 理解為后者。Servlet 運(yùn)行于支持Java 的應(yīng)用服務(wù)器中。從原理上講,Servlet 可以響應(yīng)任何類型的請求,但絕大多數(shù)情況下Servlet 只用來擴(kuò)展基于HTTP 協(xié)議的Web 服務(wù)器

Servlet運(yùn)行在支持java 的應(yīng)用服務(wù)器上。

Servlet 的實(shí)現(xiàn)遵循了服務(wù)器能夠識別的規(guī)則,也就是服務(wù)器會(huì)自動(dòng)的根據(jù)請求調(diào)用對應(yīng)的servlet 進(jìn)行請求處理。

URL組成:
http://localhost:8080/project/my2
服務(wù)器地址:端口號/虛擬項(xiàng)目名/servlet 的別名

URI:虛擬項(xiàng)目名/servlet 的別名

瀏覽器發(fā)送請求到服務(wù)器,服務(wù)器根據(jù)請求URL 地址中的URI 信息在webapps 目錄下找到對應(yīng)的項(xiàng)目文件夾,然后在web.xml 中檢索對應(yīng)的servlet,找到后調(diào)用并執(zhí)行Servlet。


Servlet 的生命周期

從第一次調(diào)用,到服務(wù)器關(guān)閉。如果在web.xml 中配置了load-on-startup 則是從服務(wù)器開啟到服務(wù)器關(guān)閉。

package com.bjsxt.servlet;import java.io.IOException;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;/*** Servlet的生命周期:* 1、從第一次調(diào)用到服務(wù)器關(guān)閉。* 2、如果Servlet在web.xml中配置了load-on-startup,生命周期為從服務(wù)器啟動(dòng)到服務(wù)器關(guān)閉* 注意:* init方法是對Servlet進(jìn)行初始化的一個(gè)方法,會(huì)在Servlet第一次加載進(jìn)行存儲(chǔ)時(shí)執(zhí)行* destory方法是在servlet被銷毀時(shí)執(zhí)行,也就服務(wù)器關(guān)閉時(shí)。* @author MyPC**/ public class ServletLife extends HttpServlet {//初始化方法,在servlet第一次加載內(nèi)容的時(shí)候被調(diào)用@Overridepublic void init() throws ServletException {System.out.println("servlet初始化完成");}//service方法,真正處理請求的方法@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {resp.getWriter().write("servlet life");System.out.println("servlet life");}@Overridepublic void destroy() {System.out.println("我被銷毀了...");} }

Web.xml 配置

取別名的方式:在url-pattern中配置,例如:”<url-pattern>/yourname</url-pattern>,注意不要忘記斜杠!

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><servlet><servlet-name>my</servlet-name><servlet-class>cn.hanquan.servlet.MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>my</servlet-name><url-pattern>/my</url-pattern></servlet-mapping><servlet><servlet-name>my2</servlet-name><servlet-class>cn.hanquan.servlet.MyServlet2</servlet-class></servlet><servlet-mapping><servlet-name>my2</servlet-name><url-pattern>/my2</url-pattern></servlet-mapping><servlet><description></description><display-name>ServletLife</display-name><servlet-name>ServletLife</servlet-name><servlet-class>cn.hanquan.servlet.ServletLife</servlet-class></servlet><servlet-mapping><servlet-name>ServletLife</servlet-name><url-pattern>/ServletLife</url-pattern></servlet-mapping><servlet><description></description><display-name>ServletMethod</display-name><servlet-name>ServletMethod</servlet-name><servlet-class>cn.hanquan.servlet.ServletMethod</servlet-class></servlet><servlet-mapping><servlet-name>ServletMethod</servlet-name><url-pattern>/ServletMethod</url-pattern></servlet-mapping> </web-app>

Service 和doGet 和doPost 方法的區(qū)別

Service 方法:
不管是get 方式還是post 方式的請求,如果Servlet 類中有service 方法,則優(yōu)先調(diào)用Service 方法。

doGet 方法:
在沒有service 方法的情況下如果是get 方式的請求所調(diào)用的處理請求的方法

doPost 方法:
在沒有service 方法的情況下如果是post 方式的請求所調(diào)用的處理請求的方法

package cn.hanquan.servlet;import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class ServletMethod*/ public class ServletMethod extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("我是service");super.service(req, resp);//父類調(diào)用了doGet}protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {System.out.println("我是doGet");}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {System.out.println("我是doPost");} }

Servlet 的常見錯(cuò)誤總結(jié)

* Service方法和doGet方法和doPost方法的區(qū)別* * Service方法:* 可以處理get/post方式的請求,如果servlet中有Service方法,會(huì)優(yōu)先調(diào)用service方法對請求進(jìn)行處理。* doGet方法:* 處理get方式的請求* doPost方法:* 處理post方式的請求* 注意:* 如果在覆寫的service方法中調(diào)用了父類的service方法(super.service(arg0, arg1)),* 則service方法處理完后,會(huì)再次根據(jù)請求方式響應(yīng)的doGet和doPost方法執(zhí)行。所以,一般情況下* 我們是不在覆寫的service中調(diào)用父類的service方法的,避免出現(xiàn)405錯(cuò)誤。* * * Servlet的常見錯(cuò)誤:* * 404錯(cuò)誤:資源未找到* 原因一:在請求地址中的servlet的別名書寫錯(cuò)誤。* 原因二:虛擬項(xiàng)目名稱拼寫錯(cuò)誤* * 500錯(cuò)誤:內(nèi)部服務(wù)器錯(cuò)誤* 錯(cuò)誤一:* java.lang.ClassNotFoundException: com.bjsxt.servlet.ServletMothod* 解決:* 在web.xml中校驗(yàn)servlet類的全限定路徑是否拼寫錯(cuò)誤。* 錯(cuò)誤二:* 因?yàn)閟ervice方法體的代碼執(zhí)行錯(cuò)誤導(dǎo)致* 解決:* 根據(jù)錯(cuò)誤提示對service方法體中的代碼進(jìn)行錯(cuò)誤更改。* * 405錯(cuò)誤:請求方式不支持* 原因:* 請求方式和servlet中的方法不匹配所造成的。* 解決:* 盡量使用service方法進(jìn)行請求處理,并且不要再service方法中調(diào)用父類的service。

JSP頁面

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Insert title here</title> </head> <body><form action="ServletMethod" method="post">用戶名:<input type="text" name="uname" value=""><br>密碼: <input type="text" name="pwd" value=""><br><input type="submit" value="登錄" ></form> </body> </html>

總結(jié)

以上是生活随笔為你收集整理的【Servlet】HTTP 协议之请求方式、Servlet介绍、Servlet 的生命周期的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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