java - 找不到 Spring MVC Controller

标签 java spring-mvc

这可能很简单,但我想我漏掉了一些东西。问题归结为:我正在尝试使用 HelloController 来显示“/WEB-INF/hello.jsp”。不幸的是,我在尝试访问时收到 404 http://example.com/app/hello

这是代码。可能很容易修复。

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>

应用程序上下文.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:

@Controller
public class HelloController {

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

你好.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>

更新:添加了每个请求的错误消息。

Error 404--Not Found From RFC 2068 Hypertext Transfer Protocol -- HTTP/1.1: 10.4.5 404 Not Found

The server has not found anything matching the 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. 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.

最佳答案

这个问题(在 web.xml 中):

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

这会将所有请求重定向到 Spring servlet,包括您从 Controller 到 JSP 的请求。本质上,控制流将从您的 Controller 再次循环回到 Spring。您需要缩小范围,以便对 JSP 的请求直接发送到底层容器,而不是发送到 Spring。

尝试将其更改为

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

然后再试一次。您可能需要稍微调整一下前导和尾随斜线以使其工作(例如 <url-pattern>/app*</url-pattern>@RequestMapping("hello") 等)

关于java - 找不到 Spring MVC Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9806559/

相关文章:

java - 如何使用 Java 查找 Google Drive 中的 isFolderExist 和 isFileExist?

java - 如何使用 Spring MVC 4 从另一个 Web 项目引用静态资源

java - 在 Bitmap 周围绘制渐变透明圆

java.lang.classnotfoundexception org.springframework.web.servlet.dispatcherservlet

java - Spring MVC - 接收 XML 对象并反序列化为 Collection

java - RowFilter RegexFilter - 如何避免整数被转换为带逗号的字符串?

java - import com.sun.xml.internal.fastinfoset.util.StringArray 无法在 javac 上解析

java - 使用 SpringMVC 在 Tomcat 中包含静态内容的外部目录

java - 为什么 Spring DeferredResult 在我的应用程序中串行执行?

java - 自定义属性编辑器的正确方法