1 2 3 4 5 6 7 8 | public interface ContainerFactory { void init(Config config); List<Object> findAllBeans(); void destroy(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class SpringContainerFactory implements ContainerFactory { private ApplicationContext appContext; public List<Object> findAllBeans() { String[] beanNames = appContext.getBeanDefinitionNames(); List<Object> beans = new ArrayList<Object>(beanNames.length); for (int i=0; i<beanNames.length; i++) { beans.add(appContext.getBean(beanNames)); } return beans; } ... } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class GuiceContainerFactory implements ContainerFactory { private Injector injector; public List<Object> findAllBeans() { Map<Key<?>, Binding<?>> map = injector.getBindings(); Set<Key<?>> keys = map.keySet(); List<Object> list = new ArrayList<Object>(keys.size()); for (Key<?> key : keys) { Object bean = injector.getInstance(key); list.add(bean); } return list; } ... } |
1 2 3 4 5 6 7 8 9 | final class UrlMatcher { final String url; int[] orders; Pattern pattern; public UrlMatcher(String url) { ... } } |
1 | ^\\/blog\\/([^\\/]*)\\/([^\\/]*)$ |
1 2 3 4 5 6 7 8 9 10 11 | class Action { public final Object instance; public final Method method; public final Class<?>[] arguments; public Action(Object instance, Method method) { this.instance = instance; this.method = method; this.arguments = method.getParameterTypes(); } } |
1 2 3 4 5 | class Dispatcher { private UrlMatcher[] urlMatchers; private Map<UrlMatcher, Action> urlMap = new HashMap<UrlMatcher, Action>(); .... } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | final class UrlMatcher { ... /** * 根据正则表达式匹配 URL,若匹配成功,返回从 URL 中提取的参数, * 若匹配失败,返回 null */ public String[] getMatchedParameters(String url) { Matcher m = pattern.matcher(url); if (!m.matches()) return null; if (orders.length==0) return EMPTY_STRINGS; String[] params = new String[orders.length]; for (int i=0; i<orders.length; i++) { params[orders] = m.group(i+1); } return params; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class Execution { public final HttpServletRequest request; public final HttpServletResponse response; private final Action action; private final Object[] args; ... public Object execute() throws Exception { try { return action.method.invoke(action.instance, args); } catch (InvocationTargetException e) { Throwable t = e.getCause(); if (t!=null && t instanceof Exception) throw (Exception) t; throw e; } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | class StaticFileHandler { ... public void handle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String url = request.getRequestURI(); String path = request.getServletPath(); url = url.substring(path.length()); if (url.toUpperCase().startsWith("/WEB-INF/")) { response.sendError(HttpServletResponse.SC_NOT_FOUND); return; } int n = url.indexOf('?'); if (n!=(-1)) url = url.substring(0, n); n = url.indexOf('#'); if (n!=(-1)) url = url.substring(0, n); File f = new File(servletContext.getRealPath(url)); if (! f.isFile()) { response.sendError(HttpServletResponse.SC_NOT_FOUND); return; } long ifModifiedSince = request.getDateHeader("If-Modified-Since"); long lastModified = f.lastModified(); if (ifModifiedSince!=(-1) && ifModifiedSince>=lastModified) { response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); return; } response.setDateHeader("Last-Modified", lastModified); response.setContentLength((int)f.length()); response.setContentType(getMimeType(f)); sendFile(f, response.getOutputStream()); } } |
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |