서블릿 필터 (javax.servlet.Filter
)를 사용하여 간단한 urlrewriter를 작성하려고합니다. 필터는 모든 요청을 검사하고 URL에 따라 서블릿 (또는 JSP)으로 재 라우팅합니다. 서블릿 필터를 사용하는 urlrewrite
예
: http://server/app/person/Roscoe은 내Filter
의
doFilter
는 요청을 검사하고, 패턴이 일치하는 경우, 새로운
HttpServletRequest
를 만들고
chain.doFilter
에 전달
http://server/app/person.jsp?name=Roscoe
로 번역 할 것이다. 새 HttpServletRequest
은 javax.servlet.http.HttpServletRequestWrapper
으로 확장되며 매개 변수, URI, URL, 쿼리 문자열 및 서블릿 경로를 새 JSP (/person.jsp?name=Roscoe
)처럼 덮어 씁니다. 나는 새로운 요청을 chain.doFilter
에 전달함으로써 JSP로 리디렉션 될 것이라고 생각했습니다. person.jsp
의 내용이 브라우저에 반환된다는 것을 제외하고는 일종의 작동합니다. person.jsp
내용을 실행하지 않고 일반 텍스트 (Content-Type: text/plain
)로 반환합니다.
내 web.xml
이 필터 및 필터 매핑 :
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
요청을 다시 작성 서블릿 필터를 사용하는 것이 올바른이 있었다인가?
나는 기존의 urlrewriters (예 : Tuckey)를 알고 있지만 여전히 배우고 더 나은 제어를 위해 스스로 작성하려고합니다.
후속 :
config.getServletContext().getRequestDispatcher("/person.jsp").forward(req, resp);
이 더 잘 작동하지만 내 CSS 파일 (styles.css
) 여전히 : 나는 또한 (req
은, 랩 된 Request가되는 경우) 수행하여 대신 chain.doFilter
의 리디렉션 시도했습니다 이 http://server/app/styles.css
후속 2해야하는 반면, 원래의 URL http://server/app/person/styles.css 상대 : 경로 문제는 this question이 적용됩니다.
http://www.tuckey.org/urlrewrite/을 확인 했습니까? – Adi
"나는 기존의 urlrewriters (Tuckey와 같은)를 알고 있지만 여전히 배우고 더 나은 제어를 위해 내 자신의 글을 쓰고 싶습니다." –