1. 程式人生 > >Servlet入門(八)ServletContext物件

Servlet入門(八)ServletContext物件

前言

      本章學習ServletContext物件的相關知識

方法

1.概念

我們知道,request物件解決的是同一請求下的資料共享問題,session解決了同一使用者(會話)下不同請求的資料共享問題,那麼不同使用者(會話)下的不同請求的資料該怎麼共享呢?那就要用到ServletContext物件

顧名思義,ServletContext物件實質是servlet上下文,我們可理解為儲存與伺服器中。

既然是儲存於伺服器中,那麼只要是伺服器沒有關閉,該物件就不會消失,即使你關閉了瀏覽器!

2.使用

1)獲取ServletContext物件

  • 通過this關鍵字進行獲取
ServletContext servletContext = this.getServletContext();
  • 通過servletConfig物件獲取
ServletContext servletContext = this.getServletConfig().getServletContext();
  • 通過session物件進行獲取
ServletContext servletContext = request.getSession().getServletContext();

2)使用session儲存公共資料

同session一樣,他也採取了setAttribute(鍵,值);設定資料,使用getAttribute(鍵)獲取資料

例項:使用servletContext儲存登入使用者名稱

package com.jwang.student.servlet;

import com.jwang.student.bo.User;
import com.jwang.student.service.UserService;
import com.jwang.student.service.impl.UserServiceImpl;

import javax.servlet.ServletContext;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/login.do")
public class UserServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response){
        try {
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            ServletContext servletContext = request.getSession().getServletContext();
            request.setCharacterEncoding("UTF-8");
            UserService userService = new UserServiceImpl();
            User user = new User("01", username, password);
            if (userService.login(user)) {
                servletContext.setAttribute("username",username);
                response.sendRedirect("/success.jsp");
            } else {
                request.getRequestDispatcher("/login.jsp").forward(request, response);
            }
        }catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response){
        this.doGet(request, response);
    }

}