方式1: 直接拿到ServletApi, 执行操作
直接获取servlet(通过servletactionContext提供的静态方法)
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
ServletContext application = ServletActionContext.getServletContext();
// 操作
request.setAttribute("request_data", "request_data1");
session.setAttribute("session_data", "session_data1");
application.setAttribute("application_data", "application_data1");
*/
方式2: 通过ActionContext类
通过actioncontext获取不同的map(,ActionContext不能放到构造函数中)
// 【推荐:解耦的方式实现对数据的操作】
ActionContext ac = ActionContext.getContext();
// 得到Struts对HttpServletRequest对象进行了封装,封装为一个map
// 拿到表示request对象的map
Map<String,Object> request = ac.getContextMap();
// 拿到表示session对象的map
Map<String, Object> session = ac.getSession();
// 拿到表示servletContext对象的map
Map<String, Object> application = ac.getApplication();
// 数据
request.put("request_data", "request_data1_actionContext");
session.put("session_data", "session_data1_actionContext");
application.put("application_data", "application_data1_actionContext");
方式3: 实现接口的方法(如果常常使用这些对象)
public class DataAction extends ActionSupport implements RequestAware, SessionAware, ApplicationAware{
private Map<String, Object> request;
private Map<String, Object> session;
private Map<String, Object> application;
// struts运行时候,会把代表request的map对象注入
@Override
public void setRequest(Map<String, Object> request) {
this.request = request;
}
// 注入session
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
// 注入application
@Override
public void setApplication(Map<String, Object> application) {
this.application = application;
}
@Override
public String execute() throws Exception {
// 数据
request.put("request_data", "request_data1_actionAware");
session.put("session_data", "session_data1_actionAware");
application.put("application_data", "application_data1_actionAware");
4.采用属性封装(表单提交的值(全是string)自动转换类型(转换成同名属性的类型))
表单数据
<form action="${pageContext.request.contextPath }/form.action" method="post">
用户名:<input type="text" name="username"/><br/>
密 码:<input type="password" name="password"/><br/>
地 址:<input type="text" name="address"/><br/>
<input type="submit" value="提交"/>
</form>
声明表单属性,并生成set方法 (get方法可以没有,但是一定要有set方法.并且名称意义对应)
private String username;
private String password;
private String address;
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public void setAddress(String address) {
this.address = address;
}
public String execute() throws Exception {
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setAddress(address);
return NONE;
}
5.模型驱动封装(重点)
public class DemoAction1 extends ActionSupport implements ModelDriven<User> {
private User user = new User();
public User getUser() {
return user;
}
@Override
public User getModel() {
// TODO Auto-generated method stub
return user;
}
public String execute() throws Exception {
System.out.println(user);
return NONE;
}
}
6.表达式封装
表单数据,注意name属性值的写法,实体对象。属性名
<form action="${pageContext.request.contextPath }/form.action" method="post">
用户名:<input type="text" name="user.username"/><br/>
密 码:<input type="password" name="user.password"/><br/>
地 址:<input type="text" name="user.address"/><br/>
<input type="submit" value="提交"/>
</form>
必须生成实体类的set和get方法
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute() throws Exception {
System.out.println(user);
return NONE;
}
7.List集合封装
表单数据 [0]为list下标值
<form action="${pageContext.request.contextPath }/form5" method="post">
用户名:<input type="text" name="list[0].username"/><br/>
密 码:<input type="password" name="list[0].password"/><br/>
年 龄:<input type="text" name="list[0].age"/><br/>
地 址:<input type="text" name="list[0].address"/><br/>
<input type="submit" value="提交"/>
</form>
代码
private List<User> list;
public List<User> getList() {
return list;
}
public void setList(List<User> list) {
this.list = list;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println(list);
return NONE;
}
8.Map集合封装
页面 'one'为键
<form action="${pageContext.request.contextPath }/form6" method="post">
用户名:<input type="text" name="map['one'].username"/><br/>
密 码:<input type="password" name="map['one'].password"/><br/>
年 龄:<input type="text" name="map['one'].age"/><br/>
地 址:<input type="text" name="map['one'].address"/><br/>
<input type="submit" value="提交"/>
</form>