Java开发交流群 677807540 大家可以一起讨论技术欢迎加入
关于文件上传一些注意的地方:
普通表单:
客户端:普通表单 ---->key=value的形式
服务器: 接收请求 打包成request-->servlet
我们在Servlet 使用request获得参数
文件上传
客户端: 通过 请求头的分隔符 将表单数据分割开以字节流的方式发送到服务器
服务器:接收请求,不解析参数 request-->Servlet
我们在Servlet中:使用第三方组件解析请求,从第三方组件那种获得文件信息和普通
表单信息
Struts中:
文件上传
客户端: 通过 请求头的分隔符 将表单数据分割开以字节流的方式发送到服务器
服务器:接收请求,不解析参数 request-->Servlet
Struts 使用第三方组件(commons-fileupload)解析请求,从第三方组件那种获得文件信息和普通
表单信息
Struts中的文件上传拦截器 负责将文件信息从第三方组件中获得
【在servlet中,这一步是我们手动实现的】
然后,给Action中的对应的属性赋值
我们:就像使用普通组件参数使用文件参数
=================================================
Struts中的一些配置文件:
struts-default.xml:是struts提供的默认的配置文件,其中包含了
默认包:struts-default 、定义了默认的 result{dispatcher\redirect\redirectAction\Chain}
和拦截器 以及拦截器栈
constant
org.apache.struts2子包中---》default.properties:
该配置了一些struts2的默认行为,如 文件上传的大小、struts拦截的后缀
该文件中的内容都可以通过struts.xml中<constant>元素进行修改
struts-message-en_US.properties:
i18n:internationalization国际化的资源文件
etoak_zh_CN.properties
etoak_zh.properties
etoak.properties
和package标签并列
可以查看 struts-properties 和 国际编码哪些(设置显示错误信息的提示语言)
一些修改 文件大小文件后缀 文件错误页面时显示的字体 通可以通过 constant 修改(name="key" value="")
和result 并列的 可以设置上传文件的后缀名
可以查找 struts-default
<interceptor-ref name="">
<param name="aloowedExtensions">.jpg,.png</param>
</interceptor-ref>
<result name="input"> error.jsp</result> 在页面上利用s标签显示错误信息
上传文件必须用的三要素
pic要对应页面上的name
private File[] pic;//文件对象(这是上传很多文件 单个不用写数组 )
private String[] picFileName;//文件名字
private String[] picContentType;//文件类型
文件下载有俩种方式我们只是借用下 action容器拿到文件 设置相应头(setHeader("Content-Disposition","attachment;filename=1.mp4");)直接以流的形式下载 附件形式返回客户端
中文文件名设置编码 URLEncoder.encode("内容","utf-8")+"ab.mp4"
第二种交给struts 我们只需要提供流给他
这里我们需要那到ServletContext对象的aplication 拿到服务器的绝对路径
利用俩种方式引入ServletAPI
我们在struts<result >
定义俩个属性 一个is 一个fname 只提供getter方法就可以
<param name="inputName">is</param>
<param name="contentDisposition">attachment;filename=${fname}</param>
</result?
使用struts 将json封装在插件中;
1.导入插件包 2继承json-default(继承了 struts-default) result type为json
默认返回所有带有getter方法的属性 可以设置指定那个返回属性 不返回其他
<result>
<param name="root">指定返回属性</param>
</result>
也是有俩种一格式直接获得response往回写 另一种是struts帮你写 你只要提供getter方法