Java Servlet : 요청을 기본 처리로 다시 전달합니다.
-
11-09-2019 - |
문제
접두사 및 확장에 따라 파일에 대한 요청을 처리 할 서플렛이 원합니다.
접두사 _*. 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
}
}
(테스트되지 않은 코드, 아이디어 만 ...)