<!-- 配置文件中只要添加以下配置,那么以后修改配置文件不用重启tomcat -->
<constant name="struts.devMode" value="true" />
在servlet中可以通过servlet API来获取Session,在Struts中如何获取Session呢?
解析:将用户名放入session 两种方案
1. 与Servlet API解耦的访问方式
--->01.使用ActionContext类获取ServletAPI对象对应的Map对象
--->02.Struts2向Action注入ServletAPI对象对应的Map对象
2. 与Servlet API耦合的访问方式
解耦方式:
方案一: 对Servlet API进行封装 ,借助ActionContext
提供了三个Map对象访问request、session、application作用域
通过ActionContext类获取这三个Map对象
Object get("request")
Map getSession()
Map getApplication()
案例:登陆成功后,记录用户名到Session中,登陆失败,跳会登陆页面
步骤一:书写Action
方案二:向Action中注入ServletAPI对象对应的Map对象
步骤一:书写Action
耦合方式:
方式一:通过ActionContext的子类ServletActionContext实现
方式二:向Action实例注入Servlet API对象
Modeldriven action
在Struts2中,提供了另外一种直接使用域对象的方式,就是让action视线ModelDriven接口。ModelDriven让你可以直接操作程序中的领域对象,允许你在Web层和业务逻辑层使用相同的对象。
01.Action类
public class LoginAction extends ActionSupport implements SessionAware,ModelDriven<User>{
private User user=new User();
private Map<String, Object> map;
public String execute() throws Exception {
if (user.getName().equals("1")&&user.getPassword().equals("1")) {
//用session记录登录身份
map.put("uname", user.getName());
return SUCCESS;
}else {
return LOGIN;
}
}
/**
* 参数当中的就是session对象
* @param map
*/
public void setSession(Map<String, Object> map) {
this.map=map;
}
public Map<String, Object> getMap() {
return map;
}
public void setMap(Map<String, Object> map) {
this.map = map;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public User getModel() {
return user;
}
}
2、Login.jsp页面
<s:form method="post" action="login">
请输入用户名:
<s:textfield name="name"></s:textfield> <br/>
<s:textfield name="password"></s:textfield><br/>
<s:submit value="登陆"></s:submit>
</s:form>