我正在使用spring mvc开发一个应用程序,这是我的web.xml
<servlet>
<servlet-name>admin</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>admin</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
为了提供静态内容,我在admin-servlet.xml中添加了以下行
<context:component-scan base-package="com.prasanna.blog.Server" />
<mvc:resources mapping="/resources/**" location="/"/>
我有5个控制器,每个控制器映射到特定网址,例如adminRequests.java
映射到/admin/*
@Controller
@RequestMapping("/admin/*")
public class AdminRequests
然后我将类中的方法映射到特定的URL。
问题是,当web.xml中的url-pattern映射为/
时,我收到404错误。但是当我将web.xml中的url模式更改为/app
或任何其他,我的index.html
没有任何问题。
我不确定问题出在哪里。请建议
答案 0 :(得分:1)
将Url pattern /映射到Spring的Dispatcher Servlet时,对应用程序的所有请求都将转发到Dispatcher Servlet。虽然在这种情况下您使用<mvc:resources>
标记定义了静态资源,但您的index.html未正确解析,因为它未呈现为/resources/index.html而是/index.html。
我建议你在spring <servlet-mapping>
之前在web.xml中再添加一个<servlet-mapping>
。例如:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/index.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>admin</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
希望这对你有用。
答案 1 :(得分:0)
没有,这没有解决问题。但我看到另一个讨论相同问题的线程,其中一个答案是有效的。我从spring xml中删除了<mvc:resources>
行,并在web.xml中添加了以下行
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
现在我的静态内容没有任何问题,但我不喜欢这种方法。感觉就像一个非常肮脏的黑客。现在,如果我必须提供图像,我必须为每种图像类型添加映射。我不确定spring版本是否有问题,因为我在后端使用mongodb和spring数据。设置我的pom.xml花了很多时间,因为spring数据版本和mongodb驱动程序存在一些问题。