找不到弹簧控制器

时间:2017-02-05 14:03:38

标签: spring spring-mvc tomcat

我无法调用spring MVC控制器。每当我点击它,它说没有找到。 我的文件如下。

Web.xml中

      <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>

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

弹簧servlet.xml中

<mvc:annotation-driven />

    <context:component-scan base-package="com.gkool" />

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

    <mvc:resources mapping="/resources/**" location="/resources/" />

</beans>

我的控制器文件

package com.gkool;


@Controller
@RequestMapping("/score")
public class ScoreController {
    Logger log = Logger.getLogger(ScoreController.class);
    @RequestMapping(value = "", method = RequestMethod.GET)
    public String printWelcome(ModelMap model) {

        model.addAttribute("message", "Spring 3 MVC Hello World");
        return "hello";

    }

    @RequestMapping(value = "/hello/{name}", method = RequestMethod.GET)
    public ModelAndView hello(@PathVariable("name") String name) {

        ModelAndView model = new ModelAndView();
        model.setViewName("hello");
        model.addObject("msg", name);

        return model;

    }

}

当我启动服务器并点击网址http://localhost:8080/gk1/scorehttp://localhost:8080/gk1/score/hello/anoop时,它会找不到错误代码404。

P.S。 / gk1是tomcat中的模块名称。

当我启动tomcat服务器时,它会提供以下日志

org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping registerHandlerMethod
INFO: Mapped "{[/score/hello/{name}],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.web.servlet.ModelAndView com.gkool.ScoreController.hello(java.lang.String)
Feb 07, 2017 10:37:11 PM org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping registerHandlerMethod
INFO: Mapped "{[/score],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String com.gkool.ScoreController.printWelcome(org.springframework.ui.ModelMap)
Feb 07, 2017 10:37:12 PM org.springframework.web.servlet.handler.SimpleUrlHandlerMapping registerHandler
INFO: Mapped URL path [/resources/**] onto handler 'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0'

这意味着它将映射的URL标识为/ score / hello / {name}但是当我在调试中启动我的服务器并在控制器方法中放置调试器断点时,调试控件不会出现在那里。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

检查您是否已在应用程序的tomcat配置中定义了上下文Web:

<Context docBase="/path/to/myapp.war" path="/myContext" reloadable="true"/>

现在执行这样的请求:

http://localhost:8080/myContext/gk1/score/hello/anoop

但如果您已定义为:

<Context docBase="/path/to/myapp.war" path="/gk1" reloadable="true"/>

然后在web.xml servlet配置中,你只需要像这样定义servlet映射:

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

答案 1 :(得分:0)

修复Spring配置。

<mvc:annotation-driven />

是一个配置元素。

这是春天到#34;找到&#34;你的控制者:

<context:component-scan base-package="your.controller.package"/>

根据Sotirios Delimanolis评论,以下配置

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

告诉tomcat发送与此URL完全匹配的请求:http://localhost:8080/gk1到spring servlet。

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

告诉tomcat将任何以URL http://localhost:8080/gk1开头的请求发送到spring。

*之间的区别是:&#34;完全匹配&#34;和&#34;以&#34;。

开头