簡體   English   中英

Spring MVC-無法呈現JSP

[英]Spring MVC - jsp not rendering

我只是從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 DEBUG DispatcherServlet:1094-測試處理程序適配器[org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter@397b6074] 02:08:19,803 DEBUG HandlerMethodInvoker:134-調用請求處理程序方法:公共org.springframework。 web.servlet.ModelAndView org.openstats.api.controller.ProductController.listProducts(javax.servlet.http.HttpServletRequest)02:08:19,833 DEBUG DefaultListableBeanFactory:1367-在名稱為'index'的bean上調用afterPropertiesSet()02:08: 19,876 DEBUG InternalResourceViewResolver:81-緩存視圖[index] 02:08:19,877 DEBUG DispatcherServlet:1181-呈現視圖[org.springframework.web.servlet.view.JstlView:名稱'index'; 名稱為'openstats'的DispatcherServlet中的URL [/jsp/index.jsp]] 02:08:19,877 DEBUG JstlView:240-渲染名稱為'index'且具有模型{}和靜態屬性{}的視圖02:08:19,923 DEBUG JstlView :234-轉發到InternalResourceView'索引'中的資源[/jsp/index.jsp] 02:08:19,926調試DispatcherServlet:955-名稱為'openstats'的DispatcherServlet為[/ api-server / jsp / index確定最后修改的值.jsp] 02:08:19,927 DEBUG DispatcherServlet:1054-在DispatcherServlet中測試處理程序映射[org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping@440c4cee] 02:08:19,928 DEBUG DefaultAnnotationHandlerMapping:179-未找到[/jsp/index.jsp]的處理程序映射02:08:19,929 DEBUG DispatcherServlet:962-在getLastModified 02:08:19,937中未找到處理程序DEBUG DispatcherServlet:781-名稱為[/ api的名稱為'openstats'的DispatcherServlet處理請求-server / jsp / index.jsp] 02:08:19,938 DEBUG DispatcherServlet:843-綁定請求上下文 t到線程:GET /api-server/products.do HTTP / 1.1

我的jsp文件夾就在“ webapp”內,並且存在index.jsp文件。

提前致謝。

我確實對Spring 3.x有同樣的問題。 到目前為止有什么進展嗎?

編輯:我自己弄清楚了:-)我使用以下servletmapping:

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

將url模式編輯為* .do可解決不呈現JSP的問題。 但這留下了問題,如何使用您的url模式。

您的web.xml是否在welcome-file-list中定義index.jsp,如果這樣,它可能會被覆蓋。 嘗試將jsp名稱更改為products.jsp。

例如

@Controller
public class ProductController {

    @RequestMapping(value = "/products.do", method = RequestMethod.GET)
    public String handleRequest() {
          return "products";
    }
}

.jsp和.do不會沖突嗎? 由於文件不能同時以.jsp和.do結尾。因此它將永遠無法解析...因此您應該擺脫.jsp或將網址格式更改為/ *

改變中

import org.springframework.web.servlet.ModelAndView;

通過

import org.springframework.web.portlet.ModelAndView;

就我而言。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM