Struts2对ServletAPI进行了封装,提供了三个Map对象代替request,session,application
①与ServletAPI 解耦合的访问方式
通过ActionContext类获取这三个对象
public String execute() {
Users user = us.login(uname, upass);
if (user != null){
ActionContext context=ActionContext.getContext();
Map sessionMap=context.getSession();//获得session
Map requestMap=(Map)context.get("request");//获得request
Map applicationMap=(Map)context.getApplication();//获得application
requestMap.put("users", user);//实际开发中我们不推荐这样做,在后面我们会介绍到如何处理request范围
sessionMap.put("users",user);
applicationMap.put("users",user);
return "error";
}
②与ServletAPI耦合的访问方式
通过ServletActionContext类获取ServletAPI对象
public String execute() {
Users user = us.login(uname, upass);
if (user != null){
HttpServletRequest request=ServletActionContext.getRequest();//获得request
HttpServletResponse response=ServletActionContext.getResponse();//获得response
HttpSession session=request.getSession();//和servlet里一样,获得session
ServletContext application=ServletActionContext.getServletContext();//获得application
return "success";}
return "error";
}
建议使用解耦合方式访问
介绍一下:后台Action属性意义:
(1)封装数据
(2)保存状态:两个范围:①ActionContext②request
实际开发中一般这样处理封装类
<body>
<form action="/mynews/loginAction.action" method="post">
用户名:<input type="text" name="user.uname"/><br/>
密 码:<input type="password" name="user.upass"/><br/>
<input type="submit" value="登录"/><input type="reset" value="重置"/>
</form>
</body>
上面红色字体部分将用户名和密码保存在user这个属性里
注意:Action类里属性名字和表单里的一定要一致
Action类
package com.mynews.action;
import java.util.Map;
import com.mynews.entity.Users;
import com.mynews.service.LoginService;
import com.mynews.service.UsersService;
import com.mynews.service.impl.UsersServiceImpl;
import com.opensymphony.xwork2.ActionContext;
public class LoginAction {
private Users user;//与表单里的属性名字是一样的
private LoginService ls=new LoginService();
public String execute() {
Users myuser = ls.login(user);
if (myuser != null){
ActionContext context=ActionContext.getContext();
Map sessionMap=context.getSession();//获得session
Map applicationMap=(Map)context.getApplication();//获得application
sessionMap.put("users",myuser);
applicationMap.put("users",myuser);
this.user=myuser;//大家看到了吧,前面所说的,实际开发中,我们是这样来处理request范围的 。这句话的作用是将myuser保存在request范围内
return "success";}
return "error";
}
public Users getUser() {
return user;
}
public void setUser(Users user) {
this.user = user;
}
}
到这里struts2基本已经学到80%了,大家可以看到用struts2之后,大大简化了我们servlet里面的request.getParameter("")的代码
由于这里只有一个简单的登录功能,体现不出什么优势来;但是在大量表单数据面前,struts2的优势是很明显的