2015-06-10 56 views
0

我正在學習使用Eclipse IDE中的spring工具套件的spring mvc。我的基礎包是org.springTest.test,並且我在view文件夾下創建了兩個jsp頁面index.jsp和home.jsp。我試圖使用home.jsp作爲我的歡迎頁面。當我嘗試訪問http://localhost:8081/test/http://localhost:8081/test/index.jsp時,它總是給出index.jsp頁面。我也嘗試將主頁添加到歡迎文件列表。但是相同的結果。請查看web.xml和控制器類。如何修復這個?。在Spring MVC中處理一個控制器的兩個URL模式

HomeController.java

package org.springTest.test; 

import java.text.DateFormat; 
import java.util.Date; 
import java.util.Locale; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 


@Controller 
public class HomeController { 


private static final Logger logger = LoggerFactory 
     .getLogger(HomeController.class); 


@RequestMapping(value = "/", method = RequestMethod.GET) 
public String home(Locale locale, Model model) { 
    logger.info("Welcome home! The client locale is {}.", locale); 

    Date date = new Date(); 
    DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, 
      DateFormat.LONG, locale); 

    String formattedDate = dateFormat.format(date); 

    model.addAttribute("serverTime", formattedDate); 

    return "home"; 
} 

@RequestMapping(value = "index", method = RequestMethod.GET) 
public String home1(Locale locale, Model model) { 
    logger.info("Welcome index! The client locale is {}.", locale); 

    Date date = new Date(); 
    DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, 
      DateFormat.LONG, locale); 

    String formattedDate = dateFormat.format(date); 

    model.addAttribute("serverTime", formattedDate); 

    return "index"; 
} 
} 

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee        

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/spring/root-context.xml</param-value> 
</context-param> 

<!-- Creates the Spring Container shared by all Servlets and Filters --> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<!-- Processes application requests --> 
<servlet> 
    <servlet-name>appServlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>appServlet</servlet-name> 
    <url-pattern>/</url-pattern> 
    <url-pattern>/index.jsp</url-pattern> 
</servlet-mapping> 

</web-app> 
+0

把調試,看看是否請求到達您的控制器。同時移植你的'servlet-context.xml'。你使用的是什麼版本的servlet容器? – minion

回答

0

的彈簧webmvc你需要的,如果尚未註冊一個 「InternalResourceViewResolver這個」 豆。如果這已經完成了,你可以請求配置嗎?

internalResourceViewResolver用於將您的控制器方法的返回碼「home」和「index」與cetrain視圖(jsp)相匹配。

資源視圖解析器可以配置是這樣的:

@Bean 
public InternalResourceViewResolver jspViewResolver() { 
    InternalResourceViewResolver bean = new InternalResourceViewResolver(); 
    bean.setPrefix("/WEB-INF/views/"); 
    bean.setSuffix(".jsp"); 
    return bean; 
} 

這將需要由控制器返回的字符串名稱;例如「home」並追加「.jsp」並查找「/WEB.INF/views/home.jsp」。 如果找不到,則會拋出錯誤或者welcome-jsp被解析。

我附加了servlet-context.xml和控制檯輸出。

的servlet-context.xml的

<beans:bean 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <beans:property name="prefix" value="/WEB-INF/views/" /> 
    <beans:property name="suffix" value=".jsp" /> 
    </beans:bean> 

<context:component-scan base-package="org.springTest.test" /> 

控制檯的最後幾行了把

INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - 
    Mapped "{[/],methods=[GET],params=[],headers=[],consumes=[],produces=   [],custom=[]}" 
    onto public java.lang.String org.springTest.test.HomeController.home 
    (java.util.Locale,org.springframework.ui.Model) 
INFO :  org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/index],methods=[GET],params=[],headers=[],consumes= [],produces=[],custom=[]}"onto public java.lang.String  org.springTest.test.HomeController.home1(java.util.Locale,org.springframework.ui.Model) 
INFO : org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - 
    Mapped URL path [/resources/**] onto handler 
    'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0' 
INFO : org.springframework.web.servlet.DispatcherServlet - FrameworkServlet 'appServlet': 
    initialization completed in 544 ms 
INFO : org.springTest.test.HomeController - Welcome index! The client  locale is en_US. 
+0

我的猜測是它甚至沒有到達他的控制器。他沒有得到這樣的404。 – minion

+0

是的,你可能是對的。 您可以發佈此請求的日誌,看看您的控制器的日誌消息是否在那裏? – NeoP5

+0

好的,感謝您的日誌和額外的配置。這對我來說很好。你可以嘗試的一件事是將home1()映射到「/ index」而不是「index」。你在調用url「http:// localhost:8081/test/index」還是「http:// localhost:8081/test/index.jsp」? – NeoP5

相關問題