Spring MVC 4 处的控制器配置无效
Invalid controller configuration at Spring MVC 4
我是 Spring 框架的新手。我想开发一个简单的 web-app,显示基于 url“/greeting.html”的 hello.jsp 内容。但是现在,它给了我 404 错误。我做错了什么?
这是我项目的 github 存储库(该项目是在 Eclipse STS 下创建的):https://github.com/terancet/EventTracker
这是我的 HelloController class
@Controller
public class HelloController {
@RequestMapping(value = "/greeting")
public String sayHello(Model model) {
model.addAttribute("greeting", "Hello World");
return "hello.jsp";
}
}
这里是web.xml
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.pluralsight.WebConfig</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Map all requests to the DispatcherServlet for handling -->
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
这是一个项目结构:
可能是应用名称打错了。请尝试 localhost:8080/EventTracker/greeting - EventTracker with Event
并尝试将 url-pattern 更改为 /*
在你的WebConfig
中你有以下
@Bean
public InternalResourceViewResolver getInternalResourceViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
return resolver;
}
您的控制器正在 returning hello.jp
。这将传递给 InternalResourceViewResolver
以解析为视图。它将创建一个 /WEB-INF/jsp/hello.jsp.jsp
的路径,然后它转发到这个路径。
首先让你的控制器 return hello
而不是 hello.jsp
。其次在 WEB-INF
目录中创建一个 jsp
目录,然后将 hello.jsp
移到那里。第三次重启。
在
中添加一个 log4j.xml 或 log4j.properties
src/main/resources
文件夹(会自动检测到)。 然后当您启动服务器时,它会通过信息日志 准确地告诉您url 映射在您的控制器中的位置。这很重要,不仅要验证映射 url,还要确保它确实被映射:
此外,在 STS/Eclipse 中,如果您:
right click on the project -> click properties -> click select 'Web Project Settings'
默认情况下,这是 url 路径的派生位置。因此,如果其中的上下文根值是:'EventTracker' 那么您的完整 url 请求将是(假设设置了 '.jsp' 后缀,正如其他人在您的解析器中指出的那样):
来自我的 1 个项目的示例 log4j.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- Appenders -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p:%d{yyyyMMdd HH:mm:ss} %t %c - %m%n"/>
</layout>
</appender>
<appender name="fileAppender" class="org.apache.log4j.FileAppender">
<param name="File" value="c:/tmp/my-app.log"/>
<param name="MaxFileSize" value="10MB"/>
<param name="MaxBackupIndex" value="50"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p:%d{yyyyMMdd HH:mm:ss} %t %c - %m%n" />
</layout>
</appender>
<!-- 3rdparty Loggers -->
<logger name="org.springframework.core">
<level value="info" />
</logger>
<logger name="org.springframework.beans">
<level value="info" />
</logger>
<logger name="org.springframework.context">
<level value="info" />
</logger>
<logger name="org.springframework.web">
<level value="debug" />
</logger>
<logger name="org.springframework.webflow">
<level value="debug" />
</logger>
<!-- Root Logger -->
<root>
<priority value="info" />
<appender-ref ref="console" />
<appender-ref ref="fileAppender"/>
</root>
</log4j:configuration>
日志信息:
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/userManagement/getUser],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.assessme.com.entity.User org.assessme.com.controller.UserManagementController.data(java.util.Locale,org.springframework.ui.Model)
我是 Spring 框架的新手。我想开发一个简单的 web-app,显示基于 url“/greeting.html”的 hello.jsp 内容。但是现在,它给了我 404 错误。我做错了什么?
这是我项目的 github 存储库(该项目是在 Eclipse STS 下创建的):https://github.com/terancet/EventTracker
这是我的 HelloController class
@Controller
public class HelloController {
@RequestMapping(value = "/greeting")
public String sayHello(Model model) {
model.addAttribute("greeting", "Hello World");
return "hello.jsp";
}
}
这里是web.xml
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.pluralsight.WebConfig</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Map all requests to the DispatcherServlet for handling -->
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
这是一个项目结构:
可能是应用名称打错了。请尝试 localhost:8080/EventTracker/greeting - EventTracker with Event
并尝试将 url-pattern 更改为 /*
在你的WebConfig
中你有以下
@Bean
public InternalResourceViewResolver getInternalResourceViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
return resolver;
}
您的控制器正在 returning hello.jp
。这将传递给 InternalResourceViewResolver
以解析为视图。它将创建一个 /WEB-INF/jsp/hello.jsp.jsp
的路径,然后它转发到这个路径。
首先让你的控制器 return hello
而不是 hello.jsp
。其次在 WEB-INF
目录中创建一个 jsp
目录,然后将 hello.jsp
移到那里。第三次重启。
在
中添加一个 log4j.xml 或 log4j.propertiessrc/main/resources
文件夹(会自动检测到)。 然后当您启动服务器时,它会通过信息日志 准确地告诉您url 映射在您的控制器中的位置。这很重要,不仅要验证映射 url,还要确保它确实被映射:
此外,在 STS/Eclipse 中,如果您:
right click on the project -> click properties -> click select 'Web Project Settings'
默认情况下,这是 url 路径的派生位置。因此,如果其中的上下文根值是:'EventTracker' 那么您的完整 url 请求将是(假设设置了 '.jsp' 后缀,正如其他人在您的解析器中指出的那样):
来自我的 1 个项目的示例 log4j.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- Appenders -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p:%d{yyyyMMdd HH:mm:ss} %t %c - %m%n"/>
</layout>
</appender>
<appender name="fileAppender" class="org.apache.log4j.FileAppender">
<param name="File" value="c:/tmp/my-app.log"/>
<param name="MaxFileSize" value="10MB"/>
<param name="MaxBackupIndex" value="50"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p:%d{yyyyMMdd HH:mm:ss} %t %c - %m%n" />
</layout>
</appender>
<!-- 3rdparty Loggers -->
<logger name="org.springframework.core">
<level value="info" />
</logger>
<logger name="org.springframework.beans">
<level value="info" />
</logger>
<logger name="org.springframework.context">
<level value="info" />
</logger>
<logger name="org.springframework.web">
<level value="debug" />
</logger>
<logger name="org.springframework.webflow">
<level value="debug" />
</logger>
<!-- Root Logger -->
<root>
<priority value="info" />
<appender-ref ref="console" />
<appender-ref ref="fileAppender"/>
</root>
</log4j:configuration>
日志信息:
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/userManagement/getUser],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.assessme.com.entity.User org.assessme.com.controller.UserManagementController.data(java.util.Locale,org.springframework.ui.Model)