struts2 流文件 上载 用迅雷时 文件后缀 action
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>