无线&移动互联网技术研发

换位思考·····
posts - 19, comments - 53, trackbacks - 0, articles - 283
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Struts2 要点笔记(四)

Posted on 2010-05-17 00:14 Gavin.lee 阅读(240) 评论(0)  编辑  收藏 所属分类: SSH2 --Struts2
十九、文件上传三部曲

第一步、jar文件的准备

commons-fileupload-1.2.1.jarcommons-io-1.3.2.jar

第二步、把form表的enctype设置为:multipart/form-data

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

 
<head>

    
<title>My JSP 'employeeAdd.jsp' starting page</title>

    
<meta http-equiv="pragma" content="no-cache">

    
<meta http-equiv="cache-control" content="no-cache">

    
<meta http-equiv="expires" content="0">

 
</head>

 
<body>

    
<form action="${pageContext.request.contextPath}/control/employee/list_execute.action" enctype="multipart/form-data" method="post">

        文件:
<input type="file" name="image">

        
<input type="submit" value="上传"/>

    
</form>

 
</body>

</html>


第三步、在
Action类中添加以下属性

注意:

可以设置Struts2的常量struts.multipart.maxSize来设置上传文件大小

可以得到上传文件类型

web上传文件大小注意不要太大,一般的视频网站上传大文件是通过通讯软件上传的,即socket通讯

多文件上传:

package cn.itcast.action;

import java.io.File;

import org.apache.commons.io.FileUtils;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;

public class HelloWorldAction {

    
private File[] image;

    
private String[] imageFileName;

    
public File[] getImage() {

       
return image;

    }


    
public void setImage(File[] image) {

       
this.image = image;

    }


    
public String[] getImageFileName() {

       
return imageFileName;

    }


    
public void setImageFileName(String[] imageFileName) {

       
this.imageFileName = imageFileName;

    }


    
public String addUI(){

       
return "success";

    }


    
public String execute() throws Exception{

       String realpath 
= ServletActionContext.getServletContext().getRealPath("/images");

       System.out.println(realpath);

       
if(image!=null){

           File savedir 
= new File(realpath);

           
if(!savedir.exists()) savedir.mkdirs();

           
for(int i = 0 ; i<image.length ; i++){           

              File savefile 
= new File(savedir, imageFileName[i]);

              FileUtils.copyFile(image[i], savefile);

           }


           ActionContext.getContext().put(
"message""上传成功");

       }


       
return "success";

    }


}




二十、自定义拦截器

注意:

1.自定义拦截器的部署时候需要定义拦截器栈,在该栈中需要引入系统默认的拦截器,如果直接应用则会导致系统所有的拦截器对该action都会失效

2.所以要注意拦截器的应用范围:action/package

3.每个包只能指定一个默认的拦截器

<default-interceptor-ref name=”permissionStack” />

4.一个action可以定义多个拦截器

<interceptor-ref name=”interceptor1” />

<interceptor-ref name=”interceptor2” />

拦截器:

package cn.itcast.interceptor;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class PermissionInterceptor implements Interceptor {

    
public void destroy() {

    }


    
public void init() {

    }


    
public String intercept(ActionInvocation invocation) throws Exception {

  Object user 
= ActionContext.getContext().getSession().get("user");

  
if(user!=nullreturn invocation.invoke();  
  
//如果user不为null,代表用户已经登录,允许执行action中的方法

  ActionContext.getContext().put(
"message""你没有权限执行该操作");

  
return "success";
    }

}


部署:

<package name="employee" namespace="/control/employee" extends="struts-default">

       
<interceptors>

           
<interceptor name="permission" class="cn.itcast.interceptor.PermissionInterceptor"/>

           
<interceptor-stack name="permissionStack">

              
<interceptor-ref name="defaultStack"/>

              
<interceptor-ref name="permission" />

           
</interceptor-stack>

       
</interceptors>

       
<global-results>

           
<result name="success">/WEB-INF/page/message.jsp</result>

       
</global-results>

       
<action name="list_*" class="cn.itcast.action.HelloWorldAction" method="{1}">

           
<interceptor-ref name="permissionStack" />

       
</action>

    
</package>

 


只有注册用户登录后才能发表评论。


网站导航: