一、结果跳转方式
1)转发(默认)
/hello.jsp
2)重定向
/hello.jsp
3)转发到Action
Demo1Action
/
4)重定向到Action
Demo1Action
/
二、访问servlet的API
注:域对象实际上就是一个Map
获取这些对象的方法
方法一:通过ActionContext(建议,只有它是获取的域对象:字典形式)
//request域=> map (struts2并不推荐使用原生request域)
//不推荐
Map requestScope = (Map) ActionContext.getContext().get("request");
//推荐(因为ActionContext的生命周期和request域相同)
ActionContext.getContext().put("name", "requestTom");
//session域 => map
Map sessionScope = ActionContext.getContext().getSession();
sessionScope.put("name", "sessionTom");
//application域=>map
Map applicationScope = ActionContext.getContext().getApplication();
applicationScope.put("name", "applicationTom");
获取方法
request: ${requestScope.name}
session:${sessionScope.name}
application:${applicationScope.name}
方法二:通过ServletActionContext
//原生request
HttpServletRequest request = ServletActionContext.getRequest();
//原生session
HttpSession session = request.getSession();
//原生response
HttpServletResponse response = ServletActionContext.getResponse();
//原生servletContext
ServletContext servletContext = ServletActionContext.getServletContext();
方法三:通过实现接口方式
public class Demo7Action extends ActionSupport implements ServletRequestAware { // 如果想获得其他的,在实现其他接口
private HttpServletRequest request;
public String execute() throws Exception {
System.out.println("原生request:"+request);
return SUCCESS;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
}
Struts与Struts2的生命周期的区别
Struts1的模式(servlet的生命周期)
默认在第一次访问的时候实例化(init方法)servlet类
然后每次请求来的时候执行service方法
这样大家都修改同一个类成员变量,就会有线程不安全的隐患
Struts2的模式
每来一个请求实例化一个Action对象,请求结束销毁
这样各自操作各自的,没有线程安全问题
Struts MVC
详情请看:这里
三、接收参数
方法一:属性驱动获得参数
注:要有get,set方法
方法二:对象驱动
public class Demo9Action extends ActionSupport {
//准备user对象
private User user;
public String execute() throws Exception {
System.out.println(user);
return SUCCESS;
}
public User getUser() { // 前两种方式都需要提供get,set方法
return user;
}
public void setUser(User user) {
this.user = user;
}
}
方法三:模型驱动
public class Demo10Action extends ActionSupport implements ModelDriven {// 实现接口
//准备user 成员变量
private User user =new User();
public String execute() throws Exception {
System.out.println(user);
return SUCCESS;
}
@Override
public User getModel() {
return user;
}
}
其他:获取list,map
list
Map