1. 程式人生 > 其它 >Servlet筆記--day02

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"));
		
	
	}
	}