客户端怎么从JBOSS的服务器上下载文件????

时间:2021-04-21 17:51:23
我是在JBOSS下部署的.现在要做了一个网页,当用户按按钮时动态生成一个文件,并下载到客户端(客户端弹出下载对话框,提示下载.)


现在有两个问题:
1、动态生成文件的文件应放哪?才能使得用户可以访问得到。(如果是随便一个目录用户端是不能访问的,我知道一般放在WEB服务器的根目录,但JBOSS是这个目录是什么样的路径啊???)

2、我的文件是*.xls的,如果用户有装EXCEL 当用户下载时会打在网页上打开EXCEL,怎么让它不打开而直接弹出下载对话框呢??

7 个解决方案

#1


1.动态生成的文件随便放到一个目录就可以了,只要不是受服务器保护的目录,比如在d盘建一个upload的目录,只要用于下载这个文件的servlet能够读取这个目录里的文件就可以
2.检查你的servlet中response中相关字段是否设置正确了,例如setHeader之类的方法

#2


我没有用servlet 来做下载,而是用<html:link href="\JBOSS/server/default/deploy/emCnGoList.xls">另存为EXCLE表</html:link>


你有没有用servlet 做的例子啊,能给一个吗?

#3


邮箱是:zhangzhaoh@msn.com

#4


给你贴一个吧
public class download extends HttpServlet {

private static final String CONTENT_TYPE = "text/html; charset=GBK";

   //Initialize global variables
   public void init() throws ServletException {
   }
   //Process the HTTP Get request
   public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//HttpServletRequestWrapper httpReqWrapper = (HttpServletRequestWrapper) request;
//HttpServletRequest httpRequest =(HttpServletRequest)httpReqWrapper.getRequest();
try {
       downloadArtifact(request, response);
     }catch (Exception x) {
       x.printStackTrace();
       RequestDispatcher dispatcher = this.getServletContext().
           getRequestDispatcher("/common/ShowError.jsp");
      
       dispatcher.forward(request, response);
       }
    }
    
   public void downloadArtifact(HttpServletRequest request, HttpServletResponse response) throws Exception {
     Exception ex=null;
     String fileId = (String)request.getParameter("ID");
     String realFile = null;
     String realFileName = "";
     File uploadDir = new File("D:\\upload");
     if (uploadDir.isDirectory()) {
     File[] files = uploadDir.listFiles();
     for (int j = 0; j < files.length; j++) {
     File tempFile = files[j];
     if ((tempFile.getName().indexOf(fileId)) >= 0){
     //System.err.println("get The file" + tempFile.getName());
     realFile = tempFile.getName();
     break;
     }
     }
     }
     int seperatePos = realFile.lastIndexOf(".");
     String fileAppendix = realFile.substring(seperatePos+1);
     String tempFileName = realFile.substring(0,seperatePos);
     int idIndex = tempFileName.lastIndexOf(fileId);
     realFileName = tempFileName.substring(0,idIndex) + "." + fileAppendix;
    
File file = new File("D:\\upload", realFile);
if(!file.exists()) throw new Exception("Sorry, File Not Found");
     int length=(new Long(file.length())).intValue();
     response.setContentType("application/octet-stream; charset=UTF-8");
     response.setHeader("Content-disposition", "attachment; filename=\""+realFileName+"\"");
     //response.setHeader("Content-disposition", "attachment; filename=\""+file.getName()+"\"");
     //System.err.println("******" + realFileName);
     int bufferSize=1024;
BufferedOutputStream output = null;
     BufferedInputStream input = null;
     output = new BufferedOutputStream(response.getOutputStream());
     input = new BufferedInputStream(new FileInputStream(file));
     try {
       int once = 0;
       int total = 0;
      byte[] buffer = new byte[bufferSize];
       do {
         once = input.read(buffer);
         total += once;
         if (once >= 0)
           output.write(buffer, 0, bufferSize);
       }
       while ( (total < length) && (once >= 0));
       response.flushBuffer();
     }
     catch (Exception e) {
       ex = e;
     } // maybe user cancelled download
     finally {
       if (input != null) input.close();
       if(output!=null) output.close();

       if(null!=ex) throw ex;
     }
    }

   //Process the HTTP Post request
   public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     doGet(request, response);
   }
}

#5


你好,谢谢你的代码,可是在我这里没有成功,能帮我看看吗?


我的环境是:jbuilder x + jboss 用struts框架。

Download.java 放在cn.com.xict.website.dm包下
在WEB.XML中是这样的
<servlet>
    <servlet-name>download</servlet-name>
    <servlet-class>cn.com.xict.website.dm.Download</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>download</servlet-name>
    <url-pattern>/download</url-pattern>
  </servlet-mapping>

这是JSP中的:
<form action="/download" method="POST" name="download" scope="" target="" onsubmit="" >
 <input type="submit" name="submit" value="download"/>
 </form>

