struts2 流文件 下载 用迅雷时 文件后缀 action

 用struts2 写 流文件 下载,比如导出excle文件,用windows 的文件另存为,没有问题。但是用迅雷下载时,下载下来的文件的后缀为.action。

 

解决:思路,迅雷下载时取得的是请求的action的名称。可以将请求的action的后缀改成你要下载的流文件的后缀。(比如,excle 的后缀为xls)。

 

struts2拦截的请求的后缀名称是可以设置的。这个设置可以在自定义的strtus.properties或struts.xm中定义。

下面是struts.xml中的定义:

<!-- 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。
		如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 -->
	<constant name="struts.action.extension" value="action,htm,xls" />

 这样设置之后,则后缀为.xls的请求,就会被struts2的拦截器所拦截,当成一个action去处理。迅雷下载时取得这个请求的url。就完成了要下载的流文件的后缀的问题。


补充一点:在实际开发中。配置在web.xml文件中的struts2的过滤器,一般不会去过滤所有的请求。会准确的配置出要过滤的请求。可以这样配置。

<!-- 定义Struts2的FilterDispatcher的Filter -->
	<filter>
		<!-- 定义核心Filter的名字 -->
		<filter-name>struts2</filter-name>
		<!-- 定义核心Filter的实现类 -->
		<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
	</filter>
	<!-- FilterDispatcher用来初始化Struts2 并且处理所用的web请求 -->
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>*.action</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>*.jsp</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>*.xls</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/struts/*</url-pattern>
	</filter-mapping>
 

你可能感兴趣的:(jsp,Web,xml,windows,struts)