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