简体   繁体   English

找不到Spring MVC控制器

[英]Spring MVC Controller Not Found

This is probably an easy one, but I'm missing something I guess. 这可能是一个简单的,但我想我错过了一些东西。 The problem comes down to this: I am trying to use a HelloController to display "/WEB-INF/hello.jsp". 问题归结为:我正在尝试使用HelloController来显示“/WEB-INF/hello.jsp”。 Unfortunately, I get a 404 when trying to access http://example.com/app/hello 不幸的是,我在尝试访问http://example.com/app/hello时获得了404

Here is the code. 这是代码。 Probably an easy fix. 可能很容易解决。

web.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_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>app</display-name>

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

 <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
  </context-param>

  <listener>
    <listener-class>
      org.springframework.web.context.ContextLoaderListener
    </listener-class>
  </listener>

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
    </init-param>
</servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

applicationContext.xml: applicationContext.xml中:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:tx="http://www.springframework.org/schema/tx" 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"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans 
                    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
                    http://www.springframework.org/schema/tx
                    http://www.springframework.org/schema/tx/spring-tx-3.1
                    http://www.springframework.org/schema/context
                    http://www.springframework.org/schema/context/spring-context-3.1.xsd
                    http://www.springframework.org/schema/security
                    http://www.springframework.org/schema/security/spring-security-3.1.xsd
                    http://www.springframework.org/schema/mvc
                    http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">

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

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"
    p:prefix="/WEB-INF/" p:suffix=".jsp" />

</beans>

HelloController.java: HelloController.java:

@Controller
public class HelloController {

    @RequestMapping(value="/hello", method=RequestMethod.GET)
    public ModelAndView helloWorld() {
        ModelAndView mv = new ModelAndView();
        mv.setViewName("hello");
        return mv;
    }
}

hello.jsp: 为hello.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
   <title>Hello</title>
</head>
<body>
<p>Hello</p>
</body>
</html>

Update: Added error message per request. 更新:每个请求添加了错误消息。

Error 404--Not Found From RFC 2068 Hypertext Transfer Protocol -- HTTP/1.1: 10.4.5 404 Not Found 错误404 - 从RFC 2068超文本传输​​协议找不到 - HTTP / 1.1:10.4.5 404未找到

The server has not found anything matching the Request-URI. 服务器未找到与Request-URI匹配的任何内容。 No indication is given of whether the condition is temporary or permanent. 没有说明该病症是暂时的还是永久性的。

If the server does not wish to make this information available to the client, the status code 403 (Forbidden) can be used instead. 如果服务器不希望将此信息提供给客户端,则可以使用状态代码403(禁止)。 The 410 (Gone) status code SHOULD be used if the server knows, through some internally configurable mechanism, that an old resource is permanently unavailable and has no forwarding address. 如果服务器通过一些内部可配置的机制知道旧资源永久不可用且没有转发地址,则应该使用410(Gone)状态代码。

This the problem (in web.xml ): 这个问题(在web.xml ):

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

This will redirect all requests to the Spring servlet, including your request from the controller to the JSP. 这会将所有请求重定向到Spring servlet, 包括从控制器到JSP的请求。 Essentially, the control flow will loop from your controller back into Spring again. 从本质上讲,控制流程将从控制器循环回到Spring。 You need to narrow that down so that the request for the JSP goes direct to the underlying container, rather than to Spring. 您需要缩小范围,以便JSP的请求直接转到底层容器,而不是Spring。

Try changing it to 尝试将其更改为

<url-pattern>/app*</url-pattern>

And try again. 然后再试一次。 You might need to fiddle a bit with leading and trailing slahes to make it work (eg <url-pattern>/app*</url-pattern> or @RequestMapping("hello") , etc) 您可能需要使用前导和尾随slash来使其工作(例如<url-pattern>/app*</url-pattern>@RequestMapping("hello")等)

Please check that your all controller class/sub-packages or other classes are within the same package as your have mentioned in the following line: 请检查您的所有控制器类/子包或其他类是否与您在以下行中提到的包相同:

<context:annotation-config />
<context:component-scan base-package="com.kfs" />

As you metioned in comment, log dont give you infromation that Controller mapped to specific url. 正如您在评论中提到的那样,日志不会为您提供Controller映射到特定URL的信息。 So I think prblem is in controller. 所以我认为prblem在控制器中。

Make sure, controller in the "mil.army.retain.web.controller" package and turn on the annotation-config: 确保,控制器在“mil.army.retain.web.controller”包中并打开annotation-config:

<context:annotation-config />

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM