gpt4 book ai didi

java - 为什么 tomcat7.0.47 在将前端 Controller servlet 映射到 *.do 或/或/* 的 URL 模式时无法访问静态资源(js、css)

转载 作者:行者123 更新时间:2023-11-28 11:38:14 24 4
gpt4 key购买 nike

事实上,我正在用 spring 编写一个 maven 元素。一切正常,直到我想导入我的 css 文件。这是我的 web.xml(只有 servlet 部分):

<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

然后我通过这个 url 访问我的页面:

http://localhost:8080/hello.do?method=reg

但是,我遇到了一个问题:style.css is 404 Not Found

所以,我搜索了一些文件,然后我得到了一个方法:在我的 servlet.xml 中添加一些配置(我的 servlet 是 mvc-dispatcher-servlet.xml):

<mvc:resources mapping="resources/**" location="/WEB-INF/resources/" />
<mvc:default-servlet-handler />

如您所见,我的 css 文件位于“/WEB-INF/resources/”下。但是,问题仍然存在。最后,我知道一件事:

static resources cannot be accessed while servlet is mapped on an URL pattern of / or /*

所以我将我的 web.xml 更改为:

<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/user/*</url-pattern>
</servlet-mapping>

最后,问题完全解决了,但是这让我更疑惑了,为什么tomcat不能访问静态资源(js,css),同时在**.do或/的URL模式上映射前端 Controller servlet或/*

更新(2013 年 12 月 30 日):

我的申请是这样的:

MyApplication
pom.xml
src
test
main
java
com.roger.spring
controller
UserController.java
dao
impl
UserDaoImpl.java
UserDao.java
domain
User.java
service
impl
UserService.java
UserService.java
webapp
WEB-INF
applicationContext.xml
dao.xml
db.properties
mvc-dispatcher-servlet.xml
service.xml
web.xml
pages
index.jsp
taglib.jsp
user
login.jsp
reg.jsp
profile.jsp
resources
css
style.css
js
calendar.js

最佳答案

使用默认的 servlet 映射比使用 /user/* 会更简单、更干净。和类似支柱的*.do映射:

<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

所有请求现在都将通过 Spring MVC 发送 - 包括对静态资源的请求。

然后你应该修改你的 Controller @RequestMapping s 并删除 *.do也是 - 所以你的 URL 变成:

http://localhost:8080/hello?method=reg

确保你还有 <mvc:default-servlet-handler />在你的 mvc-dispatcher-servlet.xml 中。

然后您应该能够使用 <mvc:resources mapping="resources/**" location="/WEB-INF/resources/" /> 提供静态资源没有任何问题。

关于java - 为什么 tomcat7.0.47 在将前端 Controller servlet 映射到 *.do 或/或/* 的 URL 模式时无法访问静态资源(js、css),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20811732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com