Spring MVC处理程序映射不起作用

时间:2017-03-01 17:38:01

标签: java jsp spring-mvc

我是Spring MVC的新手并且一直在关注教程,但他们似乎没有工作。

我可以加载我的index.jsp文件,但是当我尝试将它映射到Dispatcher Servlet时,我不断发现资源未找到错误。

HelloWorldController:

package com.javatpoint;  
import org.springframework.stereotype.Controller;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.servlet.ModelAndView;  

@Controller  
public class HelloWorldController {  

    @RequestMapping("/hello")  
    public ModelAndView helloWorld() {  

        String message = "HELLO SPRING MVC";  
        return new ModelAndView("hellopage", "message", message);  
    }  

}  

的web.xml:

<?xml version="1.0" encoding="UTF-8"?>  
<web-app version="2.5"   
    xmlns="http://java.sun.com/xml/ns/javaee"   
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
 <servlet>  
    <servlet-name>spring</servlet-name>  
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
    <load-on-startup>1</load-on-startup>  
</servlet>  
<servlet-mapping>  
    <servlet-name>spring</servlet-name>  
    <url-pattern>*.html</url-pattern>  
</servlet-mapping>  
</web-app> 

弹簧servlet.xml中:

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:p="http://www.springframework.org/schema/p"  
    xmlns:context="http://www.springframework.org/schema/context"  
    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">  
    <context:component-scan  base-package="com.javatpoint" />  
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <property name="prefix" value="/WEB-INF/jsp/" />  
        <property name="suffix" value=".jsp" />  
    </bean>  
</beans>  

我的jsp文件hellopage.jsp和welcomepage.jsp位于我的WEB-INF文件夹下的jsp文件夹中。 index.jsp的:

<a href="hello.html">click</a>|  
<a href="welcome.html">click</a>  

我正在尝试将hello.html映射到HelloWorldController.java。

我非常感谢任何帮助,因为我在映射第一个Spring MVC应用程序时遇到了问题。

4 个答案:

答案 0 :(得分:0)

添加

<url-pattern>*.jsp</url-pattern> 

到web.js中的servlet-mapping。

答案 1 :(得分:0)

你能试试@RequestMapping(值=&#34; / hello&#34;,method = RequestMethod.GET)?

答案 2 :(得分:0)

servlet-mapping中的网址格式错误。

当URL与此匹配时,您说转到调度程序servlet:

* .html

所以当你使用&#34; hello.html&#34; DispatcherServlet被触发。

但是,hello.html没有映射。 hello只有一个。 HTML是静态内容,通过控制器提供HTML并不典型。

试试这个:

将网址格式更改为:

<url-pattern>/</url-pattern>  

hello.html更改为hello.jsp

更改方法签名以返回字符串,并将Model添加到方法中。

 @RequestMapping("/hello")  
 public String helloWorld(Model model) {  
   return "hello";
 }

然后您的锚标签应指向正确的映射。它们看起来像这样:

<a href="hello">click</a>|  

那么这是如何工作的?这两件事:

<servlet-mapping>  
    <servlet-name>spring</servlet-name>  
    <url-pattern>/</url-pattern>  
</servlet-mapping>  

-

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

以上是相当标准的。在servlet映射中,它说任何与该URL模式匹配的东西都应该命中你在web.xml中定义的名为spring的servlet。

视图解析器正在/WEB-INF/jsp/目录中查找以.jsp结尾的文件。换句话说,Spring将寻找/WEB-INF/jsp/<string>.jsp。因此,当您在方法中返回字符串hello时,它实际上将尝试解析/WEB-INF/jsp/hello.jsp

如果您了解上述内容,您可能已经意识到您也可以通过这种方式提供*.html个文件。但是,他们需要自己的视图解析器。

答案 3 :(得分:0)

问题在于您的servlet映射,请尝试将其在web.xml中更改为:

<servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>

你的url-pattern设置为* .html。因此,只有以&#34; .html&#34;结尾的请求将被派遣到春天mvc。