[SPRING] Spring MVC ViewResolver가 HTML 파일에 매핑되지 않는다.
SPRINGSpring MVC ViewResolver가 HTML 파일에 매핑되지 않는다.
봄 mvc .html보기 파일을 해결할 수 없습니다.
다음과 같은보기 폴더 구조가 있습니다.
WEB-INF
`-views
|- home.jsp
`- home.html
메시지를 출력하는 간단한 hello world 컨트롤러 메소드가 있습니다. 뷰 이름 "home"을 리턴합니다. home.jsp 파일을 가지고 있지만 대신 home.html을 사용하십시오.
<!-- Working servlet mapping -->
<servlet-mapping>
<servlet-name>spaceShips</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- working servlet context -->
<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>
우주선 / 집에 충돌하면 컨트롤러에서 안녕하세요 세계 메시지를 인쇄하고 문제점없이 home.jsp 뷰.
문제는 접미사를 .html로 변경하는 경우입니다.
접미어를 변경하고 / home으로 이동 한 후 컨트롤러는 메시지가 표시되지만 브라우저에서 404 오류가 표시되고 콘솔에서 다음 오류가 표시됩니다. 경고 : URI가있는 HTTP 요청에 대한 매핑이 없습니다 [/spaceships/WEB-INF/views/home.html]
명확히하기 :
<!-- not working with .html -->
<servlet-mapping>
<servlet-name>spaceShips</servlet-name>
<!-- I have tried /* here as well without success -->
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- not working with .html-->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="WEB-INF/views/" />
<beans:property name="suffix" value=".html" />
</beans:bean>
나는 폭발 한 전쟁 폴더를 조사해 두 가정 파일이 모두 있다는 것을 확인할 수 있습니다.
누구도 이런 식으로 뭔가를 만났습니까?
콘솔 메시지의 마지막 덩어리 :
INFO: Server startup in 5256 ms
Hello, World!
Jul 27, 2014 12:52:01 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/spaceships/WEB-INF/views/home.html] in DispatcherServlet with name 'spaceShips'
읽어 주셔서 감사합니다.
=========== 해결책 ============
다음 (못생긴) 구성으로 문제가 해결되었습니다. 이 문제를 해결할 수있는 방법이 있지만 동일한 문제가 발생하는 경우이를 해결할 수 있습니다.
폴더 구조 :
WEB-INF
`-static
|-html
`-home.html
|-css
`-img
컨트롤러 방법 :
@RequestMapping(value = "/home")
public String goHome() {
System.out.println("lolololololol");
return "static/html/home";
}
봄 설정 :
<resources mapping="/static/**" location="/WEB-INF/static/" />
<beans:bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="" />
<beans:property name="suffix" value=".html" />
</beans:bean>
해결법
-
==============================
1.Spring mvc에서 html 파일을 매핑하기 위해 이것을 확인하십시오 (세부 단계는 Answer로 제공됩니다) :
Spring mvc에서 html 파일을 매핑하기 위해 이것을 확인하십시오 (세부 단계는 Answer로 제공됩니다) :
어느 spring view resolver가 angularjs와 잘 맞습니까?
단순함 :
봄에 정적 리소스 (html, css, img, js)를 사용하려면 다음과 같은 디렉토리 구조를 사용하십시오.
src/ package/ LayoutController.java WebContent/ WEB-INF/ static/ html/ layout.html images/ image.jpg css/ test.css js/ main.js web.xml springmvc-servlet.xml @Controller public class LayoutController { @RequestMapping("/staticPage") public String getIndexPage() { return "layout.htm"; } } <!-- in spring config file --> <mvc:resources mapping="/static/**" location="/WEB-INF/static/" />
layout.html
<h1>Page with image</h1> <img src="/static/img/image.jpg"/>
-
==============================
2.이것은 보통 * .jsp 스타일의 uri 패턴이 서블릿 컨테이너에 의해 처리되고이 특정 인스턴스에서 * .html이 컨테이너에 의해 처리되지 않고 경로가 이러한 확장을 렌더링하는 방법을 모르는 Spring MVC에 위임되기 때문입니다 .
이것은 보통 * .jsp 스타일의 uri 패턴이 서블릿 컨테이너에 의해 처리되고이 특정 인스턴스에서 * .html이 컨테이너에 의해 처리되지 않고 경로가 이러한 확장을 렌더링하는 방법을 모르는 Spring MVC에 위임되기 때문입니다 .
예를 들어, tomcat을 사용하는 경우 conf / web.xml 파일에서 다음 항목을 볼 수 있습니다.
<servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jsp</url-pattern> <url-pattern>*.jspx</url-pattern> </servlet-mapping>
즉 jsp servlet은 * .jsp, * .jspx 확장자를 처리합니다.
따라서이 링크 에서처럼 jsp servlet이 처리 할 수 있도록 추가 할 .html을 추가하는 것이 잠재적 인 해결책입니다.
JSP로 .html 파일 사용
또는 .jsp로 확장자를 남겨두고 컨트롤러 패턴으로 .html을 대신 사용 하시겠습니까?
-
==============================
3.
I was also facing the same issue and tried various solutions to load the AngularJS html file using Spring configuration. After applying below steps it got resolved. Step-1 in server's web.xml commemt these two lines <!-- <mime-mapping> <extension>htm</extension> <mime-type>text/html</mime-type> </mime-mapping>--> <!-- <mime-mapping> <extension>html</extension> <mime-type>text/html</mime-type> </mime-mapping> --> Step-2 enter following code in application's web xml <servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping> Step-3 create a static controller class @Controller public class StatisController { @RequestMapping("/landingPage") public String getIndexPage() { return "CompanyInfo"; } } Step-4 in the Spring configuration file change the suffix to .htm <property name="suffix"> <value>.htm</value> </property> Step-5 Rename page as .htm file and store it in WEB-INF and build/start the server localhost:8080/.../landingPage
-
==============================
4.
//Finally a working solution both html and jsp view together ------------------------------------------------------------------------ public class ChainableInternalResourceViewResolver extends InternalResourceViewResolver { private static Log logger = LogFactory.getLogger(ChainableInternalResourceViewResolver.class); /** * */ protected AbstractUrlBasedView buildView(String viewName) throws Exception { logger.entering("buildView"); String url = getPrefix() + viewName + getSuffix(); InputStream stream = getServletContext().getResourceAsStream(url); if (stream == null) { logger.log(Log.DEBUG,"-----!!!------resource not found-------!!!-----"+getPrefix() + viewName + getSuffix()); return new NonExistentView(); } else { logger.log(Log.DEBUG,"----***-------resource found-------***-----"+getPrefix() + viewName + getSuffix()); stream.close(); } return super.buildView(viewName); } /** * * @author * */ private static class NonExistentView extends AbstractUrlBasedView { //private static Log logger = LogFactory.getLogger(NonExistentView.class); protected boolean isUrlRequired() { //logger.entering("isUrlRequired"); return false; } public boolean checkResource(Locale locale) throws Exception { //logger.entering("checkResource"); return false; } protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception { //logger.entering("renderMergedOutputModel"); // Purposely empty, it should never get called } } } ---------------------------------------------------------------------------- @EnableWebMvc @Configuration @ComponentScan({ "com.*" }) public class ApplicationConfig extends WebMvcConfigurerAdapter { //Be careful while changing here private static final String VIEW_DIR_HTML = "/WEB-INF/static/"; private static final String VIEW_EXTN_HTML = ".html"; private static final String VIEW_DIR_JSP = "/WEB-INF/"; private static final String VIEW_EXTN_JSP = ".jsp"; private static final String RESOURCE_URL_PATTERN_1 = "/resources/**"; private static final String RESOURCE_URL_PATTERN_2 = "/WEB-INF/static/**"; private static final String RESOURCE_PATH_1 = "/resources/"; private static final String RESOURCE_PATH_2 = "/WEB-INF/static/"; private static Logger logger = LoggerFactory.getLogger(ApplicationConfig.class); /** * * @return */ @Bean public ViewResolver htmlViewResolver() { logger.info(" htmlViewResolver method "); InternalResourceViewResolver viewResolver= new ChainableInternalResourceViewResolver(); viewResolver.setPrefix(VIEW_DIR_HTML); viewResolver.setSuffix(VIEW_EXTN_HTML); viewResolver.setOrder(0); return viewResolver; } @Bean public ViewResolver jspViewResolver() { logger.info(" jspViewResolver method "); InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix(VIEW_DIR_JSP); viewResolver.setSuffix(VIEW_EXTN_JSP); viewResolver.setOrder(1); return viewResolver; } -------------------------------------------------------------------------------- return "pages/login"; // for login.html resides inside /WEB-INF/static/pages/login.html return "jsp/login"; // for login.jsp resides inside /WEB-INF/jsp/login.jsp
from https://stackoverflow.com/questions/24980839/spring-mvc-viewresolver-not-mapping-to-html-files by cc-by-sa and MIT license