복붙노트

[SPRING] Thymeleaf와 JSP 모두 사용하기

SPRING

Thymeleaf와 JSP 모두 사용하기

나는 JSP + JSTL을 사용하고 있었지만 C : if, c : choose를 지루하다.

따라서, JSP와 Thymeleaf 모두로 JSP 페이지를 렌더링하고 싶습니다. 가능한 한 빨리 모든 JSTL을 제거 할 계획입니다. 스프링 MVC 프레임 워크를 사용하고 있습니다.

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/pages/" />
    <property name="suffix" value=".jsp" />
    <property name="order" value="1" />
</bean>
<!-- Thymeleaf -->
<bean id="templateResolver" class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
    <property name="prefix" value="/WEB-INF/pages/" />
    <property name="suffix" value=".html" />
    <property name="templateMode" value="HTML5" />
</bean>
<bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
    <property name="templateResolver" ref="templateResolver" />
</bean>
<bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
    <property name="templateEngine" ref="templateEngine" />
    <property name="order" value="2" />
</bean> 

내 컨트롤러에서, 난 그냥 확장없이 jsp를 반환합니다.

return "folder/page";

내 JSP 페이지를 먼저 JSP 해석기로 렌더링 한 다음 Thymeleaf 해석기로 렌더링 할 수 있습니까? 그렇다면 어떻게?

JSP와 Thymeleaf를 연결하는 것은 매우 복잡해 보입니다. 따라서 JSP 파일 용 내부 분석기와 HTML 파일 용 Thymeleaf 템플릿 분석기를 사용하고 싶습니다. 내가 어떻게 해?

해결법

  1. ==============================

    1.Thymeleaf 포럼의이 게시물에 따르면 두 가지 해결책이 있습니다.

    Thymeleaf 포럼의이 게시물에 따르면 두 가지 해결책이 있습니다.

    첫 번째 해결책 :

    bean 선언 ()에서 suffix 속성을 제거하고 귀하의 컨트롤러, 예 : :

    @RequestMapping("/view1")
    public String thymeleafView(){
        return "mythymeleafview.html";
    }
    
    @RequestMapping("/view2")
    public String jspView(){
        return "myjspview.html";
    }
    

    두 번째 해결책 :

    resolver에 viewNames 속성을 추가합니다. 값은 확장자에 따라 뷰가 포함 된 폴더의 이름입니다. 따라서 JSP 파일 용 폴더와 HTML (thymeleaf) 파일 용 폴더가 있습니다. :

    구성

    <bean id="templateResolver" class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
         <property name="prefix" value="/WEB-INF/views/" />
         <property name="suffix" value=".html" />
         <property name="viewNames" value="thymeleaf/*" />
         <property name="templateMode" value="HTML5" />
    </bean>
    
    <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
         <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
         <property name="prefix" value="/WEB-INF/views/" />
         <property name="viewNames" value="jsp/*" />
         <property name="suffix" value=".jsp" />
    </bean>
    

    제어 장치

    @RequestMapping("/view1") 
    public String thymeleafView() { 
         return "thymeleaf/mythymeleafview"; 
    } 
    
    @RequestMapping("/view2") 
    public String jspView() { 
         return "jsp/myjspview"; 
    }
    

    프로젝트 폴더

    WEB-INF/views/jsp/myjspview.jsp
    WEB-INF/views/thymeleaf/mythymeleafview.jsp
    

    두 가지 솔루션 모두 작동하지만 몇 가지 제약이 있습니다. JSP 또는 Thymeleaf로 해결할 것인지 여부를 지정해야합니다.

    Thymeleaf 또는 Thymeleaf로 해결할 수없는 경우 JSP로보기를 해결하려고하는 JSP 및 Thymeleaf를 체인화하는 "완벽한"솔루션은 불가능합니다. Daniel Fernández (Thymeleaf 팀)는 왜이 동일한 게시물에서 :

  2. ==============================

    2.또는 두 개의 서블릿이 정상적으로 작동합니다. 핵심은 서블릿 구성을 최소한으로 유지하고 데이터베이스 및 기타 서비스 용 appConfig.xml을 포함하는 것입니다 (이로 인해 구성 중복이 방지됩니다)

    또는 두 개의 서블릿이 정상적으로 작동합니다. 핵심은 서블릿 구성을 최소한으로 유지하고 데이터베이스 및 기타 서비스 용 appConfig.xml을 포함하는 것입니다 (이로 인해 구성 중복이 방지됩니다)

    웹 :

        Spring MVC 애플리케이션            AssessmentAdmin                 org.springframework.web.servlet.DispatcherServlet               1              AssessmentAdmin        / xz / *                    AssessmentAdminTL                 org.springframework.web.servlet.DispatcherServlet               1                AssessmentAdminTL        / xztl / *        ........

    JSP 용 서블릿 :

    <콩 class = "org.springframework.web.servlet.view.InternalResourceViewResolver"> -> ..........

    농노

                                                                                     

    그것을 시도하고 잘 작동합니다.

  3. ==============================

    3.다음은 @Igd 응답을 기반으로 한 대답입니다.

    다음은 @Igd 응답을 기반으로 한 대답입니다.

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/" />
        <property name="viewNames" value="*.jsp" />
    </bean>
    <!-- Thymeleaf -->
    <bean id="templateResolver" class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
        <property name="prefix" value="/WEB-INF/pages/" />
        <property name="templateMode" value="HTML5" />
    </bean>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewNames" value="redirect*" />
    </bean>
    <bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
        <property name="templateResolver" ref="templateResolver" />
    </bean>
    <bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
        <property name="templateEngine" ref="templateEngine" />
        <property name="viewNames" value="*.html" />
    </bean> 
    

    그리고 나는 이것을 매핑에 사용합니다 :

    @RequestMapping("/view1")
    public String thymeleafView(){
        return "mythymeleafview.html";
    }
    
    @RequestMapping("/view2")
    public String jspView(){
        return "myjspview.jsp";
    }
    
  4. ==============================

    4.@ Athanor의 대답에 따르면, 우리는 또 다른 선택을 할 수 있습니다.

    @ Athanor의 대답에 따르면, 우리는 또 다른 선택을 할 수 있습니다.

    우리는 property "viewNames"를 사용하여 템플릿을 선택하는 resolver를 제어합니다.

    <!-- jsp -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/" />
        <property name="suffix" value=".jsp" />
        <property name="order" value="1" />
        <property name="viewNames" value="*admin/*,*packer/*,*courier/*,/" />
    </bean>
    <!-- thymeleaf -->
    <bean id="templateResolver" class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
        <property name="prefix" value="/" />
        <property name="suffix" value=".html" />
        <property name="templateMode" value="HTML5" />
        <property name="cacheable" value="false"/>
    </bean>
    <bean id="templateEngine" class="org.thymeleaf.spring3.SpringTemplateEngine">
        <property name="templateResolver" ref="templateResolver" />
    </bean>
    <bean class="org.thymeleaf.spring3.view.ThymeleafViewResolver">
        <property name="characterEncoding" value="UTF-8"/>
        <property name="templateEngine" ref="templateEngine" />
        <property name="viewNames" value="*thymeleaf/*" />
        <property name="order" value="2" />
    </bean>
    

    및 제어기

    @RequestMapping(value="/test")
    public ModelAndView dboxPrint(Model model){
        ModelAndView modelAndView = new ModelAndView("thymeleaf/dbox_print");
    
        return modelAndView;
    }
    
  5. from https://stackoverflow.com/questions/28480223/using-both-thymeleaf-and-jsp by cc-by-sa and MIT license