Servlet共享變數Context,Session,或Request的作用範圍
阿新 • • 發佈:2019-01-24
在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的例項都發生了改變。