老兄,快来一起过春天!(六)

Spring整合Struts1.X

 

新建web工程 composeStruts ,使用MyEclipse先后加入Struts1.2、Spring2.0
注意:选择 Spring2.0 jar包时注意将 Spring 2.0 web Libraries 导入,结构如下:

 

打开web.xml,加入Spring监听:
  <listener>
   <listener-class>
    org.springframework.web.context.ContextLoaderListener
   </listener-class>
 </listener>

 

到com.test.struts.action下新建action类:UserAction

  1. ackage com.test.struts.action;
  2. import javax.servlet.http.HttpServletRequest;
  3. import javax.servlet.http.HttpServletResponse;
  4. import org.apache.struts.action.ActionForm;
  5. import org.apache.struts.action.ActionForward;
  6. import org.apache.struts.action.ActionMapping;
  7. import org.springframework.context.ApplicationContext;
  8. import org.springframework.web.struts.ActionSupport;
  9. import com.test.spring.UserBean;
  10. import com.test.struts.form.UserForm;
  11. public class UserAction extends Action {
  12.     private UserBean userbean;  
  13.     
  14.     public ActionForward execute(ActionMapping mapping, ActionForm form,
  15.             HttpServletRequest request, HttpServletResponse response) {
  16.         UserForm userForm = (UserForm) form;
  17.         return null;
  18.     }
  19.     public UserBean getUserbean() {
  20.         return userbean;
  21.     }
  22.     public void setUserbean(UserBean userbean) {
  23.         this.userbean = userbean;
  24.     }
  25. }

到com.test.struts.form下新建form类:UserForm

  1. package com.test.struts.form;
  2. import javax.servlet.http.HttpServletRequest;
  3. import org.apache.struts.action.ActionErrors;
  4. import org.apache.struts.action.ActionForm;
  5. import org.apache.struts.action.ActionMapping;
  6. public class UserForm extends ActionForm {
  7.     
  8.     private String uname;
  9.     private String upwd;
  10.     public ActionErrors validate(ActionMapping mapping,
  11.             HttpServletRequest request) {
  12.         return null;
  13.     }
  14.     public void reset(ActionMapping mapping, HttpServletRequest request) {
  15.     }
  16.     public String getUname() {
  17.         return uname;
  18.     }
  19.     public void setUname(String uname) {
  20.         this.uname = uname;
  21.     }
  22.     public String getUpwd() {
  23.         return upwd;
  24.     }
  25.     public void setUpwd(String upwd) {
  26.         this.upwd = upwd;
  27.     }
  28. }

还需要有一个Spring管理bean,到com.test.spring下新建类:UserBean

  1. package com.test.spring;
  2. public class UserBean {
  3.     private String username;
  4.     private String userpwd;
  5.     
  6.     public String getUsername() {
  7.         return username;
  8.     }
  9.     public void setUsername(String username) {
  10.         this.username = username;
  11.     }
  12.     public String getUserpwd() {
  13.         return userpwd;
  14.     }
  15.     public void setUserpwd(String userpwd) {
  16.         this.userpwd = userpwd;
  17.     }
  18.     
  19. }

在 WebRoot下加入两个jsp文件:

index.jsp:

  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4.   <head>
  5.     <title>Test</title>
  6.     <meta http-equiv="pragma" content="no-cache">
  7.     <meta http-equiv="cache-control" content="no-cache">
  8.     <meta http-equiv="expires" content="0">    
  9.   <body>
  10.     <a href="/testCompose/user.do">Click me</a>
  11.   </body>
  12. </html>

main.jsp:

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4.   <head>
  5.     <title>Test OK</title>
  6.     <meta http-equiv="pragma" content="no-cache">
  7.     <meta http-equiv="cache-control" content="no-cache">
  8.     <meta http-equiv="expires" content="0">
  9.   </head>  
  10.   <body>
  11.     <li><h1>name:${userForm.uname}</h1></li>
  12.     <li><h1>name:${userForm.upwd}</h1></li>
  13.   </body>
  14. </html>

打开ApplicationContext.xml,加入数据管理bean并初始化数据:
 <bean id="userbean" class="com.test.spring.UserBean" >
  <property name="username" value="admin"></property>
  <property name="userpwd" value="123456"></property>
 </bean>

 

下面开始整合工作:

Spring整合Struts1.X有三种方式,第一种是以插件形式利用Struts-Config.xml进行整合的方式:

