1 36 37 package com.caucho.doc.javadoc; 38 39 import com.caucho.log.Log; 40 import com.caucho.util.L10N; 41 42 import java.io.IOException ; 43 44 import java.util.logging.Logger ; 45 46 import javax.naming.Context ; 47 import javax.naming.InitialContext ; 48 import javax.naming.NamingException ; 49 50 import javax.servlet.Filter ; 51 import javax.servlet.FilterChain ; 52 import javax.servlet.FilterConfig ; 53 import javax.servlet.ServletException ; 54 import javax.servlet.ServletRequest ; 55 import javax.servlet.ServletResponse ; 56 import javax.servlet.http.HttpServletRequest ; 57 import javax.servlet.http.HttpServletResponse ; 58 import com.caucho.util.CharBuffer; 59 60 64 public class RedirectFilter implements Filter { 65 static protected final Logger log = Log.open(RedirectFilter.class); 66 static final L10N L = new L10N(RedirectFilter.class); 67 68 private final static String STORE_JNDINAME = "resin-javadoc/store"; 69 70 private Store _store; 71 72 public void init(FilterConfig filterConfig) 73 throws ServletException 74 { 75 try { 76 Context env = (Context ) new InitialContext ().lookup("java:comp/env"); 77 78 _store = (Store) env.lookup(STORE_JNDINAME); 79 80 if (_store == null) 81 throw new ServletException (L.l("`{0}' is an unknown Store",STORE_JNDINAME)); 82 } catch (NamingException ex) { 83 throw new ServletException (ex); 84 } 85 } 86 87 public void doFilter(ServletRequest request, 88 ServletResponse response, 89 FilterChain chain) 90 throws ServletException , IOException 91 { 92 HttpServletRequest req = (HttpServletRequest ) request; 93 HttpServletResponse res = (HttpServletResponse ) response; 94 95 String url = req.getPathInfo(); 96 int i = url.indexOf('/'); 97 if (i > -1) { 98 String api = url.substring(0,i); 99 url = url.substring(i); 100 if (_store.getApi(api) == null) { 101 CharBuffer redirect = CharBuffer.allocate(); 103 redirect.append(req.getRequestURI()); 104 redirect.setLength(redirect.length() - req.getPathInfo().length()); 105 redirect.append("index.jsp?query="); 106 redirect.append(url); 108 res.sendRedirect(res.encodeRedirectURL(url)); 109 } 110 } 111 112 chain.doFilter(request, response); 113 } 114 115 116 public void destroy() 117 { 118 } 119 120 } 121 122 | Popular Tags |