Servlet的doGet與doPost方法的區別與使用
阿新 • • 發佈:2019-01-06
一,區別
在使用表單提交資料到伺服器的時候有兩張方式可共選擇,一個是post一個是get。可在<form>中的method屬性中指定提交的方式。如:<form action="inputForm"method="get">,如果不指定method屬性,則會預設該屬性為”get”方式。
Get和post都能夠提交資料,那麼他們有什麼不同呢?
不同點一:
通過get方式提交的資料有大小的限制,通常在1024位元組左右。也就是說如果提交的資料很大,用get方法就可需要小心;而post方式沒有資料大小的限制,理論上傳送多少資料都可以。
不同點二:
通過get傳遞資料,實際上是將傳遞的資料按照”key,value”的方式跟在URL的後面來達到傳送的目的的;而post傳遞資料是通過http請求的附件進行的,在URL中並沒有明文顯示。
不同點三:
通過Get方式提交的資料安全性不高,而Post方式的更加安全~
二,使用
下面舉個例子說明:
1.post提交--doPost方法
login.jsp
LoginServlet:<%@ 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>登入</title> </head> <body> <h3>登入</h3> <hr> <form action="LoginServlet" method="post"> 使用者名稱:<input type="text" name="username"/><br> 密碼:<input type="password" name="password"/><br> <input type="submit" /> </form> </body> </html>
效果圖:protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); //向伺服器傳送請求獲取到引數 String username=request.getParameter("username"); String password=request.getParameter("password"); System.out.println(username+"--"+password); response.setHeader("Content-Type", "text/html; charset=UTF-8"); Writer out=response.getWriter(); out.write("使用者名稱:"+username); out.write("密碼:"+password); out.flush(); out.close(); }
這就是Post方式提交和doPost方法使用的效果,是不是更安全呢~~~
2.get方式--doGet方法
login.jsp:
<%@ 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>登入</title>
</head>
<body>
<h3>登入</h3>
<hr>
<form action="LoginServlet" method="get">
使用者名稱:<input type="text" name="username"/><br>
密碼:<input type="password" name="password"/><br>
<input type="submit" />
</form>
</body>
</html>
LoginServlet:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
//向伺服器傳送請求獲取到引數
String username=request.getParameter("username");
String password=request.getParameter("password");
System.out.println(username+"--"+password);
response.setHeader("Content-Type", "text/html; charset=UTF-8");
Writer out=response.getWriter();
out.write("使用者名稱:"+username);
out.write("密碼:"+password);
out.flush();
out.close();
}
效果圖:
看這個效果圖是不是覺得使用者名稱和密碼都暴露了呢~~這樣很不安全~
3.也可以post方式提交,然後在doGet方式寫邏輯程式碼,不過要在doPost方法中呼叫doGet方法,同樣get方式也是一樣的道理~~~
另外,除了doGet和doPost方法之外,還有doPut、doDelete、doTrace、doHead、doOptions,但使用的比較少。