【发布时间】:2010-12-07 06:25:45
【问题描述】:
我刚开始使用 Spring MVC 尝试创建一个新项目,遇到了一个似乎没有任何手册或教程可以帮助解决的问题...
我已经建立了一个没有逻辑的简单应用程序,只是试图正确配置 Spring。控制器只是返回要显示的视图的名称,但视图解析器没有渲染jsp,并返回404错误....
非常感谢任何帮助。
我的 web.xml 是:
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>openstats</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>openstats</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<display-name>OpenStats API Server</display-name>
</web-app>
一个我的 openstats-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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<context:component-scan base-package="org.openstats.api.controller"/>
<!-- Enable to request mappings PER METHOD -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
<!-- Enable annotated POJO @Controller -->
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
<!-- Define the view resolver to use jsp files within the jsp folder -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"><value>org.springframework.web.servlet.view.JstlView</value></property>
<property name="prefix"><value>/jsp/</value></property>
<property name="suffix"><value>.jsp</value></property>
</bean>
</beans>
控制器本身没有任何逻辑,它很简单:
@Controller
public class ProductController {
@RequestMapping(value = "/products.do", method = RequestMethod.GET)
public ModelAndView listProducts(HttpServletRequest request) {
ModelAndView model = new ModelAndView("index");
return model;
}
}
到达控制器,问题是尝试渲染时...
我在调试中设置了 log4j,这是我得到的一部分:
02:08:19,702 调试 DispatcherServlet:1094 - 测试处理程序适配器 [org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter@397b6074] 02:08:19,803 调试 HandlerMethodInvoker:134 - 调用 请求处理方法:public org.springframework.web.servlet.ModelAndView org.openstats.api.controller.ProductController.listProducts(javax.servlet.http.HttpServletRequest) 02:08:19,833 调试 DefaultListableBeanFactory:1367 - 在 bean 上调用 afterPropertiesSet() 名称为“索引” 02:08:19,876 调试 内部资源视图解析器:81 - 缓存视图 [索引] 02:08:19,877 调试 DispatcherServlet:1181 - 渲染 看法 [org.springframework.web.servlet.view.JstlView: 名称'索引'; URL [/jsp/index.jsp]] 中 带名称的 DispatcherServlet 'openstats' 02:08:19,877 调试 JstlView:240 - 渲染视图 使用模型 {} 和静态命名“索引” 属性 {} 02:08:19,923 调试 JstlView:234 - 转发到资源 [/jsp/index.jsp] 在 InternalResourceView '索引' 02:08:19,926 调试 DispatcherServlet:955 - 带名称的 DispatcherServlet 'openstats' 确定 Last-Modified [/api-server/jsp/index.jsp] 的值 02:08:19,927 调试 DispatcherServlet:1054 - 测试 处理程序图 [org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping@440c4cee] 在具有名称的 DispatcherServlet 中 'openstats' 02:08:19,928 调试 DefaultAnnotationHandlerMapping:179 - 找不到处理程序映射 [/jsp/index.jsp] 02:08:19,929 调试 DispatcherServlet:962 - 没有处理程序 在 getLastModified 02:08:19,937 中找到 调试 DispatcherServlet:781 - 带名称的 DispatcherServlet 'openstats' 处理请求 [/api-server/jsp/index.jsp] 02:08:19,938 调试 DispatcherServlet:843 - 绑定请求 线程上下文:GET /api-server/products.do HTTP/1.1
我的 jsp 文件夹就在“webapp”中,并且 index.jsp 文件存在。
提前致谢。
【问题讨论】:
-
这里奇怪的是,一旦 InternalResourceViewResolver 找到正确的 JSP,DispatcherServlet 就会开始将其视为请求,并寻找一个控制器来处理 URN /api-server/jsp/index.jsp 可以你发布的JSP 的内容?是否有任何其他配置可能导致此行为?
标签: java spring-mvc