1、改动UserAction,将父类更改为Spring中org.springframework.web.struts包下的ActionSupport类:

  1. ...
  2. public class UserAction extends ActionSupport {
  3. ...

类中有私有属性:
private UserBean userbean;
及其它相关的set、get方法,以便在Spring中注入属性。

 

接着在execute方法中加入更改代码:

  1. ApplicationContext context = getWebApplicationContext();
  2. this.setUserbean((UserBean)context.getBean("userbean"));
  3. System.out.println("用户名" + this.getUserbean().getUsername() + "    密码:" + this.getUserbean().getUserpwd());
  4. return mapping.findForward("testok");

打开Struts-Config.xml,在资源文件 <message-resources parameter="com.test.struts.ApplicationResources" /> 后加入插件:

  1.   <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
  2.     <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
  3.   </plug-in>

注意applicationContext.xml的位置,MyEclipse导入Spring后,默认是在src目录下生成此文件。如果不想移动到WEB-INF下,可以写为:

  1.   <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
  2.     <set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml"/>
  3.   </plug-in>

这样就保证了Struts-Config.xml被启动的同时也读取了applicationContext.xml。

注意,Action类继承了Spring包下的ActionSupport,而 getWebApplicationContext() 方法正是 ActionSupport 类提供的,他返回了由Struts启动的Spring配置文件上下文。因此 UserAction 通过这两句可轻易获取Spring容器,并获得需要的bean。可达到整合目的。但这样做的缺点是将Spring与Struts的距离拉近了,如Spring的xml发生变化,如beanID发生更改,那Struts的代码必须也跟着改。明显离 Spring Struts 达到 兵不识将 将不知兵的状态太远。


二、使用 DelegatingRequestProcessor 或 DelegatingActionProxy

1、将Action类改回原来继承的Struts Action类;

2、删除示例一中获得Spring上下文、获得Spring管理bean的前两句代码,保留后两句代码;

3、依然保留从Struts-Config.xml 启动Spring配置;


在Struts-Config.xml找到userAction声明:

  1.     <action
  2.       attribute="userForm"
  3.       name="userForm"
  4.       path="/user"
  5.       scope="request"
  6.       type="com.test.struts.action.UserAction" >
  7.       <forward name="testok" path="/main.jsp"></forward>
  8.   </action>

将type属性更改为:org.springframework.web.struts.DelegatingActionProxy。 

目的是把action的type设定为Spring管理的struts action代理,这样 Struts 并不与Spring 发生代码上的联系,只需要 — Spring 把请求拦截转发到 Spring 管理的相应管理bean中。


如果action比较多,每个都更改太繁琐的话,可以在资源文件声明前加上:

  1. <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor" />

使用了DelegatingRequestProcessor类,则action声明中的type属性都可以不要了,所有的Action请求都会被DelegatingRequestProcessor 自动转发。 

而这三者的顺序一定得是:
<controller .....
<message-resources .....
<plug-in .....
否则会报Struts-Config.xml的配置节点错误,虽然亦可运行,但报错始终是不大好看的。

 

Struts-Config.xml 改造好以后,回头来看ApplicationContext.xml
由于Struts通过DelegatingActionProxy代理或DelegatingRequestProcessor类将用户请求都转发到Spring来处理,Spring接收请求后,会在Context上下文查找与用户请求相关的管理bean。因此,在App...xml要需要有跟Struts-Config.xml中Action声明设定的name属性一模一样的bean。如:

Struts-Config.xml中有:

  1.     <action
  2.       attribute="userForm"
  3.       name="userForm"
  4.       path="/user"
  5.       scope="request">
  6.       <forward name="testok" path="/main.jsp"></forward>
  7.   </action>

ApplicationContext.xml中就应该有:

  1. <bean name="/user" class="com.test.struts.action.UserAction">
  2.   <property name="userbean" ref="userbean">
  3.   </property>
  4. </bean>

它们的name是一模一样的,连"/"都不能落下,否则会发生500错误,报在Spring配置上下文中找不到"/user",发生空指针错误。还有bean中"/user"的属性只能是name,因为有反斜杠,id不能通过xml验证。

最终以插件形式一番整合下来,Struts-Config.xml内容为:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
  3. <struts-config>
  4.   <data-sources />
  5.   <form-beans >
  6.     <form-bean name="userForm" type="com.test.struts.form.UserForm" />
  7.   </form-beans>
  8.   <global-exceptions />
  9.   <global-forwards />
  10.   <action-mappings >
  11.     <action
  12.       attribute="userForm"
  13.       name="userForm"
  14.       path="/user"
  15.       scope="request">
  16.       <forward name="testok" path="/main.jsp"></forward>
  17.   </action>
  18.   </action-mappings>
  19.   
  20.   <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor" />
  21.     
  22.   <message-resources parameter="com.test.struts.ApplicationResources" />
  23.   
  24.   <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
  25.     <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
  26.   </plug-in>
  27.   
  28. </struts-config>

ApplicationContext.xml内容为:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans
  3.     xmlns="http://www.springframework.org/schema/beans"
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
  6.     <bean id="userbean" class="com.test.spring.UserBean" >
  7.         <property name="username" value="admin"></property>
  8.         <property name="userpwd" value="123456"></property>
  9.     </bean>
  10.     
  11.     <bean name="/user" class="com.test.struts.action.UserAction">
  12.         <property name="userbean" ref="userbean">
  13.         </property>
  14.     </bean>
  15. </beans>

确定无误部署到Tomcat5.5下启动,在index.jsp下点击链接,可以看到页面已成功请求到Spring管理bean,最后跳转到main.jsp页面。

 

 

控制台打印出:
用户名admin    密码:123456

 

 

Spring整合Struts2.0

 

新建工程:ComposeStruts2,结构如下:

 

一、复制jar包

到 http://struts.apache.org/download.cgi#struts20112 下载Struts2包,建议用 2.0.11.2 版本。
xwork-2.0.4.jar
struts2-spring-plugin-2.0.11.1.jar
struts2-core-2.0.11.1.jar
ognl-2.6.11.jar
freemarker-2.3.8.jar
commons-logging-1.0.4.jar

 

Spring包:

MyEclipse加入 Spring Code包 Spring Web包

 

二、Struts2、Spring启动配置

Web.xml中加入Struts2启动配置:

  1.  <display-name>Struts2Project</display-name>
  2.  <filter>
  3.   <filter-name>Struts_filter</filter-name>
  4.   <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
  5.  </filter>
  6.  <filter>
  7.   <filter-name>struts2</filter-name>
  8.   <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  9.  </filter>
  10.  <filter-mapping>
  11.   <filter-name>Struts_filter</filter-name>
  12.    <url-pattern>/*</url-pattern>
  13.   </filter-mapping>
  14.  <filter-mapping>
  15.  <filter-name>struts2</filter-name>
  16.   <url-pattern>/*</url-pattern>
  17.  </filter-mapping>

Web.xml中加入Spring启动配置:

  1.     <listener>
  2.        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  3.     </listener>
  4.     <context-param>
  5.         <param-name>contextConfigLocation</param-name>
  6.         <param-value>/WEB-INF/applicationContext.xml</param-value>
  7.   </context-param>

三、加入配置文件:
在工程src下,加入Struts配置文件:struts.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">
  5. <struts>
  6.     <constant name="struts.objectFactory" value="spring" />
  7.     <include file="struts-default.xml"/>
  8.     <package name="default" extends="struts-default">
  9.         <action name="user" class="useraction">
  10.             <result name="testok">/main.jsp</result>
  11.         </action>
  12.     </package>
  13. </struts>

可以看到Struts2已经配置指定了Action的对象实例由Spring工厂产生,因此在下面action的class声明中已经不需要指定属性class的路径,指定路径的工作交由ApplicationContext.xml文件完成,Struts.xml只需要将Spring管理的Action类的beanid赋给class就可以了。

在WEB-INF下打开Spring配置文件:applicationContext.xml,在beans节点下加入

  1.     <bean id="usermodel" class="com.test.model.UserModel">
  2.         <property name="username" value="admin"></property>
  3.         <property name="userpwd" value="123456"></property>
  4.     </bean>
  5.     
  6.     <bean id="useraction" class="com.test.struts.action.UserAction" >
  7.         <property name="usermodel" ref="usermodel"></property>
  8.     </bean>

三:
在model下新建usermodel类:

  1. package com.test.model;
  2. public class UserModel {
  3.     
  4.     private String username;
  5.     private String userpwd;
  6.     
  7.     public String getUsername() {
  8.         return username;
  9.     }
  10.     public void setUsername(String username) {
  11.         this.username = username;
  12.     }
  13.     public String getUserpwd() {
  14.         return userpwd;
  15.     }
  16.     public void setUserpwd(String userpwd) {
  17.         this.userpwd = userpwd;
  18.     }
  19. }

在action包下新建useraction类:

  1. package com.test.struts.action;
  2. import com.opensymphony.xwork2.ActionSupport;
  3. import com.test.model.UserModel;
  4. public class UserAction extends ActionSupport {
  5.     
  6.     private UserModel usermodel;
  7.     private String errorstr;
  8.     public String execute() throws Exception {
  9.         if(usermodel.getUsername().equals("admin") && usermodel.getUserpwd().equals("123456")){
  10.             System.out.println("验证通过");
  11.             this.setErrorstr("TestOK");
  12.         }
  13.         else{
  14.             this.setErrorstr("Test Error");
  15.         }
  16.         return "testok";
  17.     }
  18.     public UserModel getUsermodel() {
  19.         return usermodel;
  20.     }
  21.     public void setUsermodel(UserModel usermodel) {
  22.         this.usermodel = usermodel;
  23.     }
  24.     public String getErrorstr() {
  25.         return errorstr;
  26.     }
  27.     public void setErrorstr(String errorstr) {
  28.         this.errorstr = errorstr;
  29.     }
  30. }

WebRoot下新建2个jsp文件

index.jsp

  1. <%@ page language="java" pageEncoding="UTF-8"%>
  2. <%@taglib uri="/struts-tags" prefix="s" %>
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4. <html>
  5.   <head>
  6.     <title>Test struts2</title>
  7.     <meta http-equiv="pragma" content="no-cache">
  8.     <meta http-equiv="cache-control" content="no-cache">
  9.     <meta http-equiv="expires" content="0">    
  10.   </head>
  11.   
  12.   <body>
  13.     <a href="/ComposeStruts2/simple/user.action">Click me</a>
  14.   </body>
  15. </html>

main.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%@taglib uri="/struts-tags" prefix="s" %>
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4. <html>
  5.   <head>
  6.     <title>Test OK</title>
  7.     <meta http-equiv="pragma" content="no-cache">
  8.     <meta http-equiv="cache-control" content="no-cache">
  9.     <meta http-equiv="expires" content="0">
  10.   </head>
  11.   <body>
  12.     <s:iterator id="usermodel" value="user">
  13.         <s:property value="username" />
  14.         <s:property value="userpwd" />
  15.     </s:iterator>
  16.     Test Result:  <s:property value="errorstr" />
  17.   </body>
  18. </html>

将工程部署到Tomcat下运行,如果单击 Click me 发生无法找到action的404错误,打开一下Tomcat目录 webapps 下的工程目录,打开web-inf下的lib,查看是否存在 log4j-x.x.x.jar 、asm 包,如果存在删除即可。

如无意外单击 Click me 链接后可看到链接通过 Struts.xml 中action节点定义的class属性,在ApplicationContext中找到与之相同的Spring管理bean,由此达到 Spring 管理 Struts Action 类的目的。

 

程序最终运行到 main.jsp :

        Test Result: TestOK

如在ApplicationContext将UserModel初始值改变,将得到

       Test Result: TestError

 

Spring 管理 Ibatis

 

一、数据库准备(Oracle):

新建数据库
create table userinfo
(
   userid number(2),
   username varchar2(15),
   upwd varchar2(40)
)
插入测试数据
insert into userinfo values(1,'test1','123456')
insert into userinfo values(2,'test2','654321')

 

新建工程 ComposeIbatis,结构如图:

 

增加Myeclipse下Spring包,注意把COREAOP/WEB/,以及最重要的IBATIS ORM包导入
增加Struts2的jar包
增加 DB 驱动jar包

 

web.xml 下加入启动 Spring  Struts

  1.     ...........
  2. <display-name>Struts2Project</display-name>
  3.     <filter>
  4.         <filter-name>Struts_filter</filter-name>
  5.         <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
  6.     </filter>
  7.     <filter>
  8.         <filter-name>struts2</filter-name>
  9.         <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  10.     </filter>
  11.     <filter-mapping>
  12.         <filter-name>Struts_filter</filter-name>
  13.             <url-pattern>/*</url-pattern>
  14.         </filter-mapping>
  15.     <filter-mapping>
  16.     <filter-name>struts2</filter-name>
  17.         <url-pattern>/*</url-pattern>
  18.     </filter-mapping>
  19.     
  20.     <listener>
  21.        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  22.     </listener>
  23.     <context-param>
  24.         <param-name>contextConfigLocation</param-name>
  25.         <param-value>/WEB-INF/applicationContext.xml</param-value>
  26.     </context-param>
  27. ................

在src下新建 struts.xml Struts配置文件:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">
  5. <struts>
  6.     <constant name="struts.objectFactory" value="spring" />
  7.     <include file="struts-default.xml"/>
  8.     <package name="default" extends="struts-default">
  9.         <action name="user" class="useraction">
  10.             <result name="testok">/main.jsp</result>
  11.         </action>
  12.     </package>
  13. </struts>

Struts.xml的配置中已经设定所有Struts对象将从Spring产生,如:在请求定义为 user 的 Action 时,系统会到 Spring 中查找id与之Action声明中的class属性相同的bean,将请求转发到这个bean中处理。

 

在struts包下放置action类及业务service类;

  1. package com.test.struts.action;
  2. import java.util.List;
  3. import com.opensymphony.xwork2.ActionSupport;
  4. import com.test.struts.service.UserService;
  5. public class UserAction extends ActionSupport {
  6.     private UserService user; 
  7.     private List userlist;
  8.     public String execute() throws Exception {
  9.         List list = user.getUserInfo();
  10.         this.setUserlist(list);
  11.         
  12.         return "testok";
  13.     }
  14.     public UserService getUser() {
  15.         return user;
  16.     }
  17.     public void setUser(UserService user) {
  18.         this.user = user;
  19.     }
  20.     public List getUserlist() {
  21.         return userlist;
  22.     }
  23.     public void setUserlist(List userlist) {
  24.         this.userlist = userlist;
  25.     }
  26. }

这个类有一个属性需要 Spring 注入 - private UserService user; 在ApplicationContext.xml 中加入依赖注入:

  1. <bean id="useraction" class="com.test.struts.action.UserAction">
  2.     <property name="user" ref="user_service"></property>
  3. </bean>

而注入是用ref 注入的,意味着 ApplicationContext.xml 中还应该有管理bean user_service。

暂且不管,在service包下加入业务service类UserService:

  1. package com.test.struts.service;
  2. import java.util.List;
  3. import com.test.dao.IUserDao;
  4. public class UserService {  
  5.     private IUserDao dao;   
  6.     public List getUserInfo()
  7.     {
  8.         List list = null;
  9.         list = dao.getUserInfo();       
  10.         return list;
  11.     }
  12.     public synchronized IUserDao getDao() {
  13.         return dao;
  14.     }
  15.     public synchronized void setDao(IUserDao dao) {
  16.         this.dao = dao;
  17.     }
  18. }

将这个服务类做为Spring管理bean user_service,这个bean就是 useraction 需要注入的bean:

  1.     <bean id="user_service" class="com.test.struts.service.UserService">
  2.         <property name="dao" ref="iBatisDao"></property>
  3.     </bean>

而 UserService.java 类也有注入属性 dao ,于是管理bean 也用另外一个管理 bean  iBatisDao 进行了依赖注入 。

暂且不管管理bean iBatisDao 的声明,到dao包下新建接口IUserDao:

  1. package com.test.dao;
  2. import java.util.List;
  3. public interface IUserDao {
  4.     public List getUserInfo();  
  5. }

及impl包下的接口实现类 UserImpl :

  1. package com.test.dao.impl;
  2. import java.util.List;
  3. import com.test.ibatis.sqlmap.StaticSqlString;
  4. import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
  5. import com.test.dao.IUserDao;
  6. public class UserImpl extends SqlMapClientDaoSupport implements IUserDao {
  7.     public List getUserInfo() {
  8.         List list = null;
  9.         list = this.getSqlMapClientTemplate().queryForList(StaticSqlString.getSELECT_ALL_USER());
  10.         System.out.println(list.size());        
  11.         return list;
  12.     }
  13. }

注意 UserImpl  除了实现IUserDao 接口外,还集成了一个特殊的类:SqlMapClientDaoSupport 。 它是Spring提供的一个将Ibatis对象SqlMapClient 进行包装了的对象,使用这个对象将不会再去理会 SqlException ,SqlException将在这个类中得到Spring的处理,而它的使用方法完全与SqlMapCliect一样。而bean user_service 需要注入的bean iBatisDao 将用这个实现类进行注入。

  1.     <!-- 使用iBatis实现的DAO -->
  2.     <bean id="iBatisDao" class="com.test.dao.impl.UserImpl">
  3.         <property name="sqlMapClient">
  4.             <bean class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
  5.                 <property name="configLocation">
  6.                     <value>classpath:com/test/ibatis/sqlmap/sqlMapConfig.xml</value>
  7.                 </property>
  8.                 <property name="dataSource" ref="dataSource" />
  9.             </bean>
  10.         </property>
  11.     </bean>

SqlMapClientDaoSupport 在Spring 配置中声明时,需要注入sqlMapClient实例,因此需要将 得到 IBatis 的配置文件 sqlMapConfig.xml 与数据库连接dataSource配置的sqlMapClient示例进行依赖注入。

 

下面是数据库连接bean:dataSource:

  1.     <!-- 定义DataSource -->
  2.     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  3.         <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
  4.         <property name="url" value="jdbc:oracle:thin:@10.132.224.XXX:1521:XXXX" />
  5.         <property name="username" value="XXXXX" />
  6.         <property name="password" value="XXXXX" />
  7.     </bean>

 

到此 Spring 管理 Ibatis 的整合完成。

 

到 model 包下新建 Ibatis 数据模型类:UserModel -对应数据库表:userinfo表

  1. package com.test.model;
  2. import java.sql.Date;
  3. public class UserModel {
  4.     
  5.     private String userid;
  6.     private String username;
  7.     private String upwd;
  8.     public String getUserid() {
  9.         return userid;
  10.     }
  11.     public void setUserid(String userid) {
  12.         this.userid = userid;
  13.     ..............
  14.         this.upwd = upwd;
  15.     }
  16. }

到 sqlmap 包下新建 Ibatis 配置文件:sqlMapConfig.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE sqlMapConfig SYSTEM "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
  3. <sqlMapConfig>
  4.     <sqlMap resource="com/test/ibatis/xml/x_test.xml" />
  5. </sqlMapConfig>

sqlmap包下新建负责传递Ibatis 需要的sql语句id类:StaticSqlString

  1. package com.test.ibatis.sqlmap;
  2. public class StaticSqlString {  
  3.     private static String SELECT_ALL_USER = "s_all_user";
  4.     public static synchronized String getSELECT_ALL_USER() {
  5.         return SELECT_ALL_USER;
  6.     }
  7.     public static synchronized void setSELECT_ALL_USER(String select_all_user) {
  8.         SELECT_ALL_USER = select_all_user;
  9.     } 
  10. }

到xml包下新建Ibatis 查询配置文件:x_test.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE sqlMap SYSTEM "http://www.ibatis.com/dtd/sql-map-2.dtd">
  3. <sqlMap>
  4.     <typeAlias alias="userinfo"
  5.         type="com.test.model.UserModel" />
  6.     <select id="s_all_user" resultClass="userinfo">
  7.         <![CDATA[
  8.             SELECT * FROM USERINFO
  9.         ]]>
  10.     </select>
  11. </sqlMap>

到webRoot下新建jsp文件:

index.jsp:

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%@taglib uri="/struts-tags" prefix="s" %>
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4. <html>
  5.   <head>    
  6.     <title>Test</title>
  7.   </head>  
  8.   <body>
  9.     <a href="/ComposeIbatis/user.action">Click Me</a>
  10.   </body>
  11. </html>

main.jsp:

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%@taglib uri="/struts-tags" prefix="s" %>
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4. <html>
  5.   <head>    
  6.     <title>Test OK</title>    
  7.   </head>  
  8.   <body>
  9.     <table>
  10.         <s:iterator id="user" value="userlist">
  11.         <tr>
  12.             <td><s:property value="userid" /></td>
  13.             <td><s:property value="userame" /></td>
  14.             <td><s:property value="upwd" /></td>
  15.         </tr>
  16.         </s:iterator>
  17.     </table>
  18.   </body>
  19. </html>

部署运行,点击Click Me 提交请求到user.action ,请求将从Struts 转发到 Spring 管理 Bean 中,通过 Spring 的 SqlMapClientTemplate 获取到数据库数据,转而呈现在页面上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值