為了賬號安全,請及時綁定郵箱和手機立即綁定

貓哥帶你去戰斗—Java Web開發—Servlet篇[2]—get與post

2017.01.16 15:05 3558瀏覽

本篇主要涉及2個內容:

  1. 使用MyEclipse簡化創建Servlet的過程
  2. 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

就夠了。完事。

點擊查看更多內容

本文原創發布于慕課網 ,轉載請注明出處,謝謝合作

5人點贊

若覺得本文不錯,就分享一下吧!

評論

相關文章推薦

正在加載中
意見反饋 幫助中心 APP下載
官方微信

舉報

0/150
提交
取消
lpl竞猜