package com; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet Filter를 통한 URL 재구성 * * @author ChangYeol.Kim * @date 2009.02.22 * */ public class UmaFilter implements Filter { private Map map; public UmaFilter() { } public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse)response; String uri = req.getServletPath(); String jsp = ""; String stri; Iterator i = map.keySet().iterator(); while(i.hasNext()) { stri = (String)i.next(); Pattern p = Pattern.compile(stri, Pattern.UNICODE_CASE|Pattern.CASE_INSENSITIVE|Pattern.MULTILINE); Matcher m = p.matcher(uri); if(m.find()) { jsp = m.replaceAll( (String) map.get(stri) ); break; } } RequestDispatcher disp = request.getRequestDispatcher( jsp ); if(disp != null) { disp.forward(request, response); }else chain.doFilter(request, response); } public void init(FilterConfig fConfig) throws ServletException { String name; map = new HashMap<String, String>(); map.put("/blog/([0-9]+)$", "/uma.jsp?seq=$1"); } }-------------------------------------------------------------------
<display-name>UmaFilter</display-name> <filter-name>UmaFilter</filter-name> <filter-class>com.UmaFilter</filter-class> </filter> <filter-mapping> <filter-name>UmaFilter</filter-name> <url-pattern>/blog/*</url-pattern> </filter-mapping>-------------------------------------------------------------------
암튼 대충 끝났다.
내용은 대충 이렇다.
http://www.umaking.com/blog/1
이렇게 해주면
Servlet Filter를 거치면서
http://www.umaking.com/uma.jsp?seq=1
이렇게 구성 되도록 하였다.
위의 붉은색 부분을 보면 알겠지만
정규식으로 해당 부분을 필터링해 전달한다.
글쿠 몇가지 생각해 볼 부분이 있는데 고민 중.
설정파일을 외부로 뺄까 생각 중인데
뭘로 뺄까!!
'코드' 카테고리의 다른 글
JSTL - customTag를 만들어 보자. (0) | 2009.03.16 |
---|---|
prototype 1.6에서 SelectBOX 생성 (0) | 2009.03.07 |
printStackTrace (0) | 2008.09.02 |
DoCapture(IHTMLElement *ele, IViewObject2 *vObj, int width, int height, int cwidth, int cheight, int wd, int hd) (0) | 2008.08.19 |
TShellWindows (0) | 2008.08.19 |