Spring MVC 3 - 需要帮助解决url-pattern问题

时间:2012-12-11 07:31:53

标签: spring-mvc

我正在使用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没有任何问题。

我不确定问题出在哪里。请建议

2 个答案:

答案 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驱动程序存在一些问题。