[SPRING] Vaadin / Spring 애플리케이션에서 정적 리소스를 제공하는 방법은 무엇입니까?
SPRINGVaadin / Spring 애플리케이션에서 정적 리소스를 제공하는 방법은 무엇입니까?
나는 인증을위한 봄 보안 통합과 Vaadin 웹 응용 프로그램이 있습니다. Vaadin 서블릿의 설정은 매우 간단합니다.
<servlet>
<servlet-name>Vaadin Application Servlet</servlet-name>
<servlet-class>com.example.SpringApplicationServlet</servlet-class>
<init-param>
<param-name>applicationBean</param-name>
<param-value>mainApplication</param-value>
</init-param>
<init-param>
<param-name>widgetset</param-name>
<param-value>com.example.widgetset.CustomWidgetSet</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Vaadin Application Servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
서블릿은 Spring Context를 초기화하고 Vaadin 애플리케이션을 리턴한다. 또한 보안을 구성했으며 다음과 같이 사용자 정의 로그인 양식을 구성했습니다.
<servlet>
<servlet-name>login</servlet-name>
<jsp-file>/jsp/login.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>login_error</servlet-name>
<jsp-file>/jsp/loginError.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>login_error</servlet-name>
<url-pattern>/login_error</url-pattern>
</servlet-mapping>
로그인 양식은 외부 CSS로 스타일이 지정되며 일부 이미지도 있습니다. 기본적으로 이미지는 /jsp/img에 있고 스타일 시트는 /jsp/login.css에 있습니다. 따라서 WAR 구조는 다음과 같습니다.
분명히 모든 요청이 vaadin 서블릿에 매핑되기 때문에 이미지 나 CSS가로드되지 않습니다. Vaadin 서블릿에서 제공하지 않는 정적 리소스 디렉토리를 어떻게 정의 할 수 있습니까? 나는 spring mvc : resources를 시도했으나 작동하지 않았다. 도와 줘서 고마워.
안녕, 필립
나는 이것을 알아 냈다. 그것은 다소 일시적인 해결책이지만. 나는 Vaadin Application Servlet을 / app / *와 같은 것으로 매핑했다. / * (이 경우에는 동일한 서블릿을 / VAADIN / *에 매핑해야 함). 이 구성을 사용하면 webapp에서 jsp 디렉토리에 액세스 할 수 있으며 모든 것이 올바르게 작동합니다. 이것이 작동하지 않았기 때문에 전체 Spring 리소스 설정을 삭제했습니다.
그래서 한 번 더, 나는 아직도이 솔루션에 꽤 안락한 편이고, 다른 방법으로 구성된 나의 리소스를 갖고 싶지만, 클라이언트는 행복하다. :) 누구든지 올바른 해결책을 가지고 있다면 그것을 읽어 주셔서 감사합니다.
해결법
-
==============================
1.URL 재 작성 필터를 사용하여 URL 맵핑을보다 잘 제어하십시오.
URL 재 작성 필터를 사용하여 URL 맵핑을보다 잘 제어하십시오.
<filter> <filter-name>UrlRewriteFilter</filter-name> <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> </filter> <filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
그런 다음 Vaadin 응용 프로그램을 / vaadin에 매핑하고 urlrewrite.xml에 url 매핑을 구성합니다
<rule> <from>/styles/**</from> <to last="true">/styles/$1</to> </rule> <rule> <from>/images/**</from> <to last="true">/images/$1</to> </rule> <rule> <from>/**</from> <to>/vaadin/$1</to> </rule> <outbound-rule> <from>/vaadin/**</from> <to>/$1</to> </outbound-rule>
편집하다 다른 옵션은 / VAADIN / 디렉토리에 정적 파일을 넣는 것입니다.
-
==============================
2.나는 이것을 알아 냈다. 그것은 다소 일시적인 해결책이지만. 나는 Vaadin Application Servlet을 / app / *와 같은 것으로 매핑했다. / * (이 경우에는 동일한 서블릿을 / VAADIN / *에 매핑해야 함). 이 구성을 사용하면 webapp에서 jsp 디렉토리에 액세스 할 수 있으며 모든 것이 올바르게 작동합니다. 이것이 작동하지 않았기 때문에 전체 Spring 리소스 설정을 삭제했습니다.
나는 이것을 알아 냈다. 그것은 다소 일시적인 해결책이지만. 나는 Vaadin Application Servlet을 / app / *와 같은 것으로 매핑했다. / * (이 경우에는 동일한 서블릿을 / VAADIN / *에 매핑해야 함). 이 구성을 사용하면 webapp에서 jsp 디렉토리에 액세스 할 수 있으며 모든 것이 올바르게 작동합니다. 이것이 작동하지 않았기 때문에 전체 Spring 리소스 설정을 삭제했습니다.
그래서 한번 더, 나는 아직도이 솔루션에 꽤 편하지 않고 오히려 내 리소스를 다른 방법으로 구성 하겠지만 c
-
==============================
3.늦어 졌을 지 모르지만 vaadin / * 매핑을 사용하는 동안 여전히 정적 인 컨텐츠를 제공하는 데 문제가있는 사람은 아파치의 기본 서블릿 org.apache.catalina.servlets.DefaultServlet을 사용하여 해결책을 찾았습니다. 따라서 web.xml은 다음과 같이됩니다.
늦어 졌을 지 모르지만 vaadin / * 매핑을 사용하는 동안 여전히 정적 인 컨텐츠를 제공하는 데 문제가있는 사람은 아파치의 기본 서블릿 org.apache.catalina.servlets.DefaultServlet을 사용하여 해결책을 찾았습니다. 따라서 web.xml은 다음과 같이됩니다.
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="3.0" 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/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <servlet> <servlet-name>myservlet</servlet-name> <servlet-class>com.vaadin.server.VaadinServlet</servlet-class> <init-param> <param-name>UI</param-name> <param-value>com.ex.myprj.MyUI</param-value> </init-param> <!-- If not using the default widget set--> <init-param> <param-name>widgetset</param-name> <param-value>com.ex.myprj.AppWidgetSet</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>myservlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <servlet> <servlet-name>Static content Servlet</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Static content Servlet</servlet-name> <url-pattern>/customer/*</url-pattern> </servlet-mapping> </web-app>
따라서 위의 예제에서 / *에 vaadin이 있음에도 불구하고 / customer / * 부분은 DefaultServlet에 의해 정적 컨텐츠로 제공됩니다
from https://stackoverflow.com/questions/9292439/how-to-serve-static-resources-from-a-vaadin-spring-application by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 컬링 경로를 통해 Amazon S3에 업로드 (0) | 2019.04.28 |
---|---|
[SPRING] 최대 절전 모드와 @ 트랜잭션을위한 스프링 데이터 소스 설정하기 (0) | 2019.04.28 |
[SPRING] Spring 부팅시 CORS를 Spring 보안 레벨에서 사용하는 방법 [닫기] (0) | 2019.04.28 |
[SPRING] Spring MVC에서 HTML을 조건부로 렌더링 (0) | 2019.04.28 |
[SPRING] Maven GAE 원형이 작동하지 않습니다. (0) | 2019.04.28 |