struts.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true"/>
<package name="lee" extends="struts-default">
<action name="downPro" class="com.zjlolife.downAction.DownLoadAction">
<!-- <param name="inputPath">\images\疯狂联盟.jpg</param> 通过页面传入值 -->
<result name="success" type="stream">
<param name="contentType">image/jpg</param>
<param name="inputName">targetFile</param>
<param name="contentDisposition">attachment;filename="wjc_logo.jpg"</param>
<param name="bufferSize">4096</param>
</result>
<result name="login">/WEB-INF/content/login.jsp</result>
</action>
<action name="loginPro">
<result name="success">/WEB-INF/content/download.jsp</result>
<result name="login">/WEB-INF/content/login.jsp</result>
</action>
<action name="*">
<result>/WEB-INF/content/{1}.jsp</result>
</action>
</package>
</struts>
LoginAction..java:
package com.zjlolife.downAction;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.zjlolife.domain.User;
public class LoginAction {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute() {
if(checkLogin(user)) {
return "success";
}
return "login";
}
public boolean checkLogin(User user) {
if(user.getName().equals("zjlolife")&&user.getPassword().equals("519760")) {
ServletActionContext.getRequest().getSession().setAttribute("loginUser", user);
return true;
}
return false;
}
}
DownLoadAction.java:
package com.zjlolife.downAction;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
public class DownLoadAction {
private String inputPath;
public String getInputPath() throws UnsupportedEncodingException {
return new String(inputPath.getBytes("iso-8859-1"),"UTF-8");
}
public void setInputPath(String inputPath) {
this.inputPath = inputPath;
}
public InputStream getTargetFile() throws UnsupportedEncodingException {
System.out.println("\\images\\"+getInputPath()+getInputPath());
return ServletActionContext.getServletContext().getResourceAsStream("\\images\\"+getInputPath());
}
public String execute() {
System.out.println("执行execute");
//因为先执行execute()方法因此可以通过检查用户是否登录来设置下载权限
if(ActionContext.getContext().get("loginUser")==null) {
return "login";
}
return "success";
}
}
1,以上代码,还处理了中文乱码问题,以及没登录用户无法下载的权限。
2,先调用excecute,再返回下载流。原理见上一篇。。。
3,关于乱码,struts中的默认配置文件default.propertites中有配置i18n为utf-8,仅仅可解决post提交可防止乱码,但是get提交就没有作用了,因为get提交相当于在浏览器地址栏中敲入参数,该字符集编码跟用户当前的系统环境有关,因此通过request来对该get参数进行utf-8编码就会乱码了!!!