ssh整合
Posted zhouyeqin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ssh整合相关的知识,希望对你有一定的参考价值。
一、功能:以登陆为例讲解Spring、Hiberante和struts框架整合。
二、整合流程
1. 在 WEB 环境下使用 Spring
①. 加入spring的 jar 包:
Spring中提供web支持的包有:spring-web-4.0.0.RELEASE.jar和spring-webmvc-4.0.0.RELEASE.jar
②. Spring 的配置文件,和非 WEB 环境没有什么不同
注意:
加入事务管理
<!-- 事务管理器 --> <bean name="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- 使用aop引入事务管理器 --> <tx:advice id="testAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED" isolation="DEFAULT"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut expression="execution(* com.silvan.dao.*.*(..))" id="pointcut"/> <aop:advisor advice-ref="testAdvice" pointcut-ref="pointcut"/> </aop:config>
③. 需要在 web.xml 文件中加入如下配置:
<!-- 配置 Spring 配置文件的名称和位置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- 启动 IOC 容器的 ServletContextListener --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
2. Spring 如何整合 hibernate ?
1)加入hibernate的jar包
2)对pojo对象书写对应的hbm文件
如:User.hbm.xml
3)在spring配置文件中加入数据源配置
<!-- 配置数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"> </property> <property name="url" value="jdbc:oracle:thin:@localhost:1521:silvan"> </property> <property name="username" value="scott"></property> <property name="password" value="tiger"></property> </bean>
4)在spring配置文件中加入session工厂管理:需要引入数据源,hbm文件,hibernate属性
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <!-- 用来列出全部映射文件 --> <property name="mappingResources"> <!-- *.hbm.xml --> <list> <value>com/silvan/pojo/User.hbm.xml</value> </list> </property> <!-- 定义Hibernate的SessionFactory属性 --> <property name="hibernateProperties"> <props> <!-- 默认情况下该值是为auto的,在classpath下寻找bean-validation**包 --> <prop key="javax.persistence.validation.mode">none</prop> <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean>
5)在spring配置文件中配置hql操作对象hibernateTemplate ,供dao使用
<!-- 配置hibernateTemplate --> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"></property> </bean>
3. Spring 如何整合 Struts2 ?
1). 整合目标 ? 使 IOC 容器来管理 Struts2 的 Action!
2). 如何进行整合 ?
①. 正常加入 Struts2:
加入struts的jar包,
创建struts.xml,action,页面三个部分对应的文件
在web文件中加入以下监听。
<filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
②. 在 Spring 的 IOC 容器中配置 Struts2 的 Action
注意: 在 IOC 容器中配置 Struts2 的 Action 时, 需要配置 scope 属性, 其值必须为 prototype
<bean id="loginAction" class="com.silvan.action.LoginAction" scope="prototype"> <property name="loginService" ref="loginService"></property> </bean>
③. 配置 Struts2 的配置文件: action 节点的 class 属性需要指向 IOC 容器中该 bean 的 id
<action name="login_login" class="loginAction" method="login"> <result>/login.jsp</result> <result name="index">/index.jsp</result> </action>
④. 加入 struts2-spring-plugin-2.3.15.3.jar
源代码:
首先整合spring和hibernate两个框架:
Spring配置文件Application-common.xml:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- 配置数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@localhost:1521:zhouyq"/> <property name="username" value="zhou"></property> <property name="password" value="123456"></property> </bean> <!-- 创建bean工厂 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <!-- 用来列出全部映射文件 --> <property name="mappingResources"> <!-- *.hbm.xml --> <list> <value>com/silvan/pojo/User.hbm.xml</value> </list> </property> <!-- 定义Hibernate的SessionFactory属性 --> <property name="hibernateProperties"> <props> <!-- javax.persistence.validation.mode默认情况下是auto的, 就是说如果不设置的话它是会自动去你的classpath下面找一个bean-validation**包, 但是找不到,所以报错。 --> <prop key="javax.persistence.validation.mode">none</prop> <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.show_sql">false</prop> </props> </property> </bean> <!-- 配置hibernateTemplate HibernateTemplate类是Spring提供给我们进行Hibernate持久层操作的类, 它对增删查改方法进行了封装,通过这个类我们很方便就能操作数据库。 --> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- 配置Hibernate的局部事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- 采用spring中的声明式事务 --> <tx:advice id="transaction" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="get*" read-only="true" /> <tx:method name="*" propagation="REQUIRED" /> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="txPointcut" expression="execution(* com.silvan.daos.*.*(..))" /> <aop:advisor advice-ref="transaction" pointcut-ref="txPointcut" /> </aop:config> <!-- 为每个Dao的实现类配置一个HibernateTemplate, 然后在Spring配置文件中进行装配,这样就可以使用这个HibernateTemplate进行持久层的操作了 --> <bean id="loginDao" class="com.silvan.daos.impl.LoginDaoImpl"> <property name="hibernateTemplate" ref="hibernateTemplate"></property> </bean> <!-- 配置业务对象 --> <bean id="loginService" class="com.silvan.services.impl.LoginServiceImpl"> <property name="loginDao" ref="loginDao"></property> </bean> <!-- 配置action对象 <bean id="loginAction" class="com.silvan.action.LoginAction" scope="prototype"> <property name="loginService" ref="loginService"></property> </bean>--> </beans>
数据库操作类LoginDaoImpl
package com.silvan.daos.impl; import java.util.List; import org.springframework.orm.hibernate3.HibernateTemplate; import com.silvan.daos.LoginDao; public class LoginDaoImpl implements LoginDao { private HibernateTemplate hibernateTemplate; public HibernateTemplate getHibernateTemplate() { return hibernateTemplate; } public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; } /** * 登陆案例 */ public boolean login(String name, String password) { List<String> list = (List<String>) hibernateTemplate.find("select u.password from User u where u.name=?", name); if (list != null && list.size() > 0) { String passwordStr = list.get(0); if (passwordStr.equals(password)) { return true; } } return false; } }
ORM映射样例
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > <hibernate-mapping> <class name="com.silvan.pojo.User" table="t_user"> <id name="id" > <!-- id生成策略:从序列中产生 --> <generator class="native"> <param name="sequence">m_user_id_sequence</param> </generator> </id> <property name="name" column="t_name"></property> <property name="password" column="t_pass"></property> </class> </hibernate-mapping>
Spring整合struts(需要加入struts2-spring-plugin-2.3.15.1.jar):
Login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>login page</title> </head> <body> <form action="login_login" > <table> <tr> <td>用户名:</td> <td><input type="text" name="name"/></td> </tr> <tr> <td>密 码:</td> <td><input type="text" name="password"/></td> </tr> <tr> <td colspan="2"><input type="submit" value="登录" /></td> </tr> </table> </form> </body> </html>
Struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="struts2" extends="struts-default" > <action name="*_*" class="{1}Action" method="{2}"> <result>/index.jsp</result> <result name="error_login">/login.jsp</result> </action> </package> </struts>
LoginAction
package com.silvan.action; import com.silvan.services.LoginService; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport{ private static final long serialVersionUID = 1L; private LoginService loginService; private String name; private String password; public String login(){ if(name==null){ name=""; } if(password==null){ password=""; } //action调用service层 boolean b = loginService.login(name, password); if(b){ return SUCCESS; }else{ return "error_login"; } }}
Web.Xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </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:Application-*.xml </param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
在Spring配置文件中加入
<!-- 配置action对象 --> <bean id="loginAction" class="com.silvan.action.LoginAction" scope="prototype"> <property name="loginService" ref="loginService"></property> </bean>
以上是关于ssh整合的主要内容,如果未能解决你的问题,请参考以下文章
全栈编程系列SpringBoot整合Shiro(含KickoutSessionControlFilter并发在线人数控制以及不生效问题配置启动异常No SecurityManager...)(代码片段
Memcached的配置,SSH项目中的整合(com.whalin),Memcached工具类,Memcached的代码调用