문제

접두사 및 확장에 따라 파일에 대한 요청을 처리 할 서플렛이 원합니다.

접두사 _*. XML

요청 경로의 시작 및 끝에서의 매핑은 불가능하기 때문에 모든 *.xml 요청을 내 서블릿에 매핑했습니다. 질문은 이제 : "prefix_"로 시작하지 않는 XML 파일의 서블릿에서 어떻게 삭제하여 요청이 XML 파일에 "정상적인"요청처럼 처리되도록 할 수 있습니까?

이것은 아마도 아주 간단하지만 이것을 찾을 수없는 것 같습니다 ... :-/

많은 감사드립니다

도움이 되었습니까?

해결책

이를 위해 적절한 MVC 프레임 워크를 사용하는 것이 좋습니다. 발견 한 바와 같이, 표준 서블릿 API의 유연성은 파견을 요청할 때 매우 제한적입니다.

이상적으로는 기존 서블릿 코드를 MVC 프레임 워크와 함께 사용하고 프레임 워크가 경로 패턴을 기반으로 DIAPCTHING을 수행하고 서블릿이 비즈니스 로직을 수행 할 수 있습니다. 운 좋게도 Spring MVC를 사용하면 ServletforwardingController를 사용하여 그렇게 할 수 있습니다. 매우 가벼운 스프링 구성입니다.

따라서 Web.xml에 이와 같은 것이 있습니다.

<servlet>
   <servlet-name>myServlet</servlet-name>
   <servlet-class>foo.MyServlet</servlet-class>
</servlet>

<servlet>
   <servlet-name>spring</servlet-name>
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>

<url-mapping>
   <servlet-name>spring</servlet-name>
   <url-pattern>*</url-pattern>
</url-mapping>

그런 다음 다음과 같은 Web-Inf/Spring-Servlet.xml 파일이 있습니다.

<beans>
    <bean name="/prefix*.xml" class="org.springframework.web.servlet.mvc.ServletForwardingController">
       <property name="servletName" value="myServlet"/>
    </bean>
</beans>

그리고 그것은 거의일 것입니다. /prefix*.xml에 대한 모든 요청은 myservlet로 이동하고 다른 모든 요청은 컨테이너로 넘어갑니다.

다른 팁

또 다른 솔루션 (아마도 적합 할 수 있음)은 웹 컨테이너 인스턴스 앞에서 Apache를 사용하기 위해/계획을 사용하는 경우 Apache의 다시 작성 모듈을 사용할 수 있습니다. URL을 WebApp 컨테이너에 대해 더 쉽게 처리 할 수있는 것으로 다시 작성하십시오.

도움이 되었기를 바랍니다. 데이비드.

httpservletrequest.getRequesturi ()를 통해 코드에서 요청을 다시 검사 할 수 있습니다.

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String uri =req.getRequestURI();
        int i = uri.lastIndexOf('/');
        int j = uri.lastIndexOf('.', i);
        if (uri.substring(i+1, j).startsWith("prefix_")) {
            // your code
        }
    }

(테스트되지 않은 코드, 아이디어 만 ...)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top