servlet、spring mvc、struts2 、play的http请求处理
2017-10-17 14:07
260 查看
servlet: serlvet是单例多线程的,里面有一个线程池,针对每次请求会分配一个线程去处理请求。
spring mvc:
默认是用一个Controller处理所有请求,优点是不用每次创建一个Controller,减少了对象创建和垃圾收集的时间。如果Controller中定义了实例变量,就会存在并发线程的安全性问题,所以我们最好避免在controller中定义实例变量。如果非要controller中定义实例变量的话,可以在spring的配置文件中将作用域scope从singleton改成prototype,这样在每次请求的时候都会创建一个新的controller。或者直接使用ThreadLocal变量,ThreadLocal能保证变量在各个线程间是独立存在的,不会相互干扰,内部存储是一个k/v,将当前线程作为key,存储对象作为value存储。保证每个线程操作自己独立的变量。避免发生窜数据的问题。
structs2 :
每次请求都会创建一个Action对象,所以相比struts1只在第一次请求时创建Action实例,以后每次相同的请求将直接从内存中读取,同servlet一样是struts1是单例、线程不安全的,structs2是线程安全的。
play : play是最近接触的一个框架,play框架处理多个请求时会复用一个线程(dev模式下只有一个线程处理所以请求,线上的线程个数一般和cpu核数相等)。所以在ation中使用同步锁时,不仅会锁住添加同步锁的action,同个controller下的action也会被阻塞,但是play有提供await方法,我们可以将需要锁住处理的部分另开一个线程处理,使用await将本次请求先挂起一定的时间,保持连接,本次请求的执行会暂时移出线程池,到时间再恢复现场,继续执行。如此线程不会被阻塞,这样就能继续处理其他请求。如果感兴趣的话推荐可以到这看看:play框架http异步处理。
spring mvc:
默认是用一个Controller处理所有请求,优点是不用每次创建一个Controller,减少了对象创建和垃圾收集的时间。如果Controller中定义了实例变量,就会存在并发线程的安全性问题,所以我们最好避免在controller中定义实例变量。如果非要controller中定义实例变量的话,可以在spring的配置文件中将作用域scope从singleton改成prototype,这样在每次请求的时候都会创建一个新的controller。或者直接使用ThreadLocal变量,ThreadLocal能保证变量在各个线程间是独立存在的,不会相互干扰,内部存储是一个k/v,将当前线程作为key,存储对象作为value存储。保证每个线程操作自己独立的变量。避免发生窜数据的问题。
structs2 :
每次请求都会创建一个Action对象,所以相比struts1只在第一次请求时创建Action实例,以后每次相同的请求将直接从内存中读取,同servlet一样是struts1是单例、线程不安全的,structs2是线程安全的。
play : play是最近接触的一个框架,play框架处理多个请求时会复用一个线程(dev模式下只有一个线程处理所以请求,线上的线程个数一般和cpu核数相等)。所以在ation中使用同步锁时,不仅会锁住添加同步锁的action,同个controller下的action也会被阻塞,但是play有提供await方法,我们可以将需要锁住处理的部分另开一个线程处理,使用await将本次请求先挂起一定的时间,保持连接,本次请求的执行会暂时移出线程池,到时间再恢复现场,继续执行。如此线程不会被阻塞,这样就能继续处理其他请求。如果感兴趣的话推荐可以到这看看:play框架http异步处理。
相关文章推荐
- 前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端。前端控制器既可以使用Filter实现(Struts2采用这种方式),也可以使用Servlet来实现(spring MVC框架)。
- Spring MVC静态资源处理——<mvc:resources /> ||<mvc:default-servlet-handler />
- 使用Servlet处理http请求
- Spring MVC静态资源处理----<mvc:default-servlet-handler />和<mvc:resources />
- Servlet处理Http请求的执行过程(Servlet核心流程)
- Spring MVC静态资源处理——<mvc:resources /> ||<mvc:default-servlet-handler />
- 在struts2中使用filter来配置servlet处理业务
- 使用servlet处理http请求
- Spring MVC静态资源处理<mvc:default-servlet-handler>
- Servlet-处理HTTP请求与响应
- Tomcat一次http请求处理,filter、servlet调用流程
- struts2 中属性驱动(其实就是struts2 action 中处理 request 的参数【old 方式servlet api 封装数据到javabean中(or beanutils)】),这里属性驱动是新方式
- 使用Servlet处理HTTP请求
- Prototype功能预览十二:一个注解可在Spring MVC的Servlet3的异步处理与同步处理间切换
- servlet与struts2的处理
- TOMCAT原理以及处理HTTP请求的过程、ContextPath ServletPath
- TOMCAT原理以及处理HTTP请求的过程、ContextPath ServletPath
- 使用servlet处理http请求
- struts2拦截servlet请求处理办法
- TOMCAT原理以及处理HTTP请求的过程、ContextPath ServletPath