struts中有两种获取servletAPI的方式:web
1:解耦的方式,这种方式方便了测试代码,在servlet中每次测试都须要开启服务器,发起请求,而在struts中只须要写一个main方法就能够进行测试,不须要启动服务器,方便测试就是提升了开发效率。其次耦合程度越低越容易进行扩展。action中只须要调用service的业务便可,aciton-->service-->dao,因此只须要测试service就行,不须要测试整个struts2。 经过actioncontext来获取servletAPI,而actioncontext就是一个map容器,里面存放了用户请求的数据,actioninvocation数据,seesion数据,request数据,application数据等等。而actioncontext是一个全局变量,actioncontext.getcontext()获取。而这种经过actioncontext对象获取的request,session等等并非真正的httpservletrequest对象,只是获取的里面的一个attribute即只是获取的一个map结构。这样避免了直接和web容器直接打交道,正由于如此因此这种方式才称之为解耦的方式。服务器
2:耦合的方式:经过实现sessionaware(servletrequestaware)接口获取session(request)对象,实现没实现的方法即setSession(Map<String, Object> arg0)这种方式是一种依赖注入的方式,这是一种耦合的方式。而struts2是经过servletconfig拦截器来实现的,该方式实质上是至关与ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST)。还有一种耦合方式是经过servletactioncontext这个工具类获取request,application等,而经过这种工具类获取的是一个实在的httpservletrequest对象,因此是直接与web容器直接打交道,称之为耦合的方式。session