·解决重复提交的工具——Token令牌
三个关键操作:
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流来实现文件在网络上的传输
- public class UploadAction extends Action {
- public ActionForward execute(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response) {
- UploadForm uploadForm = (UploadForm) form;// TODO Auto-generated method stub
- // 在编写IO流的时候必须有一个明确的绝对路径
- // 可是对于WEB程序而言,绝对路径不是固定的
- String uploadPath = this.getServlet().getServletContext().getRealPath("/")+"upload//"+uploadForm.getName()+"."+(uploadForm.getPic().getFileName().split("//.")[1]) ;
- System.out.println("** "+uploadPath) ;
- try {
- OutputStream out = new FileOutputStream(new File(uploadPath)) ;
- FormFile ff = uploadForm.getPic() ;
- byte b[] = ff.getFileData() ;
- out.write(b) ;
- out.close() ;
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return null;
- }
- }