关于我们
About Us
网站建设
Site Design
售后服务
Call Center
经典案例
Projects
技术资料
Source
公司产品
Products
留言板
FeedBack
网站维护
Maintenance
 
 首页>> 技术资料>>JSP  
Structs2 Action使用

Action中获取HttpServletResponse ,HttpServletRequest,HttpSession等Servlet相关变量有两种方式;
1、非Ioc方式
       

要获得上述对象,关键Struts 2.0中com.opensymphony.xwork2.ActionContext类。我们可以通过它的静态方法getContext()获取当前Action的上下文对象。 另外,org.apache.struts2.ServletActionContext作为辅助类(Helper Class),可以帮助您快捷地获得这几个对象。

HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
HttpSession session = request.getSession();


2、Ioc 方式
       只要Action类实现SessionAware, ServletRequestAware, ServletResponseAware这几个接口,相应的变量会自动注入

调用action的方法
我们知道,当客户端请求一个action时,会生成一个Action 对应的变量,并执行execute方法,但这是需要跟据配置来确定的
    < action name ="HelloWorld" class ="tutorial.HelloWorld" > 
        
< result > /HelloWorld.jsp </ result > 
    
</ action > 
要想改变默认执行的方法,需要在action节点加上要调用的方法名,如:
<action name="AliasHelloWorld" class="tutorial.HelloWorld" method="aliasAction">
   
<result>/HelloWorld.jsp</result>
</action>

如果要实现类似于Structs1.x那样的DispatchAction方式的调用,配置例子如下:
        <action name="login!*" method="{1}" class="one.LoginAction">
            
<result name="success" type="dispatcher">
                
<param name="location">/main.jsp</param>
            
</result>
            
<result name="input">/login.jsp</result>
            
<result name="loginfail" type="dispatcher">
                
<param name="location">/login.jsp</param>
            
</result>
        
</action>
如上配置,如果只调用login.action,会执行默认方法execute()。

Structs 2文件上传例子
package one;

import java.io.File;
import java.text.*;
import java.util.*;

import javax.servlet.ServletContext;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.util.ServletContextAware;

import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport implements ServletContextAware{


    
private File doc;    

    
private String docContentType;
    
private String docFileName;
    
    
private ServletContext context;  
    
    
    
public String execute()throws Exception{
        String target
=context.getRealPath("/upload");
        String file
=generateFileName(docFileName);
        File dfile
=new File(target,file);
        FileUtils.copyFile(doc,dfile);
        
return this.SUCCESS;
    }
    
    
private String generateFileName(String fileName) {
        DateFormat format 
= new SimpleDateFormat("yyMMddHHmmss");    
        String formatDate 
= format.format(new Date());    
        
int random = new Random().nextInt(10000);    
        
int position = fileName.lastIndexOf(".");    
        String extension 
= fileName.substring(position);    
        
return formatDate + random + extension;    
    }
    
    
public void setServletContext(ServletContext context) {
        
// TODO Auto-generated method stub
        this.context=context;
    }


    
public ServletContext getContext() {
        
return context;
    }


    
public void setContext(ServletContext context) {
        
this.context = context;
    }


    
public File getDoc() {
        
return doc;
    }


    
public void setDoc(File doc) {
        
this.doc = doc;
    }




    
public String getDocContentType() {
        
return docContentType;
    }

    
public void setDocContentType(String docContentType) {
        
this.docContentType = docContentType;
    }

    
public String getDocFileName() {
        
return docFileName;
    }

    
public void setDocFileName(String docFileName) {
        
this.docFileName = docFileName;
    }
    
    
    
    
}

 
 
北京四方互动网络技术有限公司
© 版权所有 2001-2005
地址:北京市海淀区知春路豪景佳苑3号楼401室
邮编:100086 公司地图
业务专线:010-62568654 62106102
传  真:010-82611617
公司总机:62106100/1/2/3
售后服务:分机808、881、812