貓哥帶你去戰斗—Java Web開發—Servlet篇[2]—get與post
本篇主要涉及2個內容:
- 使用MyEclipse簡化創建Servlet的過程
- get與post請求的區別
哈哈,列完了這2個條目,貓哥自我感覺干貨滿滿啊。
首先是1,使用MyEclipse簡化創建Servlet的過程,因為手寫Servlet,每次都要搞一樣的web.xml配置文件修改,都要繼承HttpServlet方法并重寫doGet等方法,太無聊了。貓哥說過程序設計最基本的就是避免重復,重復的東西既無聊維護又麻煩。MyEclipse開發者為了避免大家寫Servlet重復,設計了工具簡化我們的操作。
具體操作比較簡單,直接右擊包【servlet】,然后選擇【New】-【Servlet】。如下圖:
看到這里,就有一種爽快的感覺,都是自動生成的啊
source folder:表示源代碼文件夾為src
package:包為servlet
name:類名為FirstAutoServlet (PS,貓哥英文水準還是杠杠的)
superclass:javax.servlet.http.HttpServlet,表示繼承這個類
doGet():處理get請求的方法
doPost():處理post請求的方法
OK,知道這些就行,點擊【next】,如下圖:
解釋如下:
Generate/Map web.xml file:是否在web.xml文件中生成配置,當然要選啊,省的自己寫嘛
Servlet/JSP Class Name:這個是默認綁定前面的自定義類
Servlet/JSP Mapping URL:這個就是匹配的用戶請求樣式
FIle Path of web.xml:這個不解釋了
DisPlay Name和Description,相當于注釋,我都把他們刪掉
點擊Finish,工程發生變化了,我們的代碼編輯區會自動打開兩個標簽,表示這兩處發生了改變,我們看下:
一個是自動生成了這樣的web.xml配置(貓哥把舊的,也就是MyTimeServletName相關的去掉了,這樣看起來清晰):
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>FirstAutoServlet</servlet-name>
<servlet-class>servlet.FirstAutoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstAutoServlet</servlet-name>
<url-pattern>/servlet/FirstAutoServlet</url-pattern>
</servlet-mapping>
這些是為我們的FirstAutoServlet自動生成的,不夠簡潔,不符合貓哥審美,修改如下:
<servlet>
<servlet-name>FirstAutoServlet</servlet-name>
<servlet-class>servlet.FirstAutoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstAutoServlet</servlet-name>
<url-pattern>/FirstAutoServlet</url-pattern>
</servlet-mapping>
OK,通過上面的配置,當用戶訪問ServletDemo項目下的/FirstAutoServlet請求時,系統會調用servlet.FirstAutoServlet處理。下面我們打開自動生成的FirstAutoServlet類如下(注釋太多,貓哥刪除之):
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FirstAutoServlet extends HttpServlet {
public FirstAutoServlet() {//構造函數
super();
}
public void destroy() {//毀滅函數,猜也能猜出來是FirstAutoServlet毀滅時候自動調用的。
super.destroy();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {//負責響應get請求
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the GET method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {//負責響應post請求
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the POST method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
public void init() throws ServletException {//初始化函數,猜也能才出來是FirstAutoServlet初始化時候調用的
}
}
看到這個類,我們就知道,“Oh My God”,標準的Servlet就該這么寫。現在我們將焦點關注于doGet和doPost方法,注意這兩個方法輸出的內容是不同的。首先重新部署然后重啟Tomcat(注意:編輯Servlet必須重新部署然后重啟Tomcat才生效,記住啦),然后在瀏覽器地址欄訪問:http://127.0.0.1:8080/ServletDemo/FirstAutoServlet
。網頁輸出This is class servlet.FirstAutoServlet, using the GET method
,表示調到了我們的doGet()方法。OK,繼續,如果我們創建一個如下網頁visitFirstAutoServlet.html。
<!-- visitFirstAutoServlet.html -->
<!DOCTYPE html>
<html>
<head>
<title>visitFirstAutoServlet.html</title>
</head>
<body>
<a >點此訪問FirstAutoServlet</a><br>
</body>
</html>
再次嘗試從網頁點擊點此訪問
鏈接,如下圖:
點擊鏈接后,網頁顯示:This is class servlet.FirstAutoServlet, using the GET method
。可見通過超級鏈接訪問,依然是get方法。
搞了半天,都沒有調到post,那到底怎么樣才算post,get和post有啥區別。其實差不多,get主要用來請求獲取內容,post主要是提交參數用來修改更新。后來用著用著,因為get也可以提交參數,post也能獲取內容,這方面的區別就不大了。從程序設計者的角度,用post更好,因為能傳遞的參數更多、更加安全。
從這段描述中,就能發現post主要是傳參數的,也就是從網頁一端提交參數到后臺Servlet一端。是不是很熟悉,前面已經講過html通過表單把用戶輸入提交給服務器
。所以post可以通過表單來提交數據。
我們修改下網頁如下:
<!-- visitFirstAutoServlet.html -->
<!DOCTYPE html>
<html>
<head>
<title>visitFirstAutoServlet.html</title>
</head>
<body>
<form name="mainForm" method="post" action="/ServletDemo/FirstAutoServlet">
<input type="submit"></input>
</form>
</body>
</html>
看到那個神奇的method="post"了嗎,在表單提交的時候,可以選擇提交的方式是get還是post,我們點擊提交按鈕試下,網頁返回:This is class servlet.FirstAutoServlet, using the POST method
。我們成功的調到了post,這邊有一點需要非常注意,就是action="/ServletDemo/FirstAutoServlet"
。需要知道第一個/表示127.0.0.1:8080/
,所以要先寫項目名后寫Servlet映射名(/FirstAutoServlet)。
OK,講到這里,看官您只需要知道:
1,網址直接訪問是get
2,<a>標簽直接訪問是get
3,form action里可以選擇get或者post
4,建議使用post
就夠了。完事。
共同學習,寫下你的評論
評論加載中...
相關文章推薦