知识大全 spring在web.xml中和在struts中的不同配置
Posted 知
篇首语:有时候总感觉别人忽略了自己,想想可能是自己太闲了。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 spring在web.xml中和在struts中的不同配置相关的知识,希望对你有一定的参考价值。
Spring中WebApplicationContext的研究
ApplicationContext是Spring的核心 Context我们通常解释为上下文环境 我想用 容器 来表述它更容易理解一些 ApplicationContext则是 应用的容器 了:P Spring把Bean放在这个容器中 在需要的时候 用getBean方法取出 虽然我没有看过这一部分的源代码 但我想它应该是一个类似Map的结构
在Web应用中 我们会用到WebApplicationContext WebApplicationContext继承自ApplicationContext 先让我们看看在Web应用中 怎么初始化WebApplicationContext 在web xml中定义:
<context param>
<param name>contextConfigLocation</param name>
<param value>/WEB INF/applicationContext xml</param value>
</context param>
<listener>
<listener class> sprntext ContextLoaderListener</listener class>
</listener>
<! OR USE THE CONTEXTLOADERSERVLET INSTEAD OF THE LISTENER
<servlet>
<servlet name>context</servlet name>
<servlet class> sprntext ContextLoaderServlet</servlet class>
<load on startup> </load on startup>
</servlet>
>
可以看出 有两种方法 一个是用ContextLoaderListener这个Listerner 另一个是ContextLoaderServlet这个Servlet 这两个方法都是在web应用启动的时候来初始化WebApplicationContext 我个人认为Listerner要比Servlet更好一些 因为Listerner监听应用的启动和结束 而Servlet得启动要稍微延迟一些 如果在这时要做一些业务的操作 启动的前后顺序是有影响的
那么在ContextLoaderListener和ContextLoaderServlet中到底做了什么呢?
以ContextLoaderListener为例 我们可以看到
public void contextInitialized(ServletContextEvent event)
ntextLoader = createContextLoader();
ntextLoader initWebApplicationContext(event getServletContext());
protected ContextLoader createContextLoader()
return new ContextLoader();
ContextLoader是一个工具类 用来初始化WebApplicationContext 其主要方法就是initWebApplicationContext 我们继续追踪initWebApplicationContext这个方法(具体代码我不贴出 大家可以看Spring中的源码) 我们发现 原来ContextLoader是把WebApplicationContext(XmlWebApplicationContext是默认实现类)放在了ServletContext中 ServletContext也是一个 容器 也是一个类似Map的结构 而WebApplicationContext在ServletContext中的KEY就是WebApplicationContext ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE 我们如果要使用WebApplicationContext则需要从ServletContext取出 Spring提供了一个WebApplicationContextUtils类 可以方便的取出WebApplicationContext 只要把ServletContext传入就可以了
上面我们介绍了WebApplicationContext在Servlet容器中初始化的原理 一般的Web应用就可以轻松的使用了 但是 随着Struts的广泛应用 把Struts和Spring整个起来 是一个需要面对的问题 Spring本身也提供了Struts的相关类 主要使用的有 springframework web struts ActionSupport 我们只要把自己的Action继承自ActionSupport 就是可以调用ActionSupport中getWebApplicationContext()的方法取出WebApplicationContext 但这样一来在Action中 需要取得业务逻辑的地方都要getBean 看上去不够简洁 所以Spring又提供了另一个方法 用 springframework web struts ContextLoaderPlugIn 这是一个Struts的Plug 在Struts启动时加载 对于Action 可以像管理Bean一样来管理 在struts config xml中Action的配置变成类似下面的样子
<action attribute= aForm name= aForm path= /aAction scope= request type= springframework web struts DelegatingActionProxy >
<forward name= forward path= forward jsp />
</action>
注意type变成了 springframework web struts DelegatingActionProxy 之后我们需要建立action servlet xml这样的文件 action servlet xml符合Spring的spring beans dtd标准 在里面定义类似下面的
<bean name= /aAction class= web action Aaction singleton= false >
<property name= businessService >
<ref bean= businessService />
</property>
</bean>
web action Aaction是Action的实现类 businessService是需要的业务逻辑 Spring会把businessService注入到Action中 在Action中只要写businessService的get和set方法就可以了 还有一点 action的bean是singleton= false 即每次新建一个实例 这也解决了Struts中Action的线程同步问题 具体过程是当用户做 /aAction 的HTTP请求(当然应该是 /aAction do ) Struts会找到这个Action的对应类 springframework web struts DelegatingActionProxy DelegatingActionProxy是个代理类 它会去找action servlet xml文件中 /aAction 对应的真正实现类 然后把它实例化 同时把需要的业务对象注入 然后执行Action的execute方法
使用了ContextLoaderPlugIn 在struts config xml中变成类似这样配置
<plug in className= springframework web struts ContextLoaderPlugIn >
<set property property= contextConfigLocation value= /WEB INF/applicationContext xml /WEB INF/action servlet xml />
</plug in>
而在web xml中不再需要ContextLoaderListener或是ContextLoaderServlet
说到这里不知道大家会不会有这样的问题 如果使用ContextLoaderPlugIn 如果我们有些程序是脱离Struts的Action环境 我们怎么处理 比如我们要自定义标记库 在标记库中 我们需要调用Spring管理的业务层逻辑对象 这时候我们就很麻烦 因为只有在action中动态注入业务逻辑 其他我们似乎不能取得Spring的WebApplicationContext
cha138/Article/program/Java/ky/201311/28290相关参考
在Struts中整合Spring的IoC支持是一件十分简单的事情让我们一步一步来实现 )复制strutsspringpluginxxxjar和相应的springj
构建基于Web/XML的信息集成研究 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 摘要在当前的
知识大全 解析web.xml中在Servlet中获取context-param和init-param内的参数
解析web.xml中在Servlet中获取context-param和init-param内的参数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜
Spring整合Struts 虽然Spring也提供了自己的MVC组件但一来Spring的MVC组件过于繁琐二 来Struts的拥护者实在太多因此很
WebXML编程之显示XML文件内容 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! XML技术越
知识大全 spring struts2 ibatis框架整合开发
这里主要介绍一下spring+struts+ibatis所需要的jar包文件spring所需包 以上包为spring配置基本包ibatis所需包 有解决方法的朋友们希望能回复 与struts整合
知识大全 struts2 + spring + hibernate&
struts释出已经很久了虽然自己现在作GUI开发不过有时间还是学习下web开发现在就将我使用myeclipse工具应用struts+spring+hibernat
Struts整合spring方法(三) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Sprin
Spring和Struts的区别? 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishixinz
知识大全 Struts+Spring+Hibernate快速入门
Struts+Spring+Hibernate快速入门 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