2011-10-29 5 views
1

모든 요청을 매핑하는 프록시 서블릿에서 작업하고 있습니다. 나는 다음과 같은 방법으로 web.xml 파일을 지정 :정적 리소스에 대한 HTTP MVC 요청은 사용자 정의 서블릿에서 처리됩니다.

<servlet> 
    <servlet-name>appServlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>appServlet</servlet-name> 
    <url-pattern>/admin/*</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>appServlet</servlet-name> 
    <url-pattern>/home</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>Servlet to proxy all requests.</description> 
    <display-name>ProxyServlet</display-name> 
    <servlet-name>ProxyServlet</servlet-name> 
    <servlet-class>com.epam.alpha.servlets.ProxyServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>ProxyServlet</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

<welcome-file-list> 
    <welcome-file>home</welcome-file> 
</welcome-file-list> 

모든 요청/가정을 제외하고, 내 프록시 서블릿에서 처리하는이 방법 및/관리자/* 홈 페이지와 관리자 페이지에 대한 예약되어 있습니다. 이것은 훌륭하게 작동합니다!

이제 jsp 페이지에서 javascript 및 css 파일을 사용하고 싶습니다. 리소스 폴더 아래에 배치되므로 올바른 위치에 있습니다. 다음 서블릿의 context.xml에서

이 주어진다 :

<resources mapping="/resources/**" location="/resources/" /> 

문제는 내 서블릿이 정적 자원에 대한 모든 GET 요청을 잡는다는 것이다. 내가 ProxyServlet에 대한 서블릿 매핑을 주석 처리하면 리소스가 발견되어 사용됩니다. 물론이 경우에는 프록시 서블릿이 작동하지 않습니다. 반면에 jsp에서 javascript 파일을 참조하지 않으면 프록시 서블릿이 작동합니다 (정적 리소스 요청이 발생하지 않음). 도움!

+0

문제점을 이해하지 못합니다. 프록시 서블릿으로 무엇을 하시겠습니까? 실제로 무엇을합니까? –

+0

URL에 매핑되는 별칭이 있습니다. 목표는 localhost에서 실행되는 것처럼 이러한 페이지에 액세스하는 것입니다. 예 : - 별명 'google'이 http://www.google.com에 매핑됩니다. http : // localhost : 8080/ProxyServlet/google을 입력하면 google.com이 표시됩니다. 그것은 목표입니다. 프록시 서블릿은 위의 요청을 처리하고 응답을 읽고 결과를 브라우저에 표시합니다. 실질적으로 모든 요청은 유지 보수 목적으로 사용될 home이나 admin과 같은 일부 예약 된 별칭을 제외하고는이 프록시 서블릿 (우리가 만든)에 의해 처리되어야합니다. – cslacika

+0

js와 css 파일이 Spring의 리소스 메커니즘에 의해 제공되어야한다면,/resources 경로는 Spring 디스패처 서블릿에 맵핑되어야한다. 따라서/resources/*에 대한 매핑을 appServlet에 추가하면 모든 것을 수정해야합니다. –

답변

0
나는 비슷한 구성을 사용하여이 페이지로드 JS 스크립트를 봄 컨트롤러를 통해 페이지를 제공하고있다 할 수있었습니다

:

디스패처 서블릿은
  • 서블릿에 매핑
    • /합니다 (프록시 서블릿은)

    난에/* dispatc의 경로/자원지도

    • 로 했어
    • 다음 Spring 컨텍스트 파일을 사용하는 (다른 맵핑에 더하여) web.xml에 그녀 서블릿 :

    서블릿의 context.xml은 :

    <beans xmlns="http://www.springframework.org/schema/beans" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:p="http://www.springframework.org/schema/p" 
        xmlns:context="http://www.springframework.org/schema/context" 
        xmlns:mvc="http://www.springframework.org/schema/mvc" 
        xsi:schemaLocation=" 
         http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
         http://www.springframework.org/schema/context 
         http://www.springframework.org/schema/context/spring-context-3.0.xsd 
         http://www.springframework.org/schema/mvc 
         http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 
    
        <context:component-scan base-package="fr.free.jnizet.springtest"/> 
        <mvc:annotation-driven/> 
        <mvc:resources location="/resources/**" mapping="/resources"/> 
        <mvc:default-servlet-handler/> 
    </beans> 
    

    요점은 <mvc:default-servlet-handler/> 요소 . 이 요소가 없다면 Spring은/resources /에있는 JS 파일에 대한 매핑을 찾지 못한다.

  • +0

    작동 중입니다! 나는 아직도 전체 스토리를 이해하지 못한다. 스프링이 내 프록시 서블릿이 그림에서 벗어 났을 때 js 매핑을 찾은 이유는, 어쨌든. 밑바닥은 이것이 문제를 해결했다이다! 고맙습니다! – cslacika

    +0

    나는 봄이 그것을 발견하지 못했다고 생각한다. JS의 경로가 실제 경로이므로 기본 서블릿에서 찾았습니다. "모든 것에 매핑 된"매핑 서블릿을 상쇄하기 위해서만 Spring 리소스 매핑이 필요합니다. –

    +0

    아, 내가 이해할 것 같아! 다시 한 번 감사드립니다! :) – cslacika

    관련 문제