一、 取得session 3种方法
1、context.getSession() -->>Map对象
2、HttpServletRequest request =
(HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);
再通过request 对象取得HttpSession
3、实现SessionAware接口,让strtus自动注入session实例给我们。
1、context.getSession() -->>Map对象
2、HttpServletRequest request =
(HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);
再通过request 对象取得HttpSession
3、实现SessionAware接口,让strtus自动注入session实例给我们。
二、
1.创建新项目,基本和Struts的学习-属性驱动和模型驱动一样,主要修改两个文件的代码
2.修改struts.xml
2.sesstion方法,编写UserAction.java
package com.nf.action; import com.nf.entity.User; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; import org.apache.struts2.interceptor.SessionAware; import java.util.Map; public class UserAction extends ActionSupport implements ModelDriven<User>{ private User user = new User(); //登录用的 public String login(){ System.out.println("用户名:"+user.getUserName()); if ("ad".equals(user.getUserName())&&"123".equals(user.getUserPassword())){ //登陆成功后,干什么? return this.SUCCESS; }else { return this.ERROR; } } //跳转到登陆页面的方法 public String loginView(){ return "loginViewSuccess"; } //不需要手动调用 public User getModel() { //告诉struts,你帮我对user进行赋值 System.out.println("struts 调用我们的getModel,获得user的实例"); return this.user; } }
方法1:
package com.nf.action; import com.nf.entity.User; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; import org.apache.struts2.interceptor.SessionAware; import java.util.Map; public class UserAction extends ActionSupport implements ModelDriven<User>{ private User user = new User(); //登录用的 public String login(){ System.out.println("用户名:"+user.getUserName()); if ("ad".equals(user.getUserName())&&"123".equals(user.getUserPassword())){ //登陆成功后,干什么? //第一种方法:通过context获得Map对象 //主动获得实例 ActionContext context = ActionContext.getContext(); Map<String , Object> session = context.getSession(); session.put("user",user); return this.SUCCESS; }else { return this.ERROR; } } //跳转到登陆页面的方法 public String loginView(){ return "loginViewSuccess"; } //不需要手动调用 public User getModel() { //告诉struts,你帮我对user进行赋值 System.out.println("struts 调用我们的getModel,获得user的实例"); return this.user; } }
方法2:
package com.nf.action; import com.nf.entity.User; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; import com.sun.net.httpserver.HttpServer; import org.apache.struts2.StrutsStatics; import org.apache.struts2.interceptor.SessionAware; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.Map; public class UserAction extends ActionSupport implements ModelDriven<User>{ private User user = new User(); //登录用的 public String login(){ System.out.println("用户名:"+user.getUserName()); if ("ad".equals(user.getUserName())&&"123".equals(user.getUserPassword())){ //登陆成功后,干什么? /* //第一种方法:通过context获得Map对象 //主动获得实例 ActionContext context = ActionContext.getContext(); Map<String , Object> session = context.getSession(); session.put("user",user);*/ //第2种方法 //对javaweb 产生强耦合 ActionContext context = ActionContext.getContext(); HttpServletRequest request = (HttpServletRequest)context.get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);//这里的错误要导入 HttpSession session = request.getSession(); session.setAttribute("user",user); return this.SUCCESS; }else { return this.ERROR; } } //跳转到登陆页面的方法 public String loginView(){ return "loginViewSuccess"; } //不需要手动调用 public User getModel() { //告诉struts,你帮我对user进行赋值 System.out.println("struts 调用我们的getModel,获得user的实例"); return this.user; } }
添加之后要选上
方法3:
package com.nf.action; import com.nf.entity.User; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; import com.sun.net.httpserver.HttpServer; import org.apache.struts2.StrutsStatics; import org.apache.struts2.interceptor.SessionAware; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.Map; public class UserAction extends ActionSupport implements ModelDriven<User>,SessionAware{ //定义为null,不要管它怎么来 private Map<String , Object> session = null; private User user = new User(); //登录用的 public String login(){ System.out.println("用户名:"+user.getUserName()); if ("ad".equals(user.getUserName())&&"123".equals(user.getUserPassword())){ //登陆成功后,干什么? /* //第一种方法:通过context获得Map对象 //主动获得实例 ActionContext context = ActionContext.getContext(); Map<String , Object> session = context.getSession(); session.put("user",user);*/ /*//第2种方法 //对javaweb 产生强耦合 ActionContext context = ActionContext.getContext(); HttpServletRequest request = (HttpServletRequest)context.get(org.apache.struts2.StrutsStatics.HTTP_REQUEST); HttpSession session = request.getSession(); session.setAttribute("user",user);*/ //第3种方法,实现SessionAware直接注入实例 System.out.println("session:" +session); session.put("user",user); return this.SUCCESS; }else { return this.ERROR; } } //跳转到登陆页面的方法 public String loginView(){ return "loginViewSuccess"; } //不需要手动调用 public User getModel() { //告诉struts,你帮我对user进行赋值 System.out.println("struts 调用我们的getModel,获得user的实例"); return this.user; } //用于被框架注入实例用的,不需要手动调用//这里为方法SessionAware可以用快捷键ALT+ENTER
public void setSession(Map <String, Object> map) { session = map; } }