【问题标题】:How to compile a javascript file as a jsp?如何将javascript文件编译为jsp?
【发布时间】:2011-02-14 02:42:26
【问题描述】:

我希望能够在我的 JavaScript 文件上使用 JSP servlet 来实现 i18n 目的。以下面的 JavaScript 为例:

function you_did_it_wrong() {
    alert("<fmt:message key="you.did.it.wrong" />");
}

我尝试在我的 web.xml 中设置 JspServlet,如下所示:

<servlet>
    <servlet-name>preprocessor</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>preprocessor</servlet-name>
    <url-pattern>*.js</url-pattern>
</servlet-mapping>

但是当我调用js文件时,它没有被servlet处理就回来了。

【问题讨论】:

  • o_O Javascript 与 Java 无关。您应该用 Java 编写 JSP servlet。如果你真的想在你的 jsp servlet 中运行 javascript,请安装 mozilla.org/rhino 并使用它
  • 我觉得我说得不够清楚。我不是在尝试使用 javascript 语法来编写 java 代码。我正在尝试使用 jsp servlet 来编译和运行我的 js 文件。我可以用扩展名 .jsp 命名我的 js 文件,并引用 ,这样会起作用,但我希望它也能起作用在带有 .js 的文件上。
  • 啊。您的配置似乎是正确的。编辑 conf 后是否重新启动了 Apache? * 也许最好在serverfault.com提出这样的问题
  • 另外,我认为最好删除 javascript 标签,因为您的问题与 javascript 无关——它也可以是任何其他扩展。
  • 一般和javascript有关,所以我把标签加回来了。

标签: javascript jsp servlets


【解决方案1】:

博卓给出了正确的提示。不过,我想回答具体的问题。


fmt taglib 未在文件顶部声明时,给定的代码 sn-p 将失败

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:setLocale value="${language}" />
<fmt:setBundle basename="com.example.i18n.text" />

所以只要确保它在你的 JS 文件中。

JSP servlet 条目看起来不错,虽然我想我宁愿只使用这个:

<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.js</url-pattern>
</servlet-mapping>

jsp 是 Tomcat 内置 JspServletservlet-name,您可以在其 /conf/web.xml 中找到它)

【讨论】:

  • 我刚刚意识到他再次定义了 jsp servlet,而不是使用原来的 :) (+1)。顺便说一句,请注意,这样做你是 servlet-container 依赖。
  • 这也适用于 Jetty。但是,它不适用于 google app engine sdk 1.4.0(它使用 Jetty ......看图)。其他人也遇到了 GAE 问题:groups.google.com/group/google-appengine-java/browse_thread/…。即使我的问题没有解决,我也会奖励你积分。如果您能在 GAE 中弄清楚如何操作,将获得奖励积分。
  • 不客气。对不起,我不做 GAE。或者,创建一个顶部带有 &lt;%@ page contentType="text/javascript" %&gt; 的 JSP 文件,将必要的 JS 代码放入其中,最后将其包含在 &lt;script src&gt; 中。
【解决方案2】:

有比通过 jsp servlet 提供 .js 文件更好的方法。

Check this question。我最终在 .js 文件中声明了所有变量,并让它们通过 init 方法传递:

init({somgMsg: '<fmt:.../>', anotherMsg: '<fmt:... />'});

【讨论】:

  • 感谢您的输入,但就我而言,我想将我的 jsp 中的所有 javascript 外部化。
猜你喜欢
  • 1970-01-01
  • 2016-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 2016-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多