1.数据验证由于web应用是基于request/response架构的,无论是哪种MVCweb框架,都需要在web.xml中配置框架的核心Servlet或者Filter,以便框架介入网络应用程序。数据校验可以分为客户端校验和服务端校验两种。而且,客户端验证和服务端验证都是必不可少的,两者分别完成不同的过滤。客户端验证做的是基础验证,比如检查非空字段是否为空,数字格式是否正确等。客户端验证主要用于过滤用户误操作。客户端校验的作用是过滤拒绝正常的用户误操作输入,提交给服务端处理,减轻服务端的负担。服务器端验证也是必不可少的,它是整个应用防止非法数据的最后一道防线。服务器端校验防止非法数据进入程序,导致程序异常和底层数据库异常。服务器端验证是保证程序有效运行和数据完整性的一种手段。客户端验证的主要作用是防止普通观众输入错误,只能对输入进行过滤;对于恶意用户的恶意行为,客户端验证将无能为力。因此,客户端验证永远不应取代服务器端验证。当然,客户端验证也是必不可少的,因为Web应用的浏览器大多是正常的浏览器,它们的输入可能包含大量的错误输入。客户端验证可以防止这些来自客户端的错误输入,从而减少服务器负载。2.文件上传文件上传在项目中经常用到。下面说一下struts2中如何上传文件:导入对应的jar包(commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar)设置form的enctype为multipart/form-data,如如下:upload/upload.action"method="post"name="form"enctype="multipart/form-data">文件1:
actionpublicclassHelloWorldAction{privateFileupload;//获取上传的文件privateStringuploadContentType;//获取上传文件的扩展名privateStringuploadFileName;//获取上传文件的名称publicFilegetUpload(){returnupload;}publicvoidsetUpload(文件上传){这个.upload=上传;}publicStringgetUploadContentType(){返回uploadContentType;}publicvoidsetUploadContentType(StringuploadContentType){this.uploadContentType=uploadContentType;}publicStringgetUploadFileName(){返回上传文件名;}publicvoidsetUploadFileName(StringuploadFileName){this.uploadFileName=uploadFileName;}publicStringupload()throwsIOException{Stringrealpath=Ser.getServletContext().getRealPath("/upload");if(upload!=null){文件savefile=newFile(realpath,uploadFileName);if(!savefile.getParentFile().exists()){savefile.getParentFile().mkdirs();}FileUtils.copyFile(上传,保存文件);ActionContext.getContext().put("msg","文件上传成功!");}返回“成功”;}}注意,如果上传过程中的文件大小超过了struts2默认的文件大小,就会上传失败。这时候可以根据具体情况设置struts.multipar。t.maxSize的值满足上传要求3.多文件上传在实际项目中,有时可能需要上传多个文件。下面我们来谈谈上传多个文件。同上。表单如下所示:upload/upload"method="post"name="form"enctype="multipart/form-data">文件1:
文件2:
文件3:
actionpublicclassHelloWorldAction{privateFile[]upload;//获取上传的文件privateString[]uploadContentType;//获取扩展名上传的文件privateString[]uploadFileName;//获取上传文件的名称publicFile[]getUpload(){returnupload;}publicvoidsetUpload(File[]upload){this.upload=upload;}publicString[]getUploadContentType(){返回uploadContentType;}publicvoidsetUploadContentType(String[]uploadContentType){this.uploadContentType=uploadContentType;}publicString[]getUploadFileName(){返回上传文件名;}publicvoidsetUploadFileName(String[]uploadFileName){this.uploadFileName=uploadFileName;}publicStringupload()抛出IOException{Stringrealpath=ServletActionContext.getServletContext().getRealPath("/upload");if(upload!=null){for(inti=0;i为action指定拦截器,具体方法为:但是这样做之后,就会出现问题。在struts2中为action指定拦截器后,默认的defaultStack中的拦截器将不起作用,也就是说,struts2的很多核心功能都用不上了(struts2的很多核心功能都是通过拦截器实现的),以此来解决这个问题,引入拦截器栈,先使用系统默认拦截器,再使用自定义拦截器,具体方法是:<调停ptor-refname="permission">如果想让包下的所有action都使用自定义的拦截器,可以设置拦截器为默认拦截器,具体实现方法为:注意:每个包中只能有一个默认拦截器;一旦为包中的某个动作指定了拦截器,默认的拦截器将不起作用。欢迎关注我的公众号:敲代码的老贾,回复“领取”送《Java面试》信息,阿里、腾讯、字节、美团、饿了么等大厂