·解决重复提交的工具——Token令牌<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
三个关键操作:
1.saveToken(Request):在第一次提交时,在网页中,设置一个令牌
2.this.resetToken(request) :在提交处理完成后,将重置网页中的令牌,使其失效
3.this.isTokenValid(request):在提交后,判断网页中的令牌是否有效
·上传文件
Struts中提供了一个SmartUpload组件,可以实现上传文件:
1.在表单中添加一个文件选择框,<html:file propertity="pic"></html:file>
2.在ActionForm中可以通过一个org.apache.struts.upload.FormFile类型去接受这个文件
3.如果要使用用户自定的文件名来命名文件,则可以先提取出文件后缀,然后重新定义文件存储的绝对路径,绝对路径的获取方法是:String uploadPath = this.getServlet().getServletContext().getRealPath("/")+目标文件夹名+文件名
4.用户必须自己写IO流来实现文件在网络上的传输
- publicclassUploadActionextendsAction{
- publicActionForwardexecute(ActionMappingmapping,ActionFormform,
- HttpServletRequestrequest,HttpServletResponseresponse){
- UploadFormuploadForm=(UploadForm)form;//TODOAuto-generatedmethodstub
- //在编写IO流的时候必须有一个明确的绝对路径
- //可是对于WEB程序而言,绝对路径不是固定的
- StringuploadPath=this.getServlet().getServletContext().getRealPath("/")+"upload\\"+uploadForm.getName()+"."+(uploadForm.getPic().getFileName().split("\\.")[1]);
- System.out.println("**"+uploadPath);
- try{
- OutputStreamout=newFileOutputStream(newFile(uploadPath));
- FormFileff=uploadForm.getPic();
- byteb[]=ff.getFileData();
- out.write(b);
- out.close();
- }catch(FileNotFoundExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }catch(IOExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- returnnull;
- }
- }