1

我正在使用 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 个控制器,每个控制器都映射到特定的 url,例如 adminRequests.java映射到/admin/*

@Controller
@RequestMapping("/admin/*")
public class AdminRequests

然后我在类中的方法映射到特定的 url。

问题是,当 web.xml 中的 url-pattern 映射为 时,我收到 404 错误/。但是当我将 web.xml 中的 url 模式更改为/app或任何其他时,我index.html的服务没有任何问题。

我不确定问题出在哪里。请指教

4

2 回答 2

1

当您将 Url 模式 / 映射到 Spring 的 Dispatcher Servlet 时,对您的应用程序的所有请求都将转发到 Dispatcher Servlet。尽管在这种情况下您使用<mvc:resources>标签定义了静态资源,但是您的 index.html 没有正确解析,因为它不是呈现为 /resources/index.html 而是 /index.html。

我建议您<servlet-mapping>在 spring 之前的 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>

希望这对你有用。

于 2012-12-12T09:20:04.167 回答
0

不,这并没有解决问题。但我看到另一个线程在讨论相同的问题,其中一个答案有效。我<mvc:resources>从 spring xml 中删除了行,并在 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版本是否有问题,因为我在后端使用了带有spring数据的mongodb。设置我的 pom.xml 花了很多时间,因为 spring 数据版本和 mongodb 驱动程序存在一些问题。

于 2012-12-13T11:26:19.470 回答