Struts2之注解
- 1、引入依赖
- 2、注解结构
- 3、注解的使用
1、引入依赖
Struts2中可以使用注解来代表struts.xml中的某些配置,可以简化配置。要使用注解,必须引入额外的依赖,如下:
<!-- struts2注解依赖 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.5.22</version>
</dependency>
2、注解结构
引入依赖后,可以看struts2-convention-plugin的jar包,anotation包如下:
这里面是注解的结构,也是用到的所有注解。常用的几个注解@Action、@InterceptorRef、@Namespace、@ParentPackage、@Result注解等。
- @Action来代替
<action>
元素。 - @InterceptorRef用于配置拦截器。
- @Namespace代替
<package>
标签里的namespace属性。 - @ParentPackage代替
<package>
的extends属性。 - @Result来代替
<result>
元素。
3、注解的使用
特别注意,当使用struts2的注解时,Action类所在的包必须是action,actions,struts,struts2命名,否则将无法识别。在struts-plugin.xml中相关配置如下:
不使用注解时,struts.xml中的配置如下:
<package name="download" extends="default">
<action name="download" class="com.ycz.struts01.action.DownloadAction" method="download">
<result name="success" type="stream">
<!-- 设置下载类型 -->
<param name="contentType">application/octet-stream</param>
<!-- 设置流属性 -->
<param name="inputName">inputStream</param>
<!-- 设置以附件的形式下载 -->
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<!-- 设置缓冲区大小 -->
<param name="bufferSize">4096</param>
</result>
</action>
</package>
现在删除这些配置,使用注解来代替:
@ParentPackage("default")
@Namespace("/")
public class DownloadAction extends ActionSupport {
private static final long serialVersionUID = 1L;
// 输入流,读取文件
private InputStream inputStream;
// 文件名称
private String fileName;
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
@Action(value = "download",results = {
@Result(name = SUCCESS,type="stream",params = {
"contentType","application/octet-stream",
"inputName","inputStream",
"contentDisposition","attachment;filename=${fileName}",
"bufferSize","4096"
})
})
public String download() throws IOException {
try {
String path = "E:/upload/" + fileName;
// 设置中文编码
fileName = URLEncoder.encode(fileName, "UTF-8");
// 初始化流
inputStream = new BufferedInputStream(new FileInputStream(path));
} catch (Exception e) {
e.printStackTrace();
}
return SUCCESS;
}
}