【SSH】——Struts2中的动态方法调用(一)
最后更新于:2022-04-01 11:27:24
首先我们来看一个简单的调用:
1、在web.xml中配置拦截器StrutsPrepareAndExecuteFilter。StrutsPrepareAndExecuteFilter实现了filter接口,在执行action之前,利用filter做一些操作。
~~~
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
~~~
2、提供Struts2的配置文件struts.xml
~~~
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="Struts2_006" extends="struts-default" >
<action name="user" class="com.struts2.UserAction">
<result>/add_success.jsp</result>
</action>
</package>
</struts>
~~~
注:<result>标签的默认值是success,此处省略。
3、页面显示部分。
index.jsp页面,转向到action中,调用action中的方法。
~~~
<body>
<a href="user.action">调用</a>
</body>
~~~
调用完后,跳转到成功页面,并显示message中的消息。
~~~
<body>
我的操作:${message} <br>
</body>
~~~
4、编写Action类 UserAction。
~~~
public class UserAction extends ActionSupport{
//消息字符串,用来显示调用结果
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
/***
* execute方法
*/
public String execute() throws Exception{
message="执行execute方法";
return SUCCESS;
}
}
~~~
注意:这里我们让UserAction继承自ActionSupport类,从源码中可以看到ActionSupport类实现了Action接口。在ActionSupport类中也处理了execute()方法,但他并没有做什么操作,只是返回SUCCESS。因而,如果我们在UserAction中不写execute方法,也不会报错。
~~~
public class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable {
protected static Logger LOG = LoggerFactory.getLogger(ActionSupport.class);
private final ValidationAwareSupport validationAware = new ValidationAwareSupport();
private transient TextProvider textProvider;
private Container container;
/**
* A default implementation that does nothing an returns "success".
* <p/>
* Subclasses should override this method to provide their business logic.
* <p/>
* See also {@link com.opensymphony.xwork2.Action#execute()}.
*
* @return returns {@link #SUCCESS}
* @throws Exception can be thrown by subclasses.
*/
public String execute() throws Exception {
return SUCCESS;
}
}
~~~
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-27_57206b05d69cc.jpg)
如果在UserAction中不写execute方法,message中没有值。
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-27_57206b05ed992.jpg)
这篇博客介绍了Struts2的简单的方法调用,下篇博客将继续介绍,当action中有多个方法时,应该如何实现调用。