struts2实现下载+登录权限验证以及中文处理乱码问题

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编码就会乱码了!!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值