当部署后要连下去时,服务器端提示:
13:13:20,949 INFO  [Engine] StandardHost[localhost]: MAPPING configuration error for request URI /download


网页上错误为:
type Status report

message No Context configured to process this request

description The server encountered an internal error (No Context configured to process this request) that prevented it from fulfilling this request.

#6


除了web.xml 是不是还有其它的地方要配置??????

#7


up

#1


1.动态生成的文件随便放到一个目录就可以了,只要不是受服务器保护的目录,比如在d盘建一个upload的目录,只要用于下载这个文件的servlet能够读取这个目录里的文件就可以
2.检查你的servlet中response中相关字段是否设置正确了,例如setHeader之类的方法

#2


我没有用servlet 来做下载,而是用<html:link href="\JBOSS/server/default/deploy/emCnGoList.xls">另存为EXCLE表</html:link>


你有没有用servlet 做的例子啊,能给一个吗?

#3


邮箱是:zhangzhaoh@msn.com

#4


给你贴一个吧
public class download extends HttpServlet {

private static final String CONTENT_TYPE = "text/html; charset=GBK";

   //Initialize global variables
   public void init() throws ServletException {
   }
   //Process the HTTP Get request
   public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//HttpServletRequestWrapper httpReqWrapper = (HttpServletRequestWrapper) request;
//HttpServletRequest httpRequest =(HttpServletRequest)httpReqWrapper.getRequest();
try {
       downloadArtifact(request, response);
     }catch (Exception x) {
       x.printStackTrace();
       RequestDispatcher dispatcher = this.getServletContext().
           getRequestDispatcher("/common/ShowError.jsp");
      
       dispatcher.forward(request, response);
       }
    }
    
   public void downloadArtifact(HttpServletRequest request, HttpServletResponse response) throws Exception {
     Exception ex=null;
     String fileId = (String)request.getParameter("ID");
     String realFile = null;
     String realFileName = "";
     File uploadDir = new File("D:\\upload");
     if (uploadDir.isDirectory()) {
     File[] files = uploadDir.listFiles();
     for (int j = 0; j < files.length; j++) {
     File tempFile = files[j];
     if ((tempFile.getName().indexOf(fileId)) >= 0){
     //System.err.println("get The file" + tempFile.getName());
     realFile = tempFile.getName();
     break;
     }
     }
     }
     int seperatePos = realFile.lastIndexOf(".");
     String fileAppendix = realFile.substring(seperatePos+1);
     String tempFileName = realFile.substring(0,seperatePos);
     int idIndex = tempFileName.lastIndexOf(fileId);
     realFileName = tempFileName.substring(0,idIndex) + "." + fileAppendix;
    
File file = new File("D:\\upload", realFile);
if(!file.exists()) throw new Exception("Sorry, File Not Found");
     int length=(new Long(file.length())).intValue();
     response.setContentType("application/octet-stream; charset=UTF-8");
     response.setHeader("Content-disposition", "attachment; filename=\""+realFileName+"\"");
     //response.setHeader("Content-disposition", "attachment; filename=\""+file.getName()+"\"");
     //System.err.println("******" + realFileName);
     int bufferSize=1024;
BufferedOutputStream output = null;
     BufferedInputStream input = null;
     output = new BufferedOutputStream(response.getOutputStream());
     input = new BufferedInputStream(new FileInputStream(file));
     try {
       int once = 0;
       int total = 0;
      byte[] buffer = new byte[bufferSize];
       do {
         once = input.read(buffer);
         total += once;
         if (once >= 0)
           output.write(buffer, 0, bufferSize);
       }
       while ( (total < length) && (once >= 0));
       response.flushBuffer();
     }
     catch (Exception e) {
       ex = e;
     } // maybe user cancelled download
     finally {
       if (input != null) input.close();
       if(output!=null) output.close();

       if(null!=ex) throw ex;
     }
    }

   //Process the HTTP Post request
   public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     doGet(request, response);
   }
}

#5


你好,谢谢你的代码,可是在我这里没有成功,能帮我看看吗?


我的环境是:jbuilder x + jboss 用struts框架。

Download.java 放在cn.com.xict.website.dm包下
在WEB.XML中是这样的
<servlet>
    <servlet-name>download</servlet-name>
    <servlet-class>cn.com.xict.website.dm.Download</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>download</servlet-name>
    <url-pattern>/download</url-pattern>
  </servlet-mapping>

这是JSP中的:
<form action="/download" method="POST" name="download" scope="" target="" onsubmit="" >
 <input type="submit" name="submit" value="download"/>
 </form>

当部署后要连下去时,服务器端提示:
13:13:20,949 INFO  [Engine] StandardHost[localhost]: MAPPING configuration error for request URI /download


网页上错误为:
type Status report

message No Context configured to process this request

description The server encountered an internal error (No Context configured to process this request) that prevented it from fulfilling this request.

#6


除了web.xml 是不是还有其它的地方要配置??????

#7


up