无法在Eclipse Web应用程序中加载和执行JavaScript文件

时间:2013-07-03 18:06:47

标签: java javascript eclipse jersey

我有一个使用Tomcat在Eclipse中开发的动态Web应用程序。我的Web应用程序文件夹是WebContent,它具有以下结构:

WebContent
   |_____WEB-INF
   |        |__ web.xml
   |___form.html
   |
   |___send.js

form.html文件引用JavaScript文件send.js,如下所示:

<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script src="send.js"></script>

它们都位于WebContent的同一根目录中。但是,当我在Eclipse中启动servlet并尝试在浏览器中打开form.html时。 send.js未执行。但是,如果我将send.js中的所有内容直接复制到form.html并将其放入<script>...</script>标记中,它将正确执行JavaScript代码。我不想将所有JS代码放在HTML文件中,所以我更喜欢将send.js文件与HTML文件分开。那么如何让JS文件被执行?

此外,我使用Jersey作为RESTful Web服务,我的web.xml servlet映射如下:

<servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.example</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

为什么Jersey的Servlet容器不能在Web根目录(WebContent)中找到JavaScript文件(send.js)?

1 个答案:

答案 0 :(得分:1)

Jersey只处理RESTful方法。泽西岛不处理其他网络资源。这就是http://localhost:8080/myapp/rest/send.js导致404“未找到”的原因。

您需要在<servlet>中定义另一个<servlet-mapping>web.xml,以便处理其他HTML,CSS,JavaScript,图片等资源。我正在使用的应用程序使用Faces Servlet不仅用于JSF / Facelet页面,而且我认为它是服务于JS,CSS等的那个。

然后,加载send.js的正确网址将显示为http://localhost:8080/myapp/send.js