Servlet筆記--day02
Servlet筆記–day02
servlet中get()和post()的區別
get():
1.是資料請求到servlet上的一個方法,通過位址列的方式來顯示資料,所以安全性較低
2.傳說時受長度限制,最多傳遞2048個位元組
3.有快取功能,可以把資料快取到瀏覽器
4.傳輸資料的ASCII,不能傳輸二進位制;傳輸檔案時不能使用
post():
1.不會在位址列中顯示,安全性比較高
2.沒有資料長度限制,隨意的帶引數
3.所有的資料都不快取
4.可以傳輸二進位制,傳輸檔案的時候用它
注:使用者註冊時使用post(),不可使用get();刪除和修改時可用get()
Servlet的請求轉發與重定向
重定向
重定向:我們訪問一個servlet時,它給我們重定向到另一個servlet.
類似於有一箇中間商,A通過B去找C
特點:
1.至少是兩次請求,第一次是直接訪問的請求,第二次是經過重定向之後的請求,是新的請求。
2.不會帶引數傳遞,也就是第一個請求可以拿到引數,第二個就不可以,例如下圖中的例子
3.位址列中的地址會發生變化
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println ("這是第一個servlet");
//重定向
response.sendRedirect("TwoServlet");
System.out.println(request.getParameter("id"));
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("這是第二個servlet" );
request.getParameter("id");
System.out.println(request.getParameter("id"));
}
在網頁中輸入![![![![中![![![
結果
請求轉發
當訪問一個servlet時,它會把我們的請求轉發給另一個(轉發的時候要帶資料轉發)
request.getRequestDispatcher("/TwoServlet").forward(request, response);
特點:
1.位址列中的內容不會發生變化
2.從頭到頁面是一次請求
3.轉發的時候帶資料轉發
重定向與請求轉發例子
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String do1=request.getParameter("do");
if(do1.equals("list")) {
response.sendRedirect("/ListServlet");
}else if(do1.equals("del"))
{
request.getRequestDispatcher("/DeleteServlet").forward(request, response);
}
else if(do1.equals("add"))
{
request.getRequestDispatcher("/AddServlet").forward(request, response);
}else if(do1.equals("update"))
{
request.getRequestDispatcher("/UpdateServlet").forward(request, response);
}
}
Servlet的4大域
把處理完畢的資料放到域中,使用的時候可以從域中去把資料去取出來。
由大到小:application(整個應用程式),session(一次會話),request(一次請求),pageContext(當前頁面)
域中的資料都是有範圍的,如果範圍超出,就取不到資料了
PageContext:作用域在當前的頁面上,超過當前頁面就沒有作用了。
request:一次請求,把資料儲存在一次請求中,只要請求是一次,就可以拿到裡面的資料
session:一次會話(只要不關閉瀏覽器,它就一直在),很重要,經常用,例:使用者登入資訊,購物車
application:整個應用程式的域,只要伺服器不關閉,它就一直存在,在實現servlet或jsp中共享資料時用它
例子:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//PageContext域
PageContext pageContext=JspFactory.getDefaultFactory().getPageContext(this, request, response,null, true, 8192, true);
pageContext.setAttribute("username", "zhangsan");
System.out.println(pageContext.getAttribute("username"));
//request域
request.setAttribute("username", "lisi");
request.getAttribute("username");
request.getRequestDispatcher("/UserServlet?do").forward(request, response);//請求轉發
//session域
HttpSession session=request.getSession();
session.setAttribute("username", "zll");
System.out.println(session.getAttribute("username"));
//application域
ServletContext appliaContext=this.getServletContext();
appliaContext.setAttribute("username", "lxy");
System.out.println(appliaContext.getAttribute("username"));
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PageContext pageContext=JspFactory.getDefaultFactory().getPageContext(this, request, response,null, true, 8192, true);
System.out.println(pageContext.getAttribute("username"));
System.out.println(request.getAttribute("username"));
HttpSession session=request.getSession();
System.out.println("UserServlet獲取的session"+session.getAttribute("username"));
ServletContext appliaContext=this.getServletContext();
System.out.println(appliaContext.getAttribute("username"));
}
}