1、动作类的编写
方式一:动作类就是一个POJO(Plain Old Java Object)
特点:不继承任何的类或接口,不依赖其他的东西。
public class HelloAction{
//动作方法:
//特点:public,返回String;没有参数
public String execute(){
System.out.println("动作方法execute执行了");
return "success";
}
}
方式二:动作类实现
public class Demo1Action implements Action {
public String execute() throws Exception {
/*可以使用接口中定义的常量
* SUCCESS:一切OK
* NONE:不返回任何的结果视图。等同null
* ERROR:出错了
* INPUT:数据回显
* LOGIN:要求登陆
*/
return ERROR;
}
}
方式三:动作类一般选择继承com.opensymphony.xwork2.ActionSupport
public class Demo2Action extends ActionSupport {
public String add() {
System.out.println("add执行了");
return SUCCESS;
}
}
优势:可以使用Action接口中的常量;提供用户输入验证功能;消息提示的国际化功能等。
二、动作类的动作方法调用
2.1 动作方法编写特点:
public
返回String类型数据
没有参数
一般都是实例的
2.2 如何调用动作方法
方式一:在struts.xml配置文件中通过method来指定。默认值是execute
方式二:使用通配符 *
三、在动作类中使用Servlet的API
方式一:使用ServletActionContext。在任何地方都可以获取到
public class UserAction extends ActionSupport {
public String login(){
//向HttpSession中存放标记
// PageContext pc = ServletActionContext.getPageContext();
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
HttpServletResponse response = ServletActionContext.getResponse();
ServletContext sc = ServletActionContext.getServletContext();
System.out.println(request);
System.out.println(session);
System.out.println(response);
System.out.println(sc);
return SUCCESS;
}
}
方式二:实现Servlet[Request]Aware接口
public class Demo3Action extends ActionSupport implements ServletRequestAware,ServletContextAware {
private HttpServletRequest request;
private ServletContext servletContext;
public String execute() throws Exception {
System.out.println(request);
System.out.println(servletContext);
return SUCCESS;
}
//实现接口中的方法。框架会在执行动作方法前,先调用该方法,把你想要的request对象注入进来
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}
实现原理:Struts2的拦截器。servletConfig做的。