我有一个使用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
)?
答案 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