近日学习struts2,其中action的映射方式有好几种,例子整理如下:
1.单个动作对应单个action
action中只有一个方法,没有添加任何逻辑,代码:
import com.opensymphony.xwork2.ActionSupport;
public class SampleAction extends ActionSupport {
public String sayHello() throws Exception{
return ActionSupport.SUCCESS;
}
}
struts配置文件部分:
<action name="sayHello" class="SampleAction" method="sayHello"> <result>sample.jsp</result> </action>
jsp文件代码很简单,只输出两个单词:
<html>
<head>
</head>
<body>
<div>
Hello,world.
</div>
</body>
</html>
可以这个地址访问:http://server:port/appname/sayHello.action
2.单个action类对应单个action配置,动态方法调用方式
这种方式只有配置文件与第一种不同,action类和jsp文件不变,下面是配置文件部分:
<action name="sampleAction" class="SampleAction"> <result>sample.jsp</result> </action>
访问地址如下格式:http://server:port/appname/sampleAction!sayHello.action
3.通配符映射方式
同样,action类和jsp文件不变,配置文件部分如下:
<action name="*_*" class="{1}" method="{2}"> <result>sample.jsp</result> </action>
用地址:http://server:port/appname/SampleAction_sayHello.action访问,类名取自action名字的第一部分,
方法名取自action名字的第二部分,即后一个*号的字符;大型企业应用,可以用这种方式,会节省配置时间,减少配置文件。
4.使用注解,达到零配置效果
这种方式通过注解把配置信息写在action类里,省却了配置文件,但是也增加了硬编码;这种方式除了在action类里编写注解信息外,在web.xml文件里也要添加一个参数,修改部分如下:
<filter> <filter-name>Struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> <init-param> <param-name>actionPackages</param-name> <param-value>annotation</param-value> </init-param> </filter>
增加了名字为actionPackages的初始参数,其值为注解action的包名,多个以逗号隔开。
添加注解的action:
package annotation;
import org.apache.struts2.config.Result;
import org.apache.struts2.config.Results;
import org.apache.struts2.dispatcher.ServletDispatcherResult;
import com.opensymphony.xwork2.ActionSupport;
@Results({
@Result(name="success",value="/annotation.jsp",type=ServletDispatcherResult.class)
})
public class AnnotationAction extends ActionSupport {
public String execute()throws Exception{
return ActionSupport.SUCCESS;
}
}
jsp文件同样只输出了两个单词:
<html>
<head>
</head>
<body>
<div>
Hello,annotation.
</div>
</body>
</html>
struts翻译action,把类名的第一个字母小写,去掉后面的action,生成的访问地址如下:
http://server:port/appname/annotation.action
以上就是action映射的几个例子,最近正好有时间,就整理了一下。