我试过给已登陆的会员创建一个session,然后在下载的那个页面提取出session的值,String user=(String)session.getValue( "cookie ");然后通过给负责下载的servlet两个参数,一个就是下载的文件名,另一个是用户名. <a href=down?fileName=miss.mp3&user= <%=user%> > .如果用户名为空,则不能下载.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException
{
String fileName = request.getParameter( "fileName ");
String user=request.getParameter( "user ");
if(user!= null && !user.equals( " "))//就是加了这句
{
if (fileName != null && !fileName.equals( " "))
{
String filePath = this.getServletContext().getRealPath( "/ ")
+ "\\fordownload\\ " + fileName;
try
{
File file = new File(filePath);
FileInputStream fis = new FileInputStream(file);
response.setCharacterEncoding( "GBK ");
response.setContentType( "application/x-msdownload ");
response.setContentLength((int) file.length());
String str = "attachment;filename= " + file.getName();
response.setHeader( "Content-Disposition ", str);
ServletOutputStream sos = response.getOutputStream();
byte[] data = new byte[1024];
int length = 0;
while ((length = fis.read(data)) > 0)
{
sos.write(data, 0, length);
}
sos.close();
fis.close();
} catch (IOException ioe){ioe.printStackTrace();}
}
}
}
结果参数是传进去了,可还是不能下载.说不能获取文件的长度.之前没有user这个参数时是可以下载的.why????????
有人说可以用过滤器,在过滤器中检查会话,如果登陆转向到一个带 <a href= "... "> </a> 链接的页面,过滤器怎么写?
------解决方案--------------------
加一段logic标签控制.非常简单的
<logic:notPresent> <logic:present> 怎么用,嘿嘿,相信你知道.不知道就去网上查查.具体再怎么做就很简单了
------解决方案--------------------
第一,按照你的方案
你不需要传入user,只需确认session中是否有user就可以了
第二,使用Filter将download 的servlet放在filter之后,在filter中确认session中的user信不存在的时候直接返回
第三,如楼上说的logic:present可以在页面上显示或者不显示download链接,但是最好再使用上述两种方法中的一种,否则直接在浏览器的地址栏中输入下载地址还是可以下载文件的。