1. 程式人生 > >Servlet共享變數Context,Session,或Request的作用範圍

Servlet共享變數Context,Session,或Request的作用範圍

在Servlet中進行變數的共享可硬通過Servlet容器中存在的ServletContext,HttpSession和HttpServletRequest的例項來實現。

在三中方式共享變數的方法是使用Context,Session,Request型別的例項呼叫serAttribute("varName","obj")方法將需要共享的變數儲存到物件當中。然後在需要使用該共享變數的地方在通過getAttribute("varName")方法來獲得變數。

/*提供共享變數的Servlet類:ShareSharingVars.java*/
package javaee.servlet;
import ......
@WebServlet("/Share")
public class ShareSharingVars extends HttpServlet{
	......
	protected void doGet(HttpServletRequest request,HttpServletResponse response)
		throws ServletException,IOException{
		//使用ServletContext共享變數
		ServletContext sc = this.getServletContext();
		sc.setAttribute("sharingvar_sc", "context");
		//使用httpSession共性變數
		HttpSession session = request.getSession();
		session.setAttribute("sharingvar_se", "session");
		//使用HttpServletRequest共性變數
		request.setAttribute("sharingvar_req", "request");
		
		//在同一頁面中讀取共享變數
		String sc_value = (String)sc.getAttribute("sharingvar_sc");
		String session_value = (String) session.getAttribute("sharingvar_se");
		String request_value = (String) request.getAttribute("sharingvar_req");
		//在對客戶端的響應中顯示讀取的共享變數值
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		......
		out.println("Context:" + sc_value + "<br>");
		out.println("Session:" + session_value + "<br>");
		out.println("Request:" + request_value + "<br>");
		out.println("<a href=/HelloWorld/GetSharingVars>");
		out.println("使用超連結跳轉到使用共享變數頁面");
		out.println("</a>");
		......
	}
}

/*提供共享變數的Servlet類:GetSharingVars.java*/
package javaee.servlet;
import ......
@WebServlet("/GetSharingVars")
public class GetSharingVars extends HttpServlet{
	......
	protected void doGet(HttpServletRequest request,HttpServletResponse response)
		throws ServletException,IOException{
		//讀取共享變數的值
		ServletContext sc = this.getServletContext();
		HttpSession session = request.getSession();
		String sc_value = (String) sc.getAttribute("sharingvar_sc");
		String session_value = (String) session.getAttribute("sharingvar_se");
		String request_value = (String) request.getAttribute("sharingvar_req");	
		//在對客戶端的響應中顯示讀取的共享變數
		......
		out.println("GetSharingVars輸出頁面<br>");
		out.println("在同一個頁面中讀取共享變數<br>");
		out.println("Context:" + sc_value + "<br>");
		out.println("Session:" + session_value + "<br>");
		out.println("Request:" + request_value + "<br>");
		.......
}

/*提供共享變數的Servlet類:ShareSharingVarsDispatch.java*/
package javaee.servlet;
import ......
@WebServlet("/ShareAndDispatch")
public class ShareSharingVarsDispatch extends HttpServlet{
	......
	protected void doGet(HttpServletRequest request, HttpServletResponse  response)
			throws ServletException,IOException{
		this.doPost(request, response);
	}
	protected void doPost(HttpServletRequest request,HttpServletResponse response)
			throws ServletException,IOException{
		//使用ServletContext共享變數
		ServletContext sc = this.getServletContext();
		sc.setAttribute("sharingvar_sc", "context");
		//使用HttpSession共享變數
		HttpSession session = request.getSession();
		session.setAttribute("sharingvar_se", "session");
		//使用HttpServletRequest共享變數
		request.setAttribute("sharingvar_req", "request");
		//使用轉發跳轉處理
		request.getRequestDispatcher("/GetSharingVars").forward(request, response);
	}
}

/*提供共享變數的Servlet類:ShareSharingVarsAndRedirect.java*/
package javaee.servlet;
import ......
@WebServlet("/SharAndRedirect")
public class ShareSharingVarsAndRedirect extends HttpServlet{
	......
	protected void doGet(HttpServletRequest request, HttpServletResponse  response)
			throws ServletException,IOException{
		this.doPost(request, response);
	}
	protected void doPost(HttpServletRequest request,HttpServletResponse response)
			throws ServletException,IOException{
		//使用ServletContext共享變數
		ServletContext sc = this.getServletContext();
		sc.setAttribute("sharingvar_sc", "context");
		//使用HttpSession共享變數
		HttpSession session = request.getSession();
		session.setAttribute("sharingvar_se", "session");
		//使用HttpServletRequest共享變數
		request.setAttribute("sharingvar_req", "request");
		//使用重定向跳轉處理
		response.sendRedirect("/HelloWorld/GetSharingVars");
	}
}

同一個頁面內:

點選跳轉後(超連結):

採用轉發機制處理(request.getRequestDispatch):

採用重定向(response.sendRedirect):

關閉後再開啟瀏覽器(http://localhost:8080/HelloWorld/GetSharingVars):

PS:同一個頁面,或者採用轉發機制進行處理,ServletContext、HttpSession、HttpServletRequest的例項都不會發生改變。

重定向、超連結,在這個情況下HttpServletRequest的例項發生了變化。

關閉再開啟瀏覽器,在這個情況下HttpSession、HttpServletRequest的例項都發生了改變。