记得书上和老师都说了,struts2的action的方法有几个规则:
第一:不能接受参数
第二:返回值类型只能是String或者无返回值类型(void)
我一直牢牢记着,有次面试人家问我有几种返回值类型,我就说一种String.然后面试官没再说话,当时就觉得没对劲!
今天做struts2的文件下载,看了下,action里面的方法不是还能返回InputStream的么:
于是我就怀疑了是否还能返回其他类型的,是否能携带参数。于是我做了个实验:
struts2文件下载:
public InputStream getDocumentInputStrame() throws FileNotFoundException{
String downFilePathServletActionContext.getServletContext()
.getRealPath("/");//文件路径
downloadFileName=tenderfile.getFilename();//文件名称
downloadFileName=this.getFileEcodingName(downloadFileName);//调用action的方法传入参数,对文件名称进行编码解码。
StringBuffer sb=new StringBuffer();
sb.append(downFilePath).append(downloadFileName);
File file=new File(sb.toString());
InputStream in=new FileInputStream(file);
return in;//返回输入流
}
这里就是struts2文件下载的代码.下面是上面调用的getFileEcodingName()方法:
public String getFileEcodingName(String downloadFileName) {
try {
downloadFileName=new String(downloadFileName.getBytes(),"ISO-8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} return downloadFileName;
}
我的action extends ActionSupport。
我运行了测试了,没有任何问题,方法也调用了编码也对了。
如果这样的话,岂不是和老师讲的违背了??
请大神指点下这到底是为什么
Struts Java 类 面试 String
------解决方案--------------------
老师说的是execute方法的返回值只能为String吧。
------解决方案--------------------
execute 方法返回String ,根据返回最后跳转,当然 strtus2 可以添加自己的方法/
------解决方案--------------------
面试官问你的应该是result的类型吧
struts2常用返回值类型说明
chain 用户Action链式处理
dispatcher 用来整合JSP 是result元素type的默认值
freemarker 用来整合FreeMarker
httpheader 用来处理特殊的HTTP行为
redirect 用来重定向到其他的文件