2011-01-28 70 views
0

現在我正在使用Apache來做一些非常簡單的文件服務。我們還有一個JBoss 4.2.3實例,可以完成我們所有的應用程序服務。我想僅僅使用JBoss來處理所有事情。在Apache中,我做在httpd.conf文件執行文件服務如下:在JBoss 4.2.3中的文件服務?

Alias /reports "C:/driveReports/" 
<Directory "C:/driveReports/*"> 
    AllowOverride All 
    Options Indexes FollowSymLinks 
    Order allow,deny 
    Allow from all 
</Directory> 

有什麼相當於我可以在JBoss中做來完成同樣的事情?這看起來很簡單,但我一直無法找到任何讓我相信有一個解決方案不涉及Apache與JBoss的Tomcat鏈接。

我知道我很容易將文件從「C:/ driveReports」位置移動到JBoss Web部署位置,但我寧願不必這樣做。謝謝。

+0

放置Apache或其他代理是常見操作。 Apache在提供靜態內容方面效率更高。 – 2011-01-28 15:08:02

回答

0

我不確定JBoss AS是否具有這種開箱即用功能。畢竟,它是一個應用服務器。

您可以使用一個servlet爲這樣的目的,類似Jetty的默認servlet,一個代碼,例如這樣的:

private void dispatchFileForDownload(File file, HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 

    // Check the file existence. 
    if(!file.exists()) 
     throw new IllegalStateException("File "+file.getPath()+" does not exist."); 
    if(!file.isFile()) 
     throw new IllegalStateException("File "+file.getPath()+" is not a regular file."); 

    // HTTP stuff. 
    resp.setContentLength((int)file.length()); 
    if(artifactInfo.getFileName().endsWith(".jar")) 
     resp.setContentType("application/java-archive"); 
    else if(artifactInfo.getFileName().endsWith(".xml")) 
     resp.setContentType("text/xml"); 
    else 
     resp.setContentType("application/octet-stream"); 

    resp.setHeader("Content-Disposition", "attachment; filename="+file.getName()); 


    ServletOutputStream os = resp.getOutputStream(); 
    FileInputStream in = new FileInputStream(file); 
    IOUtils.copy(in, os); 
    in.close(); 
    os.close(); 
} 
相關問題