spring+struts(第一种方案)

集成原理:在Action中取得BeanFactory,通过BeanFactory取得业务逻辑对象,调用业务逻辑方法。

,新建一个项目Spring_Struts_01

,步骤

1springStruts的依赖包配置

*Struts

(1)拷贝Struts和jstl的依赖包

(2)在web.xml文件里配置ActionServlet

  1. <span style="font-family:KaiTi_GB2312;font-size:18px;"><?xmlversion="1.0" encoding="UTF-8"?>
  2. <web-appversion="2.5"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  6. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  7. <servlet>
  8. <servlet-name>action</servlet-name>
  9. <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  10. <init-param>
  11. <param-name>config</param-name>
  12. <param-value>/WEB-INF/struts-config.xml</param-value>
  13. </init-param>
  14. <init-param>
  15. <param-name>debug</param-name>
  16. <param-value>2</param-value>
  17. </init-param>
  18. <init-param>
  19. <param-name>detail</param-name>
  20. <param-value>2</param-value>
  21. </init-param>
  22. <load-on-startup>2</load-on-startup>
  23. </servlet>
  24.  
  25. <!-- Standard Action Servlet Mapping-->
  26. <servlet-mapping>
  27. <servlet-name>action</servlet-name>
  28. <url-pattern>*.do</url-pattern>
  29. </servlet-mapping>
  30.  
  31. </web-app></span>

(3)提供struts-config.xml文件

  1. <span style="font-family:KaiTi_GB2312;font-size:18px;"><?xmlversion="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPEstruts-config PUBLIC
  3. "-//Apache SoftwareFoundation//DTD Struts Configuration 1.2//EN"
  4. "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
  5.  
  6. <struts-config>
  7.  
  8. </struts-config></span>

(4)提供国际化支持,提供缺省的国际化资源文件

  1. <span style="font-family:KaiTi_GB2312;font-size:18px;"># -- standard errors--
  2. errors.header=<UL>
  3. errors.prefix=<LI>
  4. errors.suffix=</LI>
  5. errors.footer=</UL>
  6. # -- validator --
  7. errors.invalid={0}is invalid.
  8. errors.maxlength={0}can not be greater than {1} characters.
  9. errors.minlength={0}can not be less than {1} characters.
  10. errors.range={0} isnot in the range {1} through {2}.
  11. errors.required={0}is required.
  12. errors.byte={0} mustbe an byte.
  13. errors.date={0} isnot a date.
  14. errors.double={0}must be an double.
  15. errors.float={0}must be an float.
  16. errors.integer={0}must be an integer.
  17. errors.long={0} mustbe an long.
  18. errors.short={0}must be an short.
  19. errors.creditcard={0}is not a valid credit card number.
  20. errors.email={0} isan invalid e-mail address.
  21. # -- other --
  22. errors.cancel=Operationcancelled.
  23. errors.detail={0}
  24. errors.general=Theprocess did not complete. Details should follow.
  25. errors.token=Requestcould not be completed. Operation is not in sequence.
  26. # -- welcome --
  27. welcome.title=StrutsBlank Application
  28. welcome.heading=Welcome!
  29. welcome.message=Toget started on your own application, copy the struts-blank.war to a new WARfile using the name for your application. Place it in your container's"webapp" folder (or equivalent), and let your container auto-deploythe application. Edit the skeleton configuration files as needed, restart yourcontainer, and you are on your way! (You can find the application.propertiesfile with this message in the /WEB-INF/src/java/resources folder.)</span>

*Spring

(1)拷贝spring相关依赖包

(2)提供spring配置文件

  1. <span style="font-family:KaiTi_GB2312;font-size:18px;"><?xmlversion="1.0" encoding="UTF-8"?>
  2. <beansxmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:aop="http://www.springframework.org/schema/aop"
  5. xmlns:tx="http://www.springframework.org/schema/tx"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  7. http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.0.xsd
  8. http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
  9.  
  10. </beans></span>

2,在web.xml文件里配置ContextLoaderListener(作用:让web
Server
在启动时将BeanFactory放到ServletContext中)

  1. <span style="font-family:KaiTi_GB2312;font-size:18px;"><?xmlversion="1.0" encoding="UTF-8"?>
  2. <web-appversion="2.5"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  6. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  7. <servlet>
  8. <servlet-name>action</servlet-name>
  9. <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  10. <init-param>
  11. <param-name>config</param-name>
  12. <param-value>/WEB-INF/struts-config.xml</param-value>
  13. </init-param>
  14. <init-param>
  15. <param-name>debug</param-name>
  16. <param-value>2</param-value>
  17. </init-param>
  18. <init-param>
  19. <param-name>detail</param-name>
  20. <param-value>2</param-value>
  21. </init-param>
  22. <load-on-startup>2</load-on-startup>
  23. </servlet>
  24.  
  25. <!-- Standard Action Servlet Mapping-->
  26. <servlet-mapping>
  27. <servlet-name>action</servlet-name>
  28. <url-pattern>*.do</url-pattern>
  29. </servlet-mapping>
  30.  
  31. <context-param>
  32. <param-name>contextConfigLocation</param-name>
  33. <param-value>classpath:applicationContext-*.xml</param-value>
  34. </context-param>
  35. <!--加入启动Spring监听器-->
  36. <listener>
  37. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  38. </listener>
  39. </web-app></span>

