Struts2之注解

news2024/11/15 11:14:19

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

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/190531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

未经风雨,怎见彩虹!回首2022,你好2023,新的一年,点面科技与您一起大展宏“兔”,扬眉“兔”气!

时光飞逝&#xff0c;转眼间2022虎年即将变成昨天的记忆。2022年&#xff0c;对于整个行业而言都是不寻常的一年&#xff0c;我们砥砺艰辛&#xff0c;着实经历着一场“寒冬”。但是&#xff0c;2022年注定也是不平凡的一年&#xff0c;在这个变中有定、变中求新的市场格局下&a…

【Rust】11. 泛型、Trait 和生命周期

11.1 泛型数据类型 11.1.1 函数的泛型 注意&#xff1a;泛型的比较适用于实现了 std::cmp::PartialOrd trait 的数据类型 11.1.2 结构体的泛型 结构体的泛型可以使用多个泛型类型参数 11.1.3 枚举的泛型 类似于结构体&#xff0c;枚举的泛型也可以使用多个泛型类型参数 11.…

Android 动画

在App中合理地使用动画能够获得友好愉悦的用户体验&#xff0c;Android中的动画有View动画、属性动画、帧动画、布局动画、转场动画等&#xff0c;在5.x以后有又新增了矢量动画&#xff0c;这些动画在平常开发中使用较为普遍&#xff0c;所以有必要做一次完整的总结。一、View动…

130道python练习题 完整版PDF

今天跟大家分享一些干货&#xff0c;在学python的朋友可以动起来了&#xff01; python基础知识练习题&#xff0c;常见常用的&#xff0c;可以作为参考&#xff0c;挺不错的&#xff0c;也有许许多多的讲解&#xff0c;适合python巩固基础知识和入门 130道练习题&#xff0c…

电脑网速慢怎么解决?提升网速真的很容易!

我们经常会使用电脑&#xff0c;如果加载网页的时间过长&#xff0c;或者是出现未响应的提示等问题&#xff0c;会非常影响我们使用电脑的观感。 针对这种问题&#xff0c;电脑网速慢怎么解决&#xff1f;来看看下面造成电脑网速慢的主要原因&#xff0c;以及我们该怎么提升电…

Python父类方法重写

在 Python 中&#xff0c;子类继承了父类&#xff0c;那么子类就拥有了父类所有的类属性和类方法。通常情况下&#xff0c;子类会在此基础上&#xff0c;扩展一些新的类属性和类方法。但凡事都有例外&#xff0c;我们可能会遇到这样一种情况&#xff0c;即子类从父类继承得来的…

vue前框框架课程笔记(六)

目录单文件组件.vue文件单文件组件常用结构App.vueStudent.vueSchool.vuemain.jsindex.html运行结果vue脚手架具体步骤项目架构其他配置项props配置项mixin混入插件scoped属性本博客参考尚硅谷官方课程&#xff0c;详细请参考 【尚硅谷bilibili官方】 本博客以vue2作为学习目…

zookeeper源码分享四 ---- RequestProcessor 处理链路

单机zookeeper RequestProcessor 处理链路 将请求放入LinkedBlockingQueue队列中&#xff0c;通过一个队列中。启动一个线程去消费这个队列&#xff0c;避免了阻塞。 zookeeper的处理是实现RequestProcessor接口的processRequest(Request request) 方法。 PrepRequestProcesso…

exsi删除虚拟机提示在当前状况下不允许执行此操作解决方法、vmware删除虚拟机提示在当前状况下不允许执行此操作解决方法

说明 我这exsi版本为5.5 今天在回收虚拟机的时候有些虚拟机无法删除&#xff0c;提示下面内容。 解决方法 方法1 直接给删除失败的虚拟机开机&#xff0c;开机完毕以后再关机就能直接删除了。 方法2 删除失败的虚拟机&#xff0c;也无法开机的情况下&#xff0c;实用该方…

春节档的观影“热”,拯救不了影视圈的“冷”?

