在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的執行個體都不會發生改變。