1. 程式人生 > >Servlet的doGet與doPost方法的區別與使用

Servlet的doGet與doPost方法的區別與使用

一,區別

在使用表單提交資料到伺服器的時候有兩張方式可共選擇,一個是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

<%@ 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>
LoginServlet:
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方法之外,還有doPutdoDeletedoTracedoHeaddoOptions,但使用的比較少。