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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HttpServlet类简介和简单用法

發布時間:2025/3/20 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HttpServlet类简介和简单用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一, servlet 的三種模式

1.1 實現servlet 接口

如果1個類要實現servlet接口.則要重寫如下所有方法:

void destroy()ServletConfig getServletConfig()String getServletInfo()void init(ServletConfig config)void service(ServletRequest req, ServletResponse res)

其中service方法是關鍵, 它決定了這個Servlet類獲得http請求req的信息后做些什么, 返回什么信息到res對象中)



1.2 繼承GenericServlet 抽象類.

實際上GenericServlet 這個抽象類本身是1個實現了servlet接口的抽象類, 只不過Servlet的程序猿按照默認情況幫你重寫了上面5個方法中的4個,
但是關鍵的service()方法還是需要你字節寫.

也就是講GenericServlet的使用比上面的方法要更加方便了, 繼承該類的Servlet類只需要重寫1個方法(除構造方法外).

1.3 繼承HttpServlet抽象類

但是上面兩個方法都不是最常用的, 實際在軟件公司工作工作中, 95%的情況下都會選擇第3種情況, 就是繼承HttpServlet抽象類.

HttpSerlvet也是1個實現了Servlet接口的抽象類.
繼承抽象類HttpServlet的Servlet類要重寫分別兩個方法.

分別是

doGet(HttpServletRequest request, HttpServletResponse response)doPost(HttpServletRequest request, HttpServletResponse response)

上面兩個方法都可以處理http請求和返回信息給webserver. 當然了, 它們實際上最終都是重寫并調用了Servlet接口的service方法.

但是為什么要分開doGet和doPost呢.

其實doGet是用于處理瀏覽器的Get請求的. 也就是如果1個瀏覽器向webserver發起1個Get請求, webserver就會交由隊對應servlet類的doGet()方法來處理

相對地, Post請求就會交由doPost()來處理.

二, 什么是Get請求和Post請求.

如上圖, 我回了一個貼后,
見到瀏覽器向服務器發了很多個請求.

但是基本上都是Get請求, 只有1個Post請求, 但是那個Post請求包含了我回復的內容.

顧名思義,
Get請求就是瀏覽器向服務器申請內容的請求, Get information嘛.
而Post就是向瀏覽器提交數據的請求, 例如我想把我回復的內容發給服務器(回貼子).

但是上面兩句話并不是絕對的. Get請求也可以提交數據.

如果打開1個網址url, 那么這個請求肯定是1個Get請求

如果提交數據則不是絕對的





它們取決于jsp的代碼.

例如下面的就是利用Get請求來提交數據:

<form action="/TestServlet1/MyServlet2" method="get">

而下面的代碼就是利用post請求來提交數據:

<form action="/TestServlet1/MyServlet2" method="get">

而默認情況下是Get請求. 例如:

<form action="/TestServlet1/MyServlet2">

三, Get請求提交數據的1個例子.

下面我們寫1個簡單例子來熟悉一下HttpServlet的用法以及Get請求的特點.

3.1 新建1個web項目.

建議利用IDE, 更加方便

3.2 servlet代碼

我們編寫1個Servlet類MyServlet2:

package com.pkg1;import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class MyServlet2 extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public MyServlet2() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.getOutputStream().println("It's call by doget()!");}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.getOutputStream().println("It's call by dopost()!");}}

上面的doGet() 和 doPost()方法分別給瀏覽器返回不同的信息. 那么我們就可以通過瀏覽器內容來判斷究竟執行了哪個方法.

3.3 編寫index.jsp

我們在主頁上寫兩個文本框,分別是用戶名和密碼.
還有1個submit按鈕, 用于提交用戶輸入的用戶名和密碼啦.

代碼:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Test doGet and doPost</title> </head> <body><form action="/TestServlet1/MyServlet2" method="post">Username:<input type="text" name="username"/>Password:<input type="text" name="password"/><input type="submit" value="login"/></form> </body> </html>

3.4 修改web.xml, 將servlet類和action url對應起來

添加:

<servlet><servlet-name>MyServlet2</servlet-name><servlet-class>com.pkg1.MyServlet2</servlet-class></servlet><servlet-mapping><servlet-name>MyServlet2</servlet-name><url-pattern>/MyServlet2</url-pattern></servlet-mapping>

3.5 編譯執行, 然后導出war包到tomcat 的webapps 文件夾, 啟動tomcat, 然后在瀏覽器輸入:http:\\localhost:8080\TestServlet1\MyServlet2

其中TestServlet1是項目名.

如上圖, 然后輸入登陸名和密碼, 按submit button

見到網頁跳轉, 輸出

好明顯, 見到這個請求交由servlet類的doGet()來處理了.

而且見到,我作為用戶輸入的密碼和passwd作為1個url的部分顯示在了地址欄等地方, 這樣是不太安全的.
這也是Get方法不是很適合提交數據的原因, 因為提交的數據容易被別人看到.

四, post請求提交數據的1個例子

4.1 修改index.jsp改為post請求.

修改很簡單, 改動1個地方就可以了:

<form action="/TestServlet1/MyServlet2" method="post">

4.2 在輸入用戶密碼, 執行一次

只修改jsp的話不用重新編譯..

見到這次交由servlet類的dopost()方法處理

而且在地址欄等明顯地方是看不到用戶提交的數據的.
用戶名和密碼數據是作為參數, 封裝在post請求里面.

所以講post提交是比Get提交要安全一些的.

但是實際上, http的post請求信息一旦被他人截獲, 密碼等信息仍然可能被泄露, 因為http協議是明文發送數據的.
所以真正需要嚴格安全的網頁(例如網銀登陸),都需要使用https協議.

五, 總結Get提交和Post提交的一些區別.

  • Get提交把提交數據寫在url后面, 而Post提交不會
  • Get提交有數據容量限制(4K), 而Post提交原則上是沒有數據大小限制的, 但是不建議超過64k
  • Get提交是即時相應, 所以反應快, 而Post提交會被WebServer放入隊列, 所以有時相應會慢點.

總結

以上是生活随笔為你收集整理的HttpServlet类简介和简单用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。