struts2学习笔记3

验证Action的指定方法,只需将重写的validate方法名改为“validate+要验证的方法名”即可!注意方法名的首字母都得大写。

基于配置文件的表单的验证,可以减少java代码的编写,如果要验证的Action是“LoginAction”,那么配置文件需命名为“LoginAction-validation.xml”
需要根据work-validator-1.0来写,注意action同样需要继承actionsupport,基于xml的指定方法的验证,将配置文件名改为”ActionClassName-ActionMethodName-validation.xml“即可。


Struts2中采用令牌机制来解决表单重复提交问题,产生一个随机字符串,在服务端和客户端同时保留此字符串的副本,在客户端向服务端发送请求的时候,会自动发送此副本,服务端接受到请求之后,判断本地上的令牌是否与提交上来的令牌保持一致,若一致则执行提交到数据库等业务逻辑操作。完成之后服务器端会生成新的令牌副本,而客户端没有变,此时,如果客户端再提交,那么服务端与客户端的令牌就不一致了,判定为重复提交。

1.直接在重复提交的页面添加<s:token>标签,并在struts.xml中添加拦截器栈,子节点加入  name=“token”的拦截器 
在上传文件时,若只是单纯的上传文件或多个文件(使用FIile数组即可),直接在execute()方法中,利用FileUtils.copyFile方法(第一个参数是你POJO定义的file对象,例如photo。第二个参数是你上传文件的存放路径,可以存放到当前工程中,利用ServletActionContext.getContext.getRealpath(‘/upload’)+你的文件名,其中upload为你的上传的文件存放的文件夹,或者直接写上你要存放的路径全称例如D://+你的文件名)
public String editUser() throws IOException {
        System. out.println( this. photoFileName) ;
        System. out.println( this. photoContentType) ;
        String filename = ServletActionContext. getServletContext().getRealPath( "/upload/" + photoFileName) ;
        File destFile = new File(filename) ;
        FileUtils. copyFile( photo , destFile) ; //struts2是将上传的文件先存储为临时文件

    return "success" ;
}
<constant name ="struts.devMode" value ="true" />
<constant name ="struts.custom.i18n.resources" value ="msg" />
<constant name ="struts.multipart.maxSize" value ="5242880" />
2.在对文件进行限制时,例如对文件名,文件大小和文件类型限制时。
(1)文件名可以直接在方法中手动操作,或者给定UUID.randomUUID.toString()来给每个文件一个不重复的id
(2)如果要限制文件的格式,可以配置fileupload拦截器,通常情况下可以将默认文件大小限制改大一点,默认为2M。
<action name ="editUser" class ="action.UserAction" method ="editUser" >
    <result name ="success" >load.jsp </result>
    <result name ="input" >index.jsp </result>
    <interceptor-ref name ="fileUpload" >
        <param name ="allowedTypes" >
            image/jpeg/png
        </param>
        <param name ="maximumSize" >
            2097152
        </param>
    </interceptor-ref>
    <interceptor-ref name ="defaultStack" />
</action>
3.下载文件时,需要在action类中创建输出流,并在配置文件中,将result 的type类型改为stram类型,默认为转发,并在子节点中配置参数,param=“inputName” 和param=“ contentDisposition” attachment;filename=${filename}
public String execute(){
//读取文件到输出流
    filename = "1.png" ;
    input = ServletActionContext. getServletContext().getResourceAsStream( "/upload/"+ filename) ;
return "success" ;
}
<action name ="download" class ="action.DownLoadAction" >
     <result name ="success" type ="stream" >
         <param name ="inputName" >input </param>
         <param name ="contentDisposition" >attachment;filename=${filename} </param>
     </result>

</action>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值