配图来自Canva可画 疫情三年&#xff0c;影视业也随着“冬眠”了三年。 先是疫情爆发影响影视业上下游的正常生产&#xff0c;而后国家加速规范影视行业税收秩序&#xff0c;资本相继撤离&#xff0c;再后来影视企业入不敷出业绩巨亏&#xff0c;影视寒冬来临成为行业共识。在…

MMCV - dataset_analysis.py 可视化检测和跟踪任务自定义数据集神器

做视觉检测跟踪任务时,我们需要在论文插图中体现出我们数据集的信息,这个时候就有一个非常好用的神器:dataset_analysis.py的文件。该文件能够帮助用户直接可视化custom数据集的bbox实例信息,如上图所示,包括:显示类别和 bbox 实例个数的分布图;显示类别和 bbox 实例宽/…

中科院和人社部职称评审所需材料内容对比

目录1.前言2.中科院所需材料2.1 基本情况2.2 工作经历2.3 主要专业技术工作业绩2.4 重要著&#xff08;译&#xff09;作、论文及技术工作报告2.5 继 续 教 育 情 况2.6 考试、考核情况2.7 单位推荐意见2.8 材料审核意见2.9 个人技术报告2.10 未来工作展望3.人社部所需材料3.1 …

三十八、Kubernetes1.25中数据存储第二篇

1、概述在前面已经提到&#xff0c;容器的生命周期可能很短&#xff0c;会被频繁地创建和销毁。那么容器在销毁时&#xff0c;保存在容器中的数据也会被清除。这种结果对用户来说&#xff0c;在某些情况下是不乐意看到的。为了持久化保存容器的数据&#xff0c;kubernetes引入了…

行为型模式 - 状态模式State

状态模式的定义与特点 状态&#xff08;State&#xff09;模式的定义&#xff1a;对有状态的对象&#xff0c;把复杂的“判断逻辑”提取到不同的状态对象中&#xff0c;允许状态对象在其内部状态发生改变时改变其行为。 状态模式是一种对象行为型模式&#xff0c;其主要优点…

Oracle用户权限管理

一、运行企业管理器 管理员身份运行客户端的企业管理器 首次打开需要添加数据库信息&#xff0c;这里使用已经存在的数据库orcl 使用系统用户登录 用户名&#xff1a;system&#xff0c;口令orcl 或者不输入使用SYSDBA登录 可以查看所有用户的详细信息: 用户名, 账户状态,…

union和union all 的区别

1&#xff1a;union用于合并两个或多个select 语句的结果集。 注意&#xff1a; 1&#xff1a;union内部的select 语句必需拥有相同数量的列&#xff0c;列也夜必须拥有相似的数据类型&#xff0c;同时每条select 语句中的列的顺序必须相同。 2&#xff1a;union结果集中的列…

JVM垃圾回收与性能调优策略

一、JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范&#xff0c;JVM将内存划分为&#xff1a; New&#xff08;年轻代&#xff09; Tenured&#xff08;年老代&#xff09; 永久代&#xff08;Perm&#xff09; 其中New和Tenured属于堆内存&#xff0c;堆内存会从JVM启动参…

项目代码版本控制与保护

一、版本命名规则 1.1 需求开发分支命名规则 格式&#xff1a;dev_v版本号_需求名称 案例&#xff1a;dev_v01.31_TX202301141 dev_v01.31_数字产品平台订单查询优化 1.2 测试环境发布分支命名规则 格式&#xff1a;uat_deploy 1.3 预上环境分支命名规则 格式&#xff1a…

Apsara Clouder云计算专项技能认证:云服务器ECS入门

文章目录 一、什么是云服务器ECS二、如何获取一台云服务器ECS三、5分钟学会管理云服务器ECS四、【实验】ECS云服务器新手上路五、【实验】基于ECS搭建云上博客入口: https://edu.aliyun.com/certification/cldc15 一、什么是云服务器ECS