[Java][Servlet] GET、POST 簡單應用
這邊要簡單介紹關於 Web專案 以 Servlet類 實作 GET、POST方法的應用。寫這程式會用到幾個步驟:
一、新建 Web 專案
一、新建 Web 專案
一、新建 Web 專案
二、新增 Servlet、web.xml 檔案
三、撰寫 Servlet 程式
四、撰寫 web.xml 程式
一、新建 Web 專案
二、新增 Servlet、web.xml 檔案
這兩步驟請到上一篇文章看,那邊已經有詳細的介紹~
三、撰寫 Servlet 程式
project name: servlet
class name: FirstServlet
package name: idv.ycc.servlet
package idv.ycc.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/FirstServlet")
public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public FirstServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.log("doGet()");
this.execute(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.log("doPost()");
this.execute(request, response);
}
public long getLastModified(HttpServletRequest request) {
this.log("getLastModified()");
return -1;
}
//執行
private void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
response.setCharacterEncoding("UTF-8"); //設定response 編碼方式
request.setCharacterEncoding("UTF-8"); //設定request 編碼方式
String requestURI = request.getRequestURI(); //此Servlet 的URI
String method = request.getMethod(); //呼叫Servlet 的方式(GET or POST)
String param = request.getParameter("param"); //client(客戶端) 提交的參數
response.setContentType("text/html"); //設定內容類型為 html
PrintWriter out = response.getWriter(); //取得response 的PrintWriter 字元流
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML");
out.println(" <HEAD><TITLE>First Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.println(" 以 " + method + " 方式瀏覽頁面。取得的 param 參數為: " + param + "<br/>");
out.println(" <form action='" + requestURI + "' method='get'>"
+ "<input type='text' name='param' value='param string'>"
+ "<input type='submit' value='以 GET 方式查詢頁面 " + requestURI + "'>"
+ "</form>");
out.println(" <form action='" + requestURI + "' method='post'>"
+ "<input type='text' name='param' value='param string'>"
+ "<input type='submit' value='以 POST 方式提交到頁面 " + requestURI + "'>"
+ "</form>");
//client 瀏覽器讀取該文件的更新時間
out.println(" <script type=\"text/javascript\">document.write('本頁面最後更新時間: ' + document.lastModified) </script>");
out.println(" </BODY");
out.println("</HTML");
out.flush();
out.close();
}
}
doGet():
以 GET 方式來瀏覽網頁時,會執行此方法
開啟此 Servlet 就會先執行 doGet()
執行 doGet() 前,會先執行 getLastModified() 方法,並取得執行 GET 方法的時間
過程:開啟FirstServlet.java → getLastModified() → doGet()
可於 Console 欄看到執行的過程
doPost():
以 POST 方式瀏覽網頁時,會執行此方法
不會執行 getLastModified()
Console 欄可以看到 getLastModified() 沒有被執行到,僅有 doPost()
getLastModified():
執行 GET 時會產生執行時間
return -1,表示只要有執行 GET 就會產生時間
execute():
<form
action: 將數據發送到此屬性指定之 URL
method: 可以選擇使用 GET 或 POST,對應doGet() 或 doPost() 方法 >
</form>
document.lastModified: 取得最後此頁面最後更新時間
其他參考程式碼上之註解,更詳細的話可以到 Google 上搜尋及了解~
另外 GET、POST 可以看到網址上有無參數,那就是最大的差別,當然這是表面上,內部要解的時候也會不一樣。
執行GET,網址帶有參數
GET POST 網址有無參數 有 無 安全性 較差 較好 傳輸效率 較好 較差 使用容易度 較容易 較麻煩
四、撰寫 web.xml 程式
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<!-- 瀏覽方式 -->
<servlet>
<!-- servlet-name 可以任意取,但必須唯一,因要給<servlet-mapping>, <filter>等使用 -->
<servlet-name>FirstServlet</servlet-name>
<!-- Servlet 的類別名 -->
<servlet-class>idv.ycc.servlet.FirstServlet</servlet-class>
<!-- 一個<serlet>元素可以配置多個 <init-param>(初始化參數) -->
<!-- Servlet類別 可以使用getServletContext().getInitParam(String paramName) 來取得<param-value> -->
<init-param>
<param-name>message</param-name>
<param-value>welcome to FirstServlet</param-value>
</init-param>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<!-- 可設 0 or 1 -->
<!-- 設1,則Tomcat 在啟動時會加載該 Servlet,否則必須有請求時才會加載 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<!-- <servlet-mapping><servlet-name>配對<servlet><servlet-name> -->
<!-- 並瀏覽其<servlet-class> -->
<servlet-name>FirstServlet</servlet-name>
<!-- 配置其Servlet 的地址,可以多對一 -->
<url-pattern>/idv.ycc.servlet.FirstServlet</url-pattern>
<url-pattern>/FirstServlet.do</url-pattern>
<url-pattern>/FirstServlet.php</url-pattern>
</servlet-mapping>
</web-app>
程式碼上都有註解,可以參考看看
其中以下是最為重要的程式碼
<servlet>
<servlet-name></servlet-name> //自己定義,供 <servlet-mapping>搜尋用的名稱
<servlet-class></servlet-class> //當<servlet-mapping>搜尋到後,會執行此 class
</servlet>
<servlet-mapping>
<servlet-name></servlet-name> //<servlet-mapping>會搜尋此name,並與<servlet>的<servlet-name>對應用
<url-pattern></url-pattern> //自己定義,賦予此頁面的路徑
</servlet-mapping>
此 web.xml 程式告訴我們,網址後面為 .php、.asp、.jsp 並不一定就是該程式語言,且路徑也可以多個對一個頁面。
以此程式為例,網頁上輸入以下網址,也是可以進入此頁面,但卻不是 php 的語言!
http://localhost:8080/servlet/FirstServlet.php
以上介紹到此,這邊以簡單的應用及解釋為主,如有問題再請下方留言
留言
張貼留言