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; } }
|