EL表达式仅由具有此功能的servlet评估。此类servlet的示例是JSP
JspServlet和JSF
FacesServlet。在一个能够评估的
${...}模板文本和其他能够评估两者${...}并#{...}在模板文本。负责*.js文件等静态资源的容器的默认servlet
则不是。
鉴于您正在使用JSP,只需告诉您的Web应用程序即可使用它
JspServlet来处理任何
*.js请求。容器的内置函数
JspServlet通常具有默认的servlet名称
jsp(至少,对于Tomcat和克隆来说是正确的),因此
web.xml应在webapp的以下条目中进行操作,以便在
*.js文件中评估EL
。
<servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.js</url-pattern></servlet-mapping>
这有一个小警告。一些容器强行将内容类型标头更改为
text/html无论
js文件扩展名如何,然后浏览器在下载JS文件时感到困惑。一种防止这种情况的方法是,以JSP方式在JS文件顶部显式设置所需的内容类型标头:
<%@page contentType="application/javascript" %>
完全不同的选择是将上下文路径打印为
<html>标记的HTML5数据属性。
<!DOCTYPE html><html lang="en" data-baseuri="${pageContext.request.contextPath}/"> ...</html>然后就可以在JS中的任何位置使用它,如下所示:
var baseuri = document.documentElement.dataset.baseuri;
或者,如果您是jQuery粉丝:
var baseuri = $("html").data("baseuri");


