2017-02-14 56 views
0

我在網站上搜索過,沒有任何建議工作! 我試着做一個spring-mvc和angularJS應用程序;這是我的項目結構:春天mvc無法訪問.html文件

angularState 
-src/main/java/it.controller.DefaultController.java 
-src/main/webapp 
--index.jsp 
--WEB-INF 
---dispatcher-servlet.xml 
---web.xml 
---static 
----default.html 

所以在我的web.xml我有:

<servlet> 
    <servlet-name>dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/dispatcher-servlet.xml 
    </param-value> 
</context-param> 
在調度-servlet.xml中

<context:component-scan base-package="it.controller"></context:component-scan> 
<mvc:annotation-driven /> 
<context:annotation-config /> 
<mvc:resources location="/WEB-INF/static/" mapping="/static/**" /> 
在index.jsp的

<% response.sendRedirect("default"); %> 

然後在控制器中:

@Controller 
@RequestMapping("/default") 
public class DefaultController { 
public String showDefault(){ 
    return "/static/default.html"; 
} 
} 

我一直使用jsp,一切都很好;現在我已經嘗試了網站的每一個問題: 我試過 -mvc:默認servlet處理程序 -InternalResourceViewResolver帶前綴「/ WEB-INF/static」和後綴「.html」或者甚至後綴void -InternalResourceViewResolver void和控制器方法返回「/WEB-INF/static/default.html」 什麼都沒有! 沒有顯示default.html。爲什麼這個.html文件太複雜了!

+0

如何配置您的視圖?提供上下文的這一部分xml – Andremoniy

+1

嘗試一件事,將'/'更改爲'/app/*',並在URL中追加應用程序。讓我知道是否有幫助。 – NewUser

+0

你有沒有試圖改變你的@RequestMapping?比如'@RequestMapping(value =「/ default」)' – Mike

回答

0

對於任何誰會谷歌,在這裏的答案。 這個問題很簡單:我唯一錯的是控制器方法;原來的控制器方法是:

@Controller 
@RequestMapping("/default") 
public class DefaultController { 
    public String showDefault(){ 
     return "/static/default.html"; 
    } 
} 

正確的版本必須是:

@Controller 
@RequestMapping("/default") 
public class DefaultController { 
@RequestMapping(method=RequestMethod.GET) 
    public String showDefault(){ 
     return "/static/default.html"; 
    } 
} 

,因爲每一頁必須有一個可以訪問,都不止,主頁! 由於該方法缺少@RequestMapping,因此我嘗試的每個配置都給了我錯誤的.html文件。正如我sayd,.html文件只需要

<mvc:resources location="/WEB-INF/static/" mapping="/static/**" /> 

進行配置,因爲他們是靜態的資源,他們並不需要在servlet的幫助。希望這會幫助某人,感謝所有嘗試過的人。

1

這是因爲通常* .jsp風格的uri模式是由servlet容器處理的,在您的情況下* .html不是由容器處理,而是將該路徑委託給Spring MVC,該MVC不知道如何使這些擴展 作爲

<servlet-mapping> 
    <servlet-name>jsp</servlet-name> 
    <url-pattern>*.jsp</url-pattern> 
    <url-pattern>*.html</url-pattern> 
</servlet-mapping> 

或者

內容的談判視圖解析器也可代替的InternalResourceViewResolver的使用速戰速決,你可以試試下面的代碼中的conf/web.xml文件(我猜你可能會使用這個)根據在「mediaType」中聲明的文件擴展名返回一個合適的視圖s「財產) 例子

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
      <property name="order" value="1" /> 
      <property name="mediaTypes"> 
      <map> 
       <entry key="json" value="application/json" /> 
       <entry key="html" value="text/html"/> 
      </map> 
      </property> 
+0

你的第一個解決方案給了我「在帶有名稱的DispatcherServlet中的HTTP請求中找不到具有URI [/ angularState/default]的映射'dispatcher'「 你的第二個解決方案給了我mediaTypes的setter錯誤,所以我使用以下內容進行調整: http://stackoverflow.com/questions/37304055/contentnegotiatingviewresolver-mediatypes-error-after-upgrading-to - 彈簧-4-2 然後它給了我第一次嘗試相同的錯誤。 – Fausto

+0

你的錯誤表明的DispatcherServlet試圖處理also.Below需要改變爲html的頁面的請求的 調度 /* /.controllers 。嘗試使用不同的擴展名調用控制器,如.controllers,並更新servlet映射 –