struts2核心工作流程与原理 官方站点提供的struts2的结构图 一个请求在Struts2框架中的处理大概分为以下几个步骤: 1.客户端提起一个(HttpServletRequest)请求,如上文在浏览器中输入”http://localhost:8080/TestMvc/add.action”就是提起一个(HttpServletRequest)请求。 2.请求被提交到一系列(主要是三层)的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、 FilterDispatcher)。注意这里是有顺序的,先ActionContextCleanUp,再其他过滤器(SiteMesh等)、最后到FilterDispatcher。 3.FilterDispatcher是控制器的核心,就是mvc中c控制层的核心。下面粗略的分析下我理解的FilterDispatcher工作流程和原理:FilterDispatcher进行初始化并启用核心doFilter doFilter的代码如下: public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException ...{ HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; ServletContext servletContext = filterConfig.getServletContext(); // 在这里处理了HttpServletRequest和HttpServletResponse。 DispatcherUtils du = DispatcherUtils.getInstance(); du.prepare(request, response); //正如这个方法名字一样进行locale、encoding以及特殊request parameters设置 try ...{ request = du.wrapRequest(request, servletContext);//对request进行包装...

并发容器和框架 - 如何让一段程序并发的执行,并最终汇总结果? 拆分计算,使用Callable对象封装每个计算任务,通过Executor执行,在Future的get中获取计算结果。最后在主线程中汇总计算结果。 如何合理的配置java线程池?如CPU密集型的任务,基本线程池应该配置多大?IO密集型的任务,基本线程池应该配置多大?用有界队列好还是无界队列好?任务非常多的时候,使用什么阻塞队列能获取最好的吞吐量? 根据任务的性质(比如IO密集,或者CPU密集),配置核心线程的数量,最大线程数,选择好合适的队列,以及拒绝策略。

通过Gradle怎样创建并编译一个Android Lib工程 怎样创建一个Android Lib(库项目) 创建一个Android Lib工程和创建一个Android Application工程没有太大的不同。但还是有一点小区别的。 他们使用了不同的Plugin,但是在内部这些plugin共享了大部分的代码,并且他们都是由相同的com.android.tools.build.gradle.jar提供的。 apply plugin: 'com.android.library' android { compileSdkVersion 22 buildToolsVersion "22.0.0" defaultConfig { minSdkVersion 15 targetSdkVersion 22 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.1.1' }...