注:使用listener配置beanfactory,将其初始化交给servlet,使其维持在ServletContext中,节省资源。Listener初始化早于Servlet

3,在Action中採用WebApplicationContextUtils.getWebApplicationContext()ServletContext中取得BeanFactory

4,通过BeanFactoryIOC容器中取得业务逻辑对象

存在缺点:

由于Action中存在依赖查找,所以Action依赖于Spring的API

进一步了解依赖查找和依赖注入,在同一个jvm中能够依赖注入,不同jvm中不能够依赖注入

三,代码演示样例

一个简单的用户登录演示样例,没有持久层

client:

1,jsp

(1)index.jsp主页面

  1. <span style="font-family:KaiTi_GB2312;font-size:18px;"><%@ pagelanguage="java" contentType="text/html; charset=GB18030"
  2. pageEncoding="GB18030"%>
  3. <!DOCTYPE htmlPUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <metahttp-equiv="Content-Type" content="text/html;charset=GB18030">
  7. <title>Inserttitle here</title>
  8. </head>
  9. <body>
  10. <h1>Spring+Struts(第一种集成方案)</h1>
  11. <hr>
  12. <ahref="login.jsp">登录</a>
  13. </body>
  14. </html></span>

(2)login.jsp登录页面

  1. <span style="font-family:KaiTi_GB2312;font-size:18px;"><%@ pagelanguage="java" contentType="text/html; charset=GB18030"
  2. pageEncoding="GB18030"%>
  3. <!DOCTYPE htmlPUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <metahttp-equiv="Content-Type" content="text/html;charset=GB18030">
  7. <title>Inserttitle here</title>
  8. </head>
  9. <body>
  10. <form action="login.do"method="post" >
  11. 用户:<input type="text"name="username"><br>
  12. 密码:<input type="text"name="password"><br>
  13. <input type="submit" value="登录">
  14. </form>
  15. </body>
  16. </html></span>

(3)login_success.jsp登录成功后的跳转页面

  1. <span style="font-family:KaiTi_GB2312;font-size:18px;"><%@ pagelanguage="java" contentType="text/html; charset=GB18030"
  2. pageEncoding="GB18030"%>
  3. <!DOCTYPE htmlPUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <metahttp-equiv="Content-Type" content="text/html;charset=GB18030">
  7. <title>Inserttitle here</title>
  8. </head>
  9. <body>
  10. 韩学敏,登录成功!!
  11. </body>
  12. </html></span>

服务端

2(1),ActionForm获取表单数据

loginActionForm.java:

  1. <span style="font-family:KaiTi_GB2312;font-size:18px;">packagecom.bjpowernode.usermgr.web.forms;
  2.  
  3. importorg.apache.struts.action.ActionForm;
  4.  
  5. public classloginActionForm extends ActionForm {
  6. private String username;
  7. private String password;
  8. public String getUsername() {
  9. returnusername;
  10. }
  11. publicvoid setUsername(String username) {
  12. this.username= username;
  13. }
  14. publicString getPassword() {
  15. returnpassword;
  16. }
  17. publicvoid setPassword(String password) {
  18. this.password= password;
  19. }
  20.  
  21. }</span>

2(2),Action

