2011-07-20 80 views
1

我们正在从我们的JSP页面生成CSSJavaScript文件的链接。这些CSS和JS文件组织在区域设置特定文件夹。现在,我们需要从下载文件,以防万一请求的文件在指定的位置不可用(用于加载资源包的类似方法 - 如果特定于语言环境的Bundle不可用,则默认使用一个)。 你能否建议一种方法来实现这一点?从回退位置下载文件

+0

您是否使用apache作为静态内容的前端服务器? – Santosh

+0

我正在使用IBM HTTP Server。我认为它建立在Apache之上 – Apps

回答

2

您可以让一个servlet处理获取特定于语言环境的文件。该servlet映射到像“/ yourApp/localeFile”一个URL,并用它在你的JSP中,如:

<script src="/yourApp/localeFile?name=something.js&locale=en_US"> 

该servlet会读,并返回语言环境的文件的内容,如果它存在。如果找不到该文件,它将返回回退语言环境文件的内容。

另外,也许你可以做一些事情,如有服务器的语言环境目录404处理程序返回后备文件。

+0

这是资源管理器的工作原理吗?我想实施相同的机制。 – Apps

0

如果您使用jsp-api-2.0,您可以编写标签文件,否则您只能使用概念。

在JSP创建/WEB-INF/tags/file.tag

<%@tag import="java.io.File"%> 
<%@ taglib tagdir="/WEB-INF/tags" prefix="g" %> 
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%> 

<%@ attribute name="path" required="true" type="java.lang.String" rtexprvalue="true"%> 
<%@ attribute name="file" required="true" type="java.lang.String" rtexprvalue="true"%> 

<% 
    final PageContext pc = (PageContext) getJspContext(); 
    final String lang = request.getLocale().getLanguage(); 

    final String prefered = pc.getServletContext().getRealPath(path + "/" + lang + "/" + file); 
    final File file = new File(prefered); 
    if (file.exists()) { 
     pc.setAttribute("fileToUse", path + "/" + lang + "/" + file); 
    } else { 
     pc.setAttribute("fileToUse", path + "/" + file); 
    } 
%> 
${fileToUse} 

添加

<%@ taglib tagdir="/WEB-INF/tags" prefix="g" %> 

,那么你可以使用它作为

<script type="text/javascript" src='<g:file file="myfile1.js" path="/js" />'></script> 
<script type="text/javascript" src='<g:file file="myfile2.js" path="/js" />'></script> 

假设你有webapp/js,webapp/js/en ...文件夹。