Struts2之注解

文章介绍了如何在Struts2中使用注解进行简化配置,包括引入struts2-convention-plugin依赖,常用注解如@Action、@InterceptorRef、@Namespace、@ParentPackage和@Result的用途,以及如何通过注解实现下载功能的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
	}

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值