LoginAction.java:

  1. <span style="font-family:KaiTi_GB2312;font-size:18px;">packagecom.bjpowernode.usermgr.web.actions;
  2.  
  3. importjavax.servlet.http.HttpServletRequest;
  4. importjavax.servlet.http.HttpServletResponse;
  5.  
  6. importorg.apache.struts.action.Action;
  7. importorg.apache.struts.action.ActionForm;
  8. importorg.apache.struts.action.ActionForward;
  9. importorg.apache.struts.action.ActionMapping;
  10. importorg.springframework.beans.factory.BeanFactory;
  11. importorg.springframework.context.support.ClassPathXmlApplicationContext;
  12. importorg.springframework.web.context.support.WebApplicationContextUtils;
  13.  
  14. importcom.bjpowernode.usermgr.manager.UserManager;
  15. importcom.bjpowernode.usermgr.manager.UserMangerImpl;
  16. importcom.bjpowernode.usermgr.web.forms.loginActionForm;
  17.  
  18. public classLoginAction extends Action {
  19.  
  20. @Override
  21. publicActionForward execute(ActionMapping mapping, ActionForm form,
  22. HttpServletRequestrequest, HttpServletResponse response)
  23. throwsException {
  24. //从LoginActionForm拿数据
  25. loginActionFormlaf=(loginActionForm)form;
  26. String username=laf.getUsername();//获取用户名
  27. String password =laf.getPassword();//获取密码
  28.  
  29. /*UserManageruserManager=new UserMangerImpl();
  30. userManager.Login(username, password);*/
  31. //取BeanFactory拿到配置文件applicationContext.xml生成BeanFactory
  32.  
  33. BeanFactory factory= new ClassPathXmlApplicationContext("applicationContext.xml");
  34.  
  35. /*//使用BeanFactory从IOC容器中取得相关对象(依据id取得)
  36. UserManageruserManager=(UserManager)factory.getBean("userManager");
  37. userManager.Login(username, password);//调用接口UserManager的登录方法Login()
  38. */
  39. //例如以下方式不用每次都创建BeanFactory,并且不用在这里写死配置文件,配置文件写在了web.xml中;可是在此层中知道了Spring的存在
  40. BeanFactory beanFactory =WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());
  41. UserManageruserManager=(UserManager)factory.getBean("userManager");
  42. userManager.Login(username, password);//调用接口UserManager的登录方法Login()
  43. returnmapping.findForward("success");//跳转到成功页面
  44. }
  45.  
  46. }</span>

2(3)业务层 接口+实现

接口UserManager.java:

  1. <span style="font-family:KaiTi_GB2312;font-size:18px;">packagecom.bjpowernode.usermgr.manager;
  2.  
  3. public interfaceUserManager {
  4. /**
  5. * 用户登录
  6. * @param username:用户名
  7. * @param password:密码
  8. */
  9. publicvoid Login(String username,String password);
  10.  
  11. }</span>

实现UserManagerImp.java:

  1. <span style="font-family:KaiTi_GB2312;font-size:18px;">packagecom.bjpowernode.usermgr.manager;
  2.  
  3. public classUserMangerImpl implements UserManager {
  4.  
  5. @Override
  6. publicvoid Login(String username, String password) {
  7. System.out.print(this.getClass()+",username="+username);
  8.  
  9. }
  10.  
  11. }</span>

3,Struts配置文件 配置数据

  1. <span style="font-family:KaiTi_GB2312;font-size:18px;"><?xmlversion="1.0" encoding="UTF-8" ?>
  2.  
  3. <!DOCTYPEstruts-config PUBLIC
  4. "-//Apache SoftwareFoundation//DTD Struts Configuration 1.2//EN"
  5. "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
  6.  
  7. <struts-config>
  8. <!--生命ActionForm(即,告诉Struts哪个是ActionForm) -->
  9. <form-beans>
  10. <form-bean name="loginForm"type="com.bjpowernode.usermgr.web.forms.loginActionForm"/>
  11. </form-beans>
  12.  
  13. <!--描写叙述Action -->
  14. <!--描写叙述Action -->
  15. <action-mappings>
  16. <action path="/login"
  17. type="com.bjpowernode.usermgr.web.actions.LoginAction"
  18. name="loginForm"
  19. scope="request">
  20.  
  21. <!--转向信息 -->
  22. <forward name="success"path="/login_success.jsp"/>
  23. </action>
  24. </action-mappings>
  25. <message-resourcesparameter="MessageResources" />
  26. </struts-config></span>

4,Spring配置文件

  1. <span style="font-family:KaiTi_GB2312;font-size:18px;"><?xmlversion="1.0" encoding="UTF-8"?>
  2. <beansxmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:aop="http://www.springframework.org/schema/aop"
  5. xmlns:tx="http://www.springframework.org/schema/tx"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  7. http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.0.xsd
  8. http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
  9. <!--这个IOC容器核心是个工厂,抽象工厂 -->
  10. <beanid="userManager"class="com.bjpowernode.usermgr.manager.UserMangerImpl"/>
  11.  
  12. </beans></span>

5,执行

启动Tomcat

浏览器中输入地址http://localhost:8080/Spring_Struts_01/

进入主页面index.jsp:

点击“登录”,进入用户登录页面login.jsp:

输入username、password

点击“登录”button,跳转到登录成功页面login_success:

6,总结:

(1)此方案的集成原理:在Action中取得BeanFactory,通过BeanFactory取得业务逻辑对象,调用业务逻辑方法。

(2)缺点:产生了依赖,spring的类在action中产生了依赖查找。(依赖查找和依赖注入的差别(前者为主动,后者是Spring主动提供))

