SSH配置之一 14:53 2011-1-2 ----------------------------在Myeclipse里增加Spring Hibernate struts capabilities Add MyEclipse Spring Hibernate struts and User libraries to project 在Myeclipse点击项目右键 再点列表里的Myeclipse 选 Spring Hibernate struts hibernate.hbm.xml 1myeclipse - hibernate ibm db2(Universal driver) myeclipse-spring (包冲突 只留一个 asm2.23 util commonslogging ) 3+web hibernate 添加struts 2(dojo..)+spring-lib ------------------------------------------------创建文件夹 conf 将applicationContext.xml放到conf下 修改applicationContext.xml的在 - web.xml->conf/ <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:conf/applicationContext.xml</param-value> </context-param> ----------------------------------------------------------------------------划分三大框架com.zyl.hiber 建包 com.zyl.hiber.po 逆向工程 idetety ------------------------------------------------------Users.java com.zyl.hiber.po 写usersname 和password的构造方法 方便测试 所有字段 toString equals //添加映射User.hbm.xml到hibernate.hbm.xml //逆向工程的结果 import java.util.Date; import java.util.HashSet; import java.util.Set; /** * Users entity. @author MyEclipse Persistence Tools */ public class Users implements java.io.Serializable { // Fields private Long usersid;//---->容易自动生成long改成-->Long private String usersname; private String password; private Date regdate; // Constructors /** default constructor */ public Users() { } /** full constructor */ public Users( String usersname, String password, Date regdate) { this.usersname = usersname; this.password = password; this.regdate = regdate; } // Property accessors public Long getUsersid() { return this.usersid; } public void setUsersid(Long usersid) { this.usersid = usersid; } public String getUsersname() { return this.usersname; } public void setUsersname(String usersname) { this.usersname = usersname; } public String getPassword() { return this.password; } public void setPassword(String password) { this.password = password; } public Date getRegdate() { return this.regdate; } public void setRegdate(Date regdate) { this.regdate = regdate; } @Override public String toString() { return "Users [password=" + password + ", regdate=" + regdate + ", usersid=" + usersid + ", usersname=" + usersname + "]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((password == null) ? 0 : password.hashCode()); result = prime * result + ((regdate == null) ? 0 : regdate.hashCode()); result = prime * result + ((usersid == null) ? 0 : usersid.hashCode()); result = prime * result + ((usersname == null) ? 0 : usersname.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Users other = (Users) obj; if (password == null) { if (other.password != null) return false; } else if (!password.equals(other.password)) return false; if (regdate == null) { if (other.regdate != null) return false; } else if (!regdate.equals(other.regdate)) return false; if (usersid == null) { if (other.usersid != null) return false; } else if (!usersid.equals(other.usersid)) return false; if (usersname == null) { if (other.usersname != null) return false; } else if (!usersname.equals(other.usersname)) return false; return true; } } ------------------------------------------------------IUsersDAO.java com.zyl.hiber.dao interface -IUserDAO public void saveUsers(Users users)throws HibernateException;//saveUsers是写保存用户是后集成的16:33 2011-1-2 public Users findUsersByProperties(String username,String password)throws HibernateException; ------------------------------------------------------IUsersDAOImpl.java package com.zyl.hiber.daoimpl; import java.util.List; import org.hibernate.HibernateException; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; //编写实现 IUserDAOImpl import com.ibm.db2.jcc.am.u; public class IUsersDAOImpl extends HibernateDaoSupport implements IUsersDAO { public Users findUsersByProperties(String username, String password) throws HibernateException { Users users = new Users(username, null, null); List<Long> queryResult = this .getHibernateTemplate() .find( "select u.usersid from Users u where u.usersname =? and u.password= ?",new String[] { username, password }); if (queryResult != null && queryResult.size() == 1) { users.setUsersid(queryResult.get(0)); return users; } else { return users; } } //saveUsers是写保存用户是后集成的16:33 2011-1-2 public void saveUsers(Users users) throws HibernateException { this.getHibernateTemplate().save(users); } } -------------------------------------------------------beans-dao.xml 选 Schema http://www.springframework.org/schema/beans/spring-bean2.5.xsd root elements 选beans 不要Prefix p <bean id="usersDao" class="com.zyl.hiber.daoimpl.IUsersDAOImpl"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean> -------------------------------------------------------IusersDAOTestCase.java JUnit 右键点击要测的文件-选JUnit4包选com.zyl.dao.test - new - others - Junit - Junit Test Case - new Junit4 - name:XxxTestCase IusersDAOTestCase 方法都要测 setUpBeforeClass tearDownAfterClass setup teardown 测试方法 import org.junit.After; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; public class IUsersDAOImplTestCase { private static BeanFactory beanFactory; private IUsersDAO usersDao = null; @BeforeClass public static void setUpBeforeClass() throws Exception { beanFactory = new ClassPathXmlApplicationContext(new String[] { "conf/applicationContext.xml" }); } @AfterClass public static void tearDownAfterClass() throws Exception { beanFactory = null; } @Before public void setUp() throws Exception { usersDao = (IUsersDAO) beanFactory.getBean("usersDao"); } @After public void tearDown() throws Exception { usersDao = null; } @Test public void testFindUsersByProperties() { Users users = usersDao.findUsersByProperties("gary1","1234"); Assert.assertNotNull("HQL错误",users); Assert.assertNull("逻辑错误",users.getUsersid()); System.out.println(users); } } ---------------------------------------------------------------------------------------com.zyl.spring ----------------------------------------------------------------------------------com.zyl.spring.service -------------------------------------------------------IUsersService.java com.zyl.spring.service interface-IusersService //业务方法 public boolean findUsersByNameAndPass(Users users); public boolean saveUsers(Users users); ---------------------------------------------------------------------com.zyl.spring.serviceIpml -------------------------------------------------------IusersServiceImpl.java com.zyl.spring.serviceIpml 实现IusersService IusersServiceImpl implemts IUSersService{ private userDao setter and getter //核心业务方法 findUsersBynameAndPass(users){ //限制输入时.Users中不应该有ID !=null users =usersDao.findByProperties(users)//try catch //查询后User应该有 ID getuserID } } 实现saveUsers import org.hibernate.HibernateException; public class IUsersServiceImpl implements IUsersService { private IUsersDAO usersDao; public IUsersDAO getUsersDao() { return usersDao; } public void setUsersDao(IUsersDAO usersDao) { this.usersDao = usersDao; } // 核心业务功能 public boolean findUsersByNameAndPass(Users users) { if (users == null) return false; // 限制输入时,Users中不应该有ID if (users.getUsersid() != null) return false; try { users = usersDao.findUsersByProperties(users.getUsersname(), users .getPassword()); } catch (HibernateException e) { e.printStackTrace(); return false; } // 查询后User应该有ID if (users.getUsersid() != null) return true; else return false; } public boolean saveUsers(Users users) { boolean isSaved = false; if (null == users) return false; if (null != users.getUsersid()) return false; try { usersDao.saveUsers(users); isSaved = true; } catch (Exception e) { e.printStackTrace(); isSaved = false; } return isSaved; } } ---------------------------------------------------------------------com.zyl.spring.serviceIpml.test -------------------------------------------------------IusersServiceImplTestCase //测试核心业务 private IUserService @before setup 从bean中取 Usersservice对象 TestFindUsersByNameAndID new Users("zyl" "123") 断言 查询错误 conditions syso conditions public class IUsersServiceImplTestCase { private static ApplicationContext beanFactory; private IUsersService usersService; @BeforeClass public static void setUpBeforeClass() throws Exception { beanFactory = new ClassPathXmlApplicationContext(new String[] { "conf/applicationContext.xml"}); } @AfterClass public static void tearDownAfterClass() throws Exception { beanFactory = null; } @Before public void setUp() throws Exception { usersService = (IUsersService)beanFactory.getBean("usersServiceProxy"); } @After public void tearDown() throws Exception { usersService = null; } //@Test public void testFindUsersByNameAndPass() { Users users = new Users("gary","1234",null); boolean isFound = usersService.findUsersByNameAndPass(users); Assert.assertTrue("数据錯誤",isFound); System.out.println(isFound); } @Test public void testSaveUsers(){ Users users = new Users("gg","123456",null); boolean isSaved = usersService.saveUsers(users); Assert.assertTrue("插入失败",isSaved); } } -------------------------------------------------------beans-service.xml <bean id="userService" class=IusersServiceImpl> <property name="usersDao"> <ref>//每一次都是new出来的 </property> 事物代理(具有增强功能的代理) id userServiceProxy 继承paretent txProxy 代理UserService taget <bean id="usersService" class="com.zyl.spring.serviceimpl.IUsersServiceImpl"> <property name="usersDao"> <ref bean="usersDao"/> </property> </bean> <bean id="usersServiceProxy" parent="txProxy"> <property name="target" ref="usersService"></property> <property name="proxyTargetClass" value="false"></property> <property name="proxyInterfaces"> <list><value>com.zyl.spring.service.IUsersService</value></list> </property> </bean> -------------------------------------------------------applicationContext.xml <!--通过代理工厂配置事物--> id=tx class="hibernate3" id=txProxy class="transaction" -property name -props //Spring的事物属性意义transactionAttributes *必背 --prop key <来源web.xml>impotr resource //Spring的事物属性意义transactionAttributes PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。 PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。 PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。 PROPAGATION_NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。 如果出现<prop key="myMethod">PROPAGATION_REQUIRED,readOnly,-Exception </prop> 其中: -Exception表示有Exception抛出时,事务回滚. -代表回滚+就代表提交 readonly 就是read only, 设置操作权限为只读,一般用于查询的方法,优化作用. <!-- 通过代理工厂配置事务--> <bean id="tx" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <bean abstract="true" id="txProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager" ref="tx"></property> <property name="transactionAttributes"> <props> <prop key="save*"> PROPAGATION_REQUIRED,-Exception </prop> <prop key="find.*"> PROPAGATION_REQUIRED,readOnly,-Exception </prop> </props> </property> </bean> <import resource="beans-dao.xml"/> <import resource="beans-service.xml"></import> <import resource="beans-action.xml"></import> ----------------------------------------------------------------------------com.zyl.struts 集成框架 右键 dwr dojo struts2-spring Liberty core 删除一些包 就剩struts spring plug -------------------------------------------------------index.jsp 1<%@ taglib uri="/struts-tags" prefix="s" %> 2<body> -<s:form action="LoginAtion"> -<S:textfield name="users.usersname" 如果国际化用KEY //动态方法调用 !login <S:actionerror <body> <s:actionerror/> <s:actionmessage/> <s:form name="loginForm" action="LoginAction" namespace="/entrance" method="post"> <s:textfield name="users.usersname" label="用户名"></s:textfield> <s:password name="users.password" label="密码"></s:password> <s:submit value="登录"></s:submit> </s:form> </body> -------------------------------------------------------------------文件夹jsp -------------------------------------------------------welcome.jsp <s:actionmessage/> 登录成功!<br> -------------------------------------------------------struts.xml DTD.struts http://struts.apache.org/dtds/struts-2.1.dtd global 将login设成全局的在异常前边 package name=entrancePck extends 全局的异常映射 出现错误 到input视图上 -action"LoginAction" class --result /jsp/welcome ---result input ---result login <package name="entrancePack" namespace="/entrance" extends="struts-default"> <global-results> <result name="login">/index.jsp</result> </global-results> <global-exception-mappings> <exception-mapping result="input" exception="java.lang.Exception"></exception-mapping> </global-exception-mappings> <action name="LoginAction" class="loginAction" method="login"> <result>/jsp/welcome.jsp</result> <result name="input">/index.jsp</result> </action> <action name="LogOutAction" class="logoutAction" method="logout"> <result name="input">/index.jsp</result> </action> </package> -------------------------------------------------------struts.properties (lib包中的 -core --default.property-65行 36行 IoC) struts.objectFactory=spring struts.configuration.xml.reload=true struts.i18n.encode=UTF-8 ----------------------------------------------------------------------------com.zyl.struts.action -------------------------------------------------------EnterAction.java EnterAction extends ActionSupport private Users users private IUsersService 产生settergetter 登陆的方法 { 在session 里面保存一个标记保存登陆的信息ActionContext 产生拦截器 } 退出的方法{ 使用invalidate对象 返回到首页页面 } import org.apache.struts2.ServletActionContext; import com.zyl.hiber.po.Users; import com.zyl.spring.service.IUsersService; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class EnterAction extends ActionSupport { private Users users; private IUsersService usersService; public Users getUsers() { return users; } public void setUsers(Users users) { this.users = users; } public IUsersService getUsersService() { return usersService; } public void setUsersService(IUsersService usersService) { this.usersService = usersService; } public String login(){ boolean isFound = usersService.findUsersByNameAndPass(users); if(isFound){ ActionContext.getContext().getSession().put("loginUser",users.getUsersname()); System.out.println(users.getUsersid()); this.addActionMessage("欢迎"+users.getUsersname()+""); return SUCCESS; }else{ this.addActionError("用户名密码不正确"); return LOGIN; } } public String logout(){ ServletActionContext.getRequest().getSession().invalidate(); return LOGIN; } } -------------------------------------------------------beans-action.xml 在bean容器里面声明你有声明样的对象映射为loginAction bean name loginAction 显示配置 prototype 使Action不是单例模式 是原形 为UsersService赋值 proxy web三大核心 servlet 监听器 拦截器 <bean name="loginAction" class="com.zyl.struts.action.EnterAction" scope="prototype"> <property name="usersService"> <ref bean="usersServiceProxy"/> </property> </bean> <bean name="logoutAction" class="com.zyl.struts.action.EnterAction" scope="prototype"> <property name="usersService"> <ref bean="usersServiceProxy"></ref> </property> </bean> <bean name="saveUsersAction" class="com.zyl.struts.action.UsersAdminAction" scope="prototype"> <property name="usersService"> <ref bean="usersServiceProxy"/> </property> </bean> -------------------------------------------------------web.xml filter ActionCLeanUp FilterDispatcher 登陆验证信息 要更新 不是累加 延迟加载 <listenner> <lis-class>ContextLoaderListener老的tomCat要配servlet而不是Listener 参数<param-name>configContext <filter> <filter-name>ActionContextCleanUp</filter-name> <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class> </filter> <filter-mapping> <filter-name>ActionContextCleanUp</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:conf/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> -------------------------------------------------------表单验证EnterAction-Validation.xml com.zyl.struts.action OpenSympho xwork <validators> <field <field name="users"> <field-validator type="visitor"> <param name="context">UsersContext</param> <param name="appendPrefix">true</param> <message>用户信息:</message> </field-validator> </field> </validators> ----------------------------------------PO中表单验证Users-UserContext-Validation.xml //OpenSymphony Group//XWork Validator 1.0.3//EN http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd" com.zyl.hiber.po 短路 param trim >true< ognl表达式 message>名称长度${minlength}-${maxlength} 要配message-validation-cleanup <!--<validators>--> <!-- <field name="usersname">--> <!-- <field-validator type="requiredstring" short-circuit="true">--> <!-- <param name="trim">true</param>--> <!-- <message>名称不能为空</message>--> <!-- </field-validator>--> <!-- <field-validator type="stringlength">--> <!-- <param name="trim">true</param>--> <!-- <param name="minLength">4</param>--> <!-- <param name="maxLength">10</param>--> <!-- <message>名称长度${minLength}-${maxLength}之间</message>--> <!-- </field-validator>--> <!-- </field>--> <!-- <field name="password">--> <!-- <field-validator type="requiredstring" short-circuit="true">--> <!-- <param name="trim">true</param>--> <!-- <message>密码不能为空</message>--> <!-- </field-validator>--> <!-- <field-validator type="stringlength">--> <!-- <param name="trim">true</param>--> <!-- <param name="minLength">4</param>--> <!-- <message>密码长度${minLength}以上</message>--> <!-- </field-validator>--> <!-- </field>--> <!--</validators>--> ---------------------------------------------------------------------增加操作 -------------------------------------------------------UsersAdminAction.java com.zyl.struts.action private saveUsers(){ this.message } import com.opensymphony.xwork2.ActionSupport; public class UsersAdminAction extends ActionSupport { private Users users; private IUsersService usersService; public Users getUsers() { return users; } public void setUsers(Users users) { this.users = users; } public IUsersService getUsersService() { return usersService; } public void setUsersService(IUsersService usersService) { this.usersService = usersService; } public String saveUsers(){ boolean isSaved = usersService.saveUsers(users); System.out.println(isSaved); if(isSaved){ this.addActionMessage("用户信息保存成功!,请重新登录"); return SUCCESS; } else{ this.addFieldError("users","用户添加失败!"); return INPUT; } } } -------------------------------------------------------AddUsers.jsp 13:53 2011-1-2 <%@ taglib uri="/struts-tags" prefix="s" %> <s:fielderror> <s:param name="users"></s:param> </s:fielderror> <s:form name="usersForm" action="saveUsersAction" namespace="/admin" method="post"> <s:textfield name="users.usersname" label="用户名"></s:textfield> <s:password name="users.password" label="密码"></s:password> <s:submit value="保存"></s:submit> </s:form> </body> <s:filederror 写配置文件 配验证 ------------------------------------------------------- 数据访问对象 访问犯法 业务功能 app.xml事物代理 dao配dao service.xml 业务 Action.xml struts 控制对象 延迟加载 Spring中opensesionInView --------------------------------------------------------------- MyEclipse copy qualified name ssh /ssh/src com.zyl.hiber.dao /ssh/src/com/zyl/hiber/dao/IUsersDAO.java com.zyl.hiber.daoimpl /ssh/src/com/zyl/hiber/daoimpl/IUsersDAOImpl.java com.zyl.hiber.daoimpl.test /ssh/src/com/zyl/hiber/daoimpl/test/IUsersDAOImplTestCase.java com.zyl.hiber.po /ssh/src/com/zyl/hiber/po/Users.java /ssh/src/com/zyl/hiber/po/Users-UsersContext-validation.xml /ssh/src/com/zyl/hiber/po/Users.hbm.xml com.zyl.spring.service /ssh/src/com/zyl/spring/service/IUsersService.java com.zyl.spring.serviceimpl /ssh/src/com/zyl/spring/serviceimpl/IUsersServiceImpl.java com.zyl.spring.serviceimpl.test /ssh/src/com/zyl/spring/serviceimpl/test/IUsersServiceImplTestCase.java com.zyl.struts.action /ssh/src/com/zyl/struts/action/EnterAction.java /ssh/src/com/zyl/struts/action/UsersAdminAction.java /ssh/src/com/zyl/struts/action/EnterAction-validation.xml /ssh/src/com/zyl/struts/action/UsersAdminAction-validation.xml com.zyl.util conf /ssh/src/log4j.properties /ssh/src/struts.properties /ssh/src/struts.xml /ssh/WebRoot /ssh/WebRoot/jsp /ssh/WebRoot/jsp/addusers.jsp /ssh/WebRoot/jsp/welcome.jsp /ssh/WebRoot/META-INF /ssh/WebRoot/WEB-INF /ssh/WebRoot/index.jsp ----------------------------------------------------- USERS表 主键 USERSID BIGINT 8 否 USERSNAME VARCHAR 123 是 PASSWORD VARCHAR 255 是 REGDATE TIMESTAMP 10 是 ------------------------------------------------------ 用到的Lib /ssh/WebRoot/WEB-INF/lib/antlr-2.7.6.jar /ssh/WebRoot/WEB-INF/lib/aopalliance.jar /ssh/WebRoot/WEB-INF/lib/asm-2.2.3.jar /ssh/WebRoot/WEB-INF/lib/asm-commons-2.2.3.jar /ssh/WebRoot/WEB-INF/lib/asm-util-2.2.3.jar /ssh/WebRoot/WEB-INF/lib/aspectjlib.jar /ssh/WebRoot/WEB-INF/lib/aspectjrt.jar /ssh/WebRoot/WEB-INF/lib/aspectjweaver.jar /ssh/WebRoot/WEB-INF/lib/cglib-2.2.jar /ssh/WebRoot/WEB-INF/lib/cglib-nodep-2.1_3.jar /ssh/WebRoot/WEB-INF/lib/commons-attributes-api.jar /ssh/WebRoot/WEB-INF/lib/commons-attributes-compiler.jar /ssh/WebRoot/WEB-INF/lib/commons-codec.jar /ssh/WebRoot/WEB-INF/lib/commons-collections-3.1.jar /ssh/WebRoot/WEB-INF/lib/commons-fileupload.jar /ssh/WebRoot/WEB-INF/lib/commons-httpclient.jar /ssh/WebRoot/WEB-INF/lib/commons-io.jar /ssh/WebRoot/WEB-INF/lib/commons-logging.jar /ssh/WebRoot/WEB-INF/lib/db2jcc_license_cu.jar /ssh/WebRoot/WEB-INF/lib/db2jcc.jar /ssh/WebRoot/WEB-INF/lib/dom4j-1.6.1.jar /ssh/WebRoot/WEB-INF/lib/ehcache-1.2.3.jar /ssh/WebRoot/WEB-INF/lib/ejb3-persistence.jar /ssh/WebRoot/WEB-INF/lib/freemarker.jar /ssh/WebRoot/WEB-INF/lib/hibernate-annotations.jar /ssh/WebRoot/WEB-INF/lib/hibernate-commons-annotations.jar /ssh/WebRoot/WEB-INF/lib/hibernate-entitymanager.jar /ssh/WebRoot/WEB-INF/lib/hibernate-validator.jar /ssh/WebRoot/WEB-INF/lib/hibernate3.jar /ssh/WebRoot/WEB-INF/lib/iText-2.1.3.jar /ssh/WebRoot/WEB-INF/lib/jasperreports-2.0.5.jar /ssh/WebRoot/WEB-INF/lib/javassist-3.9.0.GA.jar /ssh/WebRoot/WEB-INF/lib/jta-1.1.jar /ssh/WebRoot/WEB-INF/lib/jxl.jar /ssh/WebRoot/WEB-INF/lib/log4j-1.2.14.jar /ssh/WebRoot/WEB-INF/lib/log4j-1.2.15.jar /ssh/WebRoot/WEB-INF/lib/persistence.jar /ssh/WebRoot/WEB-INF/lib/poi-3.0.1.jar /ssh/WebRoot/WEB-INF/lib/portlet-api.jar /ssh/WebRoot/WEB-INF/lib/slf4j-api-1.5.8.jar /ssh/WebRoot/WEB-INF/lib/slf4j-log4j12-1.5.8.jar /ssh/WebRoot/WEB-INF/lib/spring-agent.jar /ssh/WebRoot/WEB-INF/lib/spring-aop.jar /ssh/WebRoot/WEB-INF/lib/spring-aspects.jar /ssh/WebRoot/WEB-INF/lib/spring-beans.jar /ssh/WebRoot/WEB-INF/lib/spring-context.jar /ssh/WebRoot/WEB-INF/lib/spring-core.jar /ssh/WebRoot/WEB-INF/lib/spring-jdbc.jar /ssh/WebRoot/WEB-INF/lib/spring-orm.jar /ssh/WebRoot/WEB-INF/lib/spring-tomcat-weaver.jar /ssh/WebRoot/WEB-INF/lib/spring-tx.jar /ssh/WebRoot/WEB-INF/lib/spring-web.jar /ssh/WebRoot/WEB-INF/lib/spring-webmvc-portlet.jar /ssh/WebRoot/WEB-INF/lib/spring-webmvc-struts.jar /ssh/WebRoot/WEB-INF/lib/spring-webmvc.jar /ssh/WebRoot/WEB-INF/lib/struts.jar /ssh/WebRoot/WEB-INF/lib/velocity-1.5.jar /ssh/WebRoot/WEB-INF/lib/velocity-tools-view-1.4.jar