2012-01-12 3 views
0

현재 우리 사이트에는 모든 링크가 /xxx/UseCase으로 설정되어 있습니다.서블릿이 동일한 두 URI를 지원합니다.

접두어가 /yyy 인 수신 요청을 이제는 /yyy/xxx/UseCase과 같이 받아들입니다. 따라서 우리는 /yyy/xxx/UseCase/xxx/UseCase에 대한 요청을 받아들이는 하나의 서블릿을 갖게 될 것입니다.

어떻게 할 수 있습니까?

여기에서 가장 큰 도전 과제는 다음과 같습니다. 절대 경로를 사용하여 다른 URI로 리디렉션하는 페이지가 많습니다. 즉 : Patients 서블릿은 /xxx/Insurance으로 리디렉션됩니다.

<servlet-mapping> 
    <servlet-name>fooServlet</servlet-name> 
    <url-pattern>/xxx/*</url-pattern> 
    <url-pattern>/yyy/*</url-pattern> 
</servlet-mapping> 

또는 : 당신은 당신은 단지 하나 개 이상의 URL 패턴을 서블릿을 매핑 할 수 있습니다 /yyy/xxx/Insurance

+0

'yyy'가 컨텍스트 경로입니까? – adarshr

답변

4

로 리디렉션합니다 - 당신은 지금 /xxx/Insurance로 리디렉션되지해야 /yyy/xxx/Patients에 있다면 문제입니다 당신은 서블릿 3.0에 이미 위치 :

@WebServlet(urlPatterns={"/xxx/*", "/yyy/*"}) 
public class FooServlet extends HttpServlet { 
    // ... 
} 

당신이 할 수있는 필요한 사용 /yyy/xxx/* 대신 /yyy/*합니다.

서블릿 매핑을 언 터치하려는 경우 /yyy/xxx/*에서 /xxx/*으로 요청을 전달하는 Filter을 만들 수도 있습니다. 이런 식으로 뭔가 (기본 검사 생략) : 당신이 /xxx/*/yyy/xxx/*에서 브라우저의 주소 표시 줄에 URL을 변경하려는 경우

@WebFilter("/yyy/xxx/*") 
public class FooFilter implements Filter { 

    // ... 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { 
     HttpServletRequest req = (HttpServletRequest) request; 
     String oldURI = req.getRequestURI().substring(req.getContextPath().length() + 1); 
     String newURI = oldURI.substring(oldURI.indexOf("/")); 
     req.getRequestDispatcher(newURI).forward(request, response); 
    } 

    // ... 
} 

는, 당신은 RequestDispatcher#forward() 대신 HttpServletResponse#sendRedirect()를 사용해야합니다 :

  // ... 
     HttpServletResponse res = (HttpServletResponse) response; 
     res.sendRedirect(newURI); 
+0

Servlet 3.0 예제의 경우 +1 – adarshr

+0

감사합니다. 문제는 질문에 설명 된대로 리디렉션과 더 관련이 있습니다. –

+0

구체적인 문제가 무엇인지, 그리고 그것이 정확히 문제 (또는 당신이 그것을 부른대로 "도전")인지 정확히 모르겠습니다. 일반적으로 요청/응답을 수정하기 위해 '필터'가 사용됩니다. 잘 알려진 HTTPD의'mod_rewrite'와 매우 유사한 Tuckey의 URLRewriteFilter와 같은 써드 파티 파일도 존재합니다 : http://code.google.com/p/urlrewritefilter/ 이것은지도 작성법에 관한 초기 질문과는 완전히 무관합니다 여러 URL 패턴에 대한 단일 서블릿 – BalusC

1

문제가 서블릿 매핑과 관련이 있다고 생각하지 않습니다. 리디렉션을 어떻게 수행하고 있는지 생각합니다. ... 당신의 리디렉션 로직이 시도

response.sendRedirect(request.getRequestURI().replace("Patients", "Insurance")); 

이 방법 당신은 두 경우 모두에서 작동합니다 같이 if 문으로 엉망이 없습니다.

+0

이것은 좋은 제안입니다. 링크를 생성하는 방법을 변경하기 위해 정당한 코드/HTML을 변경해야한다는 것을 의미합니다. 적은 노력으로 해결할 수있는 솔루션을 기대하고있었습니다. –

+0

조금 혼란 스럽습니다. 서버 쪽 리디렉션이라면 HTML이 서버 측에서 리디렉션되는 것과 관련이 없기 때문에 혼란 스럽습니다. 어떻게 링크를 생성하고 있습니까? – Dave

+0

다른 방법 : JSP 또는 Java 코드 (한숨)로 하드 코드 –

관련 문제