Servlet:三大作用域request session application

Servlet:三大作用域
1. request
    表示一个请求,只要发出一个请求就会创建一个request,仅在当前的请求中有效
   用处:常用于服务器间同一请求不同页面之间的参数传递
   request.setAttribute();
   request.getAttribute();
   request.getParamter();
2、session
   服务器会为每个会话创建一个session对象,session中的数据可供当前会话中所有Servlet共享
   会话:用户打开浏览器会话开始 直到关闭浏览器 会话才结束。 一次会话只会创建一个session对象
    常用 web开发中的登录验证界面
    session.setAttribute()
    session.getAttribute();
    获取session对象的方法
        HttpSession session=request.getSession();
        JSP中可以直接使用
     在springMVC中 一般通过在方法里面直接传入
  @RequestMapping("/login")
       public String login(User user,HttpServletRequest request)throws Exception{
          User resultUser=userService.login(user);
          if(resultUser==null){
             request.setAttribute("user", user);
             request.setAttribute("errorMsg", "用户名或密码错误!");
             return "login";
          }else{
             HttpSession session=request.getSession();
             session.setAttribute("currentUser", resultUser);

          return "redirect:/main.jsp";
          }
       }
  /**
        * 用户注销
        * @param session
        * @return
        * @throws Exception
        */
       @RequestMapping("/logout")
       public String logout(HttpSession session)throws Exception{
          session.invalidate();
          return "redirect:/login.jsp";
       }
   如果是Struts2,
     (1)在实际开发过程中更多从采用ActionContext 页面经常需要返回map的一个提示信息,
        Map<String,Object> session=ActionContext.getContext.getSession();

     (2)ServletActionContext使用的是原生的sevletApi对象:httpSession
        HttpSession session = ServletActionContext.getRequest().getSession();

     (3)从解耦的角度来看实现SessionAware接口 是最好的选择,但是我做过的项目一般是使用ActionContext
        public class UserAction extends BaseAction implements SessionAware

     1) ActionContext类
        ActionContext.getContext().getSession();
        该方法返回的是一个Map<String,Object>,Strust2使用该类型是想简化对session的操作。

     2)ServletActionContext类

     ServletActionContext.getRequest().getSession();

     该方法返回的是一个HttpSession,保证了系统的兼容性。

     3)SessionAware接口
      让Action实现SessionAware接口,实现其void setSession(Map<String,Object> session);
        struts2在实例化完Action后,会自动判断Action是否实现了SessionAware接口,
     如果实现了struts2会自动调用其setSession方法,将session注入给Action。
     此时,需要Action定义成员变量接收注入的session,然后在业务方法中就可以使用了。

     if(loginUser != null){
                //记录当前登陆的用记
       ActionContext.getContext().getSession().put("loginUser", loginUser);
       ajaxReturn(true, "");
       }else{
                ajaxReturn(false, "用户名或密码不正确");
     }

      //登出操作
      ActionContext.getContext().getSession().remove("loginUser");




3. application
    作用范围:所有的用户都可获得此次信息,此信息在整个服务器上被保留
    只要设置一次,所有的网页窗口都可以提取数据
    在服务器关闭时销毁
    一个javaweb应用只创建一个ServletContext对象
    较少使用,更多的可以看https://blog.csdn.net/titilover/article/details/6800782

猜你喜欢

转载自blog.csdn.net/reallycold/article/details/81124179