【问题标题】:Spring PageNotFound and URLMapping in web.xmlweb.xml 中的 Spring PageNotFound 和 URLMapping
【发布时间】:2013-02-26 15:28:22
【问题描述】:

我一直在阅读很多这样的问题,但我并没有摆脱麻烦,我开始认为问题在于 tomcat 在玩。 首先,这是我的 web.xml、我的 *-servlet.xml 和我的控制器。

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">

<display-name>Spring REST Server</display-name>
<description>Spring REST Server</description>
<context-param>
  <param-name>log4jConfigLocation</param-name>
  <param-value>classpath:env/log4j.properties</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
            classpath:config/applicationContext.xml
            classpath:config/kimboo-servlet.xml
</param-value>
</context-param>
<context-param>
  <param-name>webAppRootKey</param-name>
  <param-value>Kimboo</param-value>
</context-param>
<listener>
  <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- Spring MVC Dispatcher Servlet -->
<servlet>
  <servlet-name>kimboo</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
      classpath:config/applicationContext.xml
      classpath:config/kimboo-servlet.xml
    </param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>kimboo</servlet-name>
  <url-pattern>/home/</url-pattern>
</servlet-mapping>
</web-app>

这是我的 kimboo-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
    http://www.springframework.org/schema/beans     
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<context:component-scan base-package="ar.com.kimboo.server.ui.controller" />

<mvc:annotation-driven />

<bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/AppClient/pages/" />
    <property name="suffix" value=".html" />
</bean>

这是我的控制器

@Controller
@RequestMapping(value = "/home")
public class HomeController {

@RequestMapping(value = "/")
public String home() {
    return "login";
}

@RequestMapping(value = "/main")
public String main() {
    return "main";
}

    @RequestMapping(value = "/about")
public String main() {
    return "about";
}
}

这是一个非常简单的例子,我不知道为什么不起作用。我已经阅读了很多这样的问题,在这里和其他网站,我不知道我错过了什么。

顺便说一句,在控制器中,我尝试了所有的方法来匹配 url;将“/home/”或“home/”放在类级别,将“login”或“main”放在方法级别。

唯一有效的是当我点击 localhost:8080/myServer/home/ 时。我尝试在 web.xml 的 url 模式中使用“/home/”而不是“/home/”。我也试过使用“/”和“/”,但都是一样的。

唯一可行的方法是在我使用的 web.xml 的 url 模式中

<url-pattern>/home/</url-pattern>
<url-pattern>/home/main/</url-pattern>
<url-pattern>/home/login/</url-pattern>

然后我可以点击所有网址。不知道怎么办,可能是tomcat 7的问题?

【问题讨论】:

    标签: url spring-mvc view tomcat7 web.xml


    【解决方案1】:

    您没有为控制器和注释处理程序配置映射。在 kimboo-servlet.xml 的 bean 配置下面添加这个,并添加相应的 jars。它可能会工作。

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
    
    <bean id="simpleUrlMapping"  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
             <value>
                /home/**=homeController 
            </value>
        </property>
    </bean>
    

    【讨论】:

    • 这不起作用,我试了几次,配置是这样的,这真的很烦人,因为在日志中我实际上看到了映射的 url,如 DefaultAnnotationHandlerMapping - Mapped URL path [/home/main] onto handler 'homeControlle Mapped URL path [/home/main/] onto handler 'homeController' 和控制器 bean SimpleUrlHandlerMapping - Mapped URL path [/home/**] onto handler 'homeController' 但是当我点击 http://localhost:8080/server/home/main 时,我会在日志中显示 No mapping found ... with URI [/server/home/main] in ... 'kimboo'
    • 我不知道为什么它不适合你。更改 web.xml url 模式,如 ./*。但我不确定。
    【解决方案2】:

    这不是 TomCat 问题,我怀疑这是您如何注释控制器的问题。请按如下方式替换您的控制器注释

      @Controller
    public class HomeController {
    
    @RequestMapping(value = "/home")
    public String home() {
        return "login";
    }
    
    @RequestMapping(value = "/home/main")
    public String main() {
        return "main";
    }
    
        @RequestMapping(value = "home/about")
    public String main() {
        return "about";
    }
    
    }
    

    这只是一个猜测。对不起,如果我弄错了。我记得在 REST 服务中看到过这个问题。也许是一样的。现在没有时间自己测试。

    【讨论】:

    • 抱歉,我认为那是另一种错误,因为在您的映射或我的映射中,我一直在控制台中看到相同的映射,例如 Mapped URL path [/home/main] onto handler 'homeController' 等等...
    【解决方案3】:

    看这个问题:Basic Spring MVC config: PageNotFound using InternalResourceViewResolver。原因是你的映射太宽,干扰JspServlet映射。

    【讨论】:

      猜你喜欢
      • 2017-05-05
      • 2015-10-21
      • 1970-01-01
      • 2017-08-30
      • 2014-06-17
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      • 2016-09-05
      相关资源
      最近更新 更多