Struts1.X与Spring集成——第一种方案的更多相关文章

  1. 集成Struts2+Spring+Hibernate_两种方案

    集成Struts2+Spring+Hibernate 第一种方案:让Spring创建Struts2的Action,不让Spring完全管理Struts2的Action      Struts2 Act ...

  2. Spring+Struts集成(第二种方案)

    在上一篇文章中我们了解到了第一种Spring跟Struts集成的方案,但此集成方案的不足是WEB层中知道Spring的相关内容,因为需要去主动的查找对象:BeanFactory.方案二便是通过依赖注入 ...

  3. Struts2+Spring集成合并

    前边单独总结了Struts2,Spring和Ibaits框架了,那么怎么结合使用呢?这次先来看一下Sturts2和Spring的集成合并.其实挺简单的,就是导入各自的jar包以及连接彼此的jar包,分 ...

  4. Quartz学习总结(1)——Spring集成Quartz框架

    一.Quartz简介 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简 ...

  5. Linux下实现秒级定时任务的两种方案(crontab 每秒运行)

    第一种方案,当然是写一个后台运行的脚本一直循环,然后每次循环sleep一段时间. while true ;do command sleep XX //间隔秒数 done 第二种方案,使用crontab ...

  6. Linux下实现秒级定时任务的两种方案

    Linux下实现秒级定时任务的两种方案(Crontab 每秒运行): 第一种方案,当然是写一个后台运行的脚本一直循环,然后每次循环sleep一段时间. while true ;do command s ...

  7. Android 验证码倒计时两种方案

    使用 第一种方案:自定义控件 1.在布局中使用 <?xml version="1.0" encoding="utf-8"?> <Relativ ...

  8. [java代码库]-简易计算器(第一种)

    简易计算器(效果如图所示) 第一种方案:采用Javascript+html完成计算器,支持+-*/,结果显示不允许使用input输入域(可以考虑使用<span>) <html> ...

  9. kettle 多表全删全插同步数据 两种方案

    背景: 接到上级指示,要从外网某库把数据全部导入到内网,数据每天更新一次即可,大约几百万条数据,两个库结构一样,mysql的,两台数据库所在服务器都是windows server的,写个java接口实 ...

随机推荐

  1. 开源一个适用iOS的数据库表结构更新机制的代码

    将前段时间开源的代码.公布一下: ARDBConfig On the iOS, provide a database table structure update mechanism, ensure ...

  2. 由sqlite在手机的内存位置,引起onCreate当运行总结

    转载请注明出处.谢谢:http://blog.csdn.net/harryweasley/article/details/46467495 我们都知道,android为了操作数据库,通常是继承SQLi ...

  3. ubuntu 12.10 软件更新源列表

    ubuntu 12.10正式版已经发布了,国内各大开源软件源也陆续更新了资源.今天分享一下ubuntu 12.10 软件更新源列表. 首先,习惯性的备份一下ubuntu 12.04 原来的源地址列表文 ...

  4. error U1087: cannot have : and :: dependents for same target

    windows驱动开发遇到错误: 1>e:\winddk\7600\bin\makefile.new(7117) : error U1087: cannot have : and :: depe ...

  5. 【Android UI】案例03滑动切换效果的实现(ViewPager)

    本例使用ViewPager实现滑动切换的效果.本例涉及的ViewPager.为android.support.v4.view.ViewPager.所以须要在android项目中导入android-su ...

  6. OpenCV, color reduction method

    转载请注明出处!!!http://blog.csdn.net/zhonghuan1992 OpenCV, colorreduction method 目标: 这次学习的目标是回答以下的几个问题: 1 ...

  7. 不root的情况下 查看App的数据表

    一直以来查看sqlite的数据库都须要root才干查看,可是公司的好多測试机root起来比較麻烦~~~ 近期刚好项目上线,略闲, 于是决定写一个libraryproject便于以后调试代码 关键代码例 ...

  8. android中的返回键与Activity

          我在做应用时遇到一个问题.就是在启动主页面时须要预先载入一些数据.我是在一个载入页中处理完这些数据然后再转到主页面.但当我在主页面中按返回键时,系统会返回载入页面.我不希望载入页在使用完之 ...

  9. ZOJ 2334(Monkey King-左偏树第一题)

    Monkey King Time Limit: 10 Seconds      Memory Limit: 32768 KB Once in a forest, there lived N aggre ...

  10. Portal.MVC

    Portal.MVC Portal.MVC 简介 项目是基于MVC4+EF,带有角色,权限,用户中心及账户相关(登录,注册,修改密码,找回密码等)等基本功能.参考的开源项目nopcommerce,这是 ...