Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring PageNotFound和web.xml中的URLMapping_Url_Spring Mvc_View_Tomcat7_Web.xml - Fatal编程技术网

Spring PageNotFound和web.xml中的URLMapping

Spring PageNotFound和web.xml中的URLMapping,url,spring-mvc,view,tomcat7,web.xml,Url,Spring Mvc,View,Tomcat7,Web.xml,我已经读了很多这样的问题,但我并没有摆脱困境,我开始认为问题在于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

我已经读了很多这样的问题,但我并没有摆脱困境,我开始认为问题在于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>
这是一个非常简单的例子,我不知道为什么它不起作用。我在这里和其他网站上读了很多类似的问题,我不知道我遗漏了什么

顺便说一下,在控制器中,我尝试了所有的转换以匹配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>
/home/
/主/主/
/主页/登录/

然后我可以点击所有的url。我不知道该怎么办,也许这是tomcat 7的问题?

我怀疑这不是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服务中看到过这个问题。可能是一样的。现在我没有时间自己测试它。

您没有为控制器和注释处理程序配置映射。请在kimboo-servlet.xml中的bean配置下面添加此项,并添加相应的JAR。这可能会起作用

<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>

/home/**=homeController

看看这个问题:。原因是您的映射太宽,干扰了
JspServlet
映射。

对不起,我认为这是另一种错误,因为使用您的映射或我的映射时,我在控制台中不断看到相同的映射,例如
将URL路径[/home/main]映射到处理程序“homeController”
上等等……这不起作用,我尝试了好几次,使用这样的配置,这真的很烦人,因为在日志中我实际上看到了映射的URL,比如
DefaultAnnotationHandlerMapping-映射的URL路径[/home/main]到handler的homeControlle上
映射的URL路径[/home/main/]到处理程序“homeController”
和控制器bean
SimpleRulHandlerMapping-Mapped URL路径[/home/**]到处理程序“homeController”
但是当我点击
http://localhost:8080/server/home/main
在日志中显示我
未找到映射。。。URI[/server/home/main]位于…'kimboo'
我不知道为什么它对您不起作用。更改web.xml url模式,如。/*。但我对此不确定。
  @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";
}

}
<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>