2012-02-15 3 views
3

인증 용 봄 보안 통합 기능이있는 Vaadin 웹 응용 프로그램이 있습니다. angel이라는 서블릿의 구성은 매우 간단하다 :Vaadin/Spring 애플리케이션에서 정적 리소스를 제공하는 방법은 무엇입니까?

<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> 

서블릿은 스프링 컨텍스트를 초기화하고 angel이라는 응용 프로그램을 반환합니다. 또한 다음과 같이 구성된 사용자 정의 로그인 양식을 그에 대한 보안을 구성하고있는 한 :

<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에 있습니다.

이미지 나 CSS를 어느 쪽이로드되는

  • /JSP
  • /META-INF
  • /angel이라는
  • /WEB-INF 때문에 :처럼 그래서 WAR 구조가 보인다 분명히 모든 요청은 vaadin 서블릿에 매핑됩니다. 어떻게 Vaadin 서블릿에서 제공하지 않는 정적 리소스 디렉토리를 정의 할 수 있습니까? 나는 spring mvc : resources를 시도했으나 작동하지 않았다. 도와 줘서 고마워.

    안녕, 필립은

    나는 이것을 알아 낸. 그것은 다소 일시적인 해결책이지만. 나는 Vaadin 응용 프로그램 서블릿을/app/*와 같은 것으로 매핑했습니다./* (이 경우에는 동일한 서블릿을/VAADIN/*에 매핑해야 함을 기억하십시오). 이 구성을 사용하면 webapp에서 jsp 디렉토리에 액세스 할 수 있으며 모든 것이 올바르게 작동합니다. 이것이 작동하지 않았기 때문에 Spring 리소스 설정 전체를 삭제했습니다.

    한 번 더, 나는 아직도이 솔루션에 익숙하지 않고 차라리 내 리소스 세트를 다른 방법으로 구성 하겠지만 클라이언트는 행복합니다. :) 누구든지 올바른 해결책을 가지고 있다면 그것을 읽어 주셔서 감사합니다.

+0

'SpringApplicationServlet'의 확장 클래스는 무엇입니까? –

+0

확장 com.vaadin.terminal.gwt.server.AbstractApplicationServlet –

+0

URL 매핑 ([Servlet 매핑/vs /*](http://stackoverflow.com/a/4140659/267197)) 또는 정적 매핑 리소스 ([정적 컨텐츠를 제공하는 서블릿] (http://stackoverflow.com/a/3582215/267197)). –

답변

3

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> 

는/만약 angel/디렉토리에 정적 파일을 넣어 예를 들어 만약 angel에 응용 프로그램/angel이라는지도 및 urlrewrite.xml에

<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> 

편집 다른 옵션의 URL maping을 구성합니다.

+0

URL 요청 만 변환하기 때문에 작동하지 않습니다. 정적 인 자원을 제공하는 서블릿이 필요합니다. 말할 것도없이, 그 규칙은 정확하지 않습니다. 그러나 어쨌든 당신을 감사하십시오. –

1

나는 이것을 알아 냈습니다. 그것은 다소 일시적인 해결책이지만. 나는 Vaadin 응용 프로그램 서블릿을/app/*와 같은 것으로 매핑했습니다./* (이 경우에는 동일한 서블릿을/VAADIN/*에 매핑해야 함을 기억하십시오). 이 구성을 사용하면 webapp에서 jsp 디렉토리에 액세스 할 수 있으며 모든 것이 올바르게 작동합니다. 이것이 작동하지 않았기 때문에 Spring 리소스 설정 전체를 삭제했습니다.그래서

한 번 더, 난 아직이 솔루션 꽤 꽤 편안하지 않다 오히려 내 자원의 디렉토리는 다른 방식으로 구성 할 것이다,하지만 C

0

늦을 만에 누가 될지 여전히 정적 콘텐츠를 제공하는 문제가있다에서 Vaadin이 있음에도 불구 그래서 위의 예에서

<?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> 

: angel이라는 /* 매핑을 사용하는 동안, 나는 아파치의 기본 서블릿 org.apache.catalina.servlets.DefaultServlet을 사용하고있는 솔루션은, 그래서 web.xml을 같은 뭔가를해야합니다, /customer/* 부분은 정적 컨텐츠로 제공됩니다. DefaultServlet

관련 문제