Spring+Struts初体会
来源:互联网 发布:手机解码软件下载 编辑:程序博客网 时间:2024/05/17 03:07
要加载Spring应用,首先要在web.xml里声明如下:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext-hibernate.xml
</param-value>
</context-param>
<servlet>
<servlet-name>SpringContextServlet</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
以上声明是使web应用在一开始就加载Spring的applicationContext-hibernate.xml配置文件。
spring里可以使用jndi的DataSource,在applicationContext-hibernate.xml里声明如下:
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/mydc</value>
</property>
</bean>
Spring也可以使用比较常用的apache的dbcp,声明如下:
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value> net.sourceforge.jtds.jdbc.Driver </value>
</property>
<property name="url">
<value> jdbc:jtds:sqlserver://localhost:1433/forum </value>
</property>
<property name="username"><value>sa</value></property>
<property name="password"><value>123456</value></property>
</bean>
spring也可以使用自己的DataSource,在applicationContext-hibernate.xml里如下声明:
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>net.sourceforge.jtds.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:jtds:sqlserver://localhost:1433/forum</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value>123456</value>
</property>
</bean>
下面是关于hibernate的使用:
首先Spring使用一个自己的类LocalSessionFactoryBean来控制hibernate的SessionFactory的加载(同时可以摈弃原来hibernate带的hibernate.properties或者hibernate.cfg.xml,那些原有的配置在hibernateProperties节点下声明),声明如下:
<bean id="mySessionFactory"
class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource"/><!-- 指向上面声明的DataSource -->
</property>
<property name="mappingResources"><!--加载hibernate映射文件 -->
<list>
<value>com/meagle/bo/Order.hbm.xml</value>
<value>com/meagle/bo/OrderLineItem.hbm.xml</value>
</list>
</property>
<!--下面是加载原来hibernate.properties或hibernate.cfg.xml里的内容-->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
net.sf.hibernate.dialect.SQLServerDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">
true
</prop>
</props>
</property>
</bean>
Spring声明事务的加载,如下:
<bean id="myTransactionManager"
class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="mySessionFactory"/>
</property>
</bean>
为了使用spring的hibernate支持,编写一个自己的DAO类来继承HibernateDaoSupport类,在这个DAO里使用Spring提供的hibernate支持来编写对数据库里的表的各个操作。一个DAO的例子里可以使用hibernateTemplate里的一些直接的方法,例如:
public Role findRoleByName(String name) {
return
(Role) getHibernateTemplate().find("from Role r where r.name=?",name).get(0);
}
也可以使用一些从hibernate映射文件里定义的Query语句,一般使用于比较复杂的hql语句,这些hql语句可以使用hibernate8ide来调试,例如:
public List getUsersWithoutContactInfo(){
return
getHibernateTemplate().findByNamedQuery("UsersWithoutContactInfo");
}
还可以自定义执行一个匿名的HibernateCallback对象,用来自己控制hibernate里的session等的操作,例如:
public List findOrdersPlaceByUser(final String placedBy) {
return getHibernateTemplate().executeFind(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
StringBuffer sb = new StringBuffer(100);
sb.append("select distinct order ");
sb.append("from Order order ");
sb.append("join order.lineItems lineItems ");
sb.append("where order.placedBy = :placedBy");
sb.append("order by order.id");
Query query = session.createQuery(sb.toString());
query.setString("placedBy", placedBy);
List list = query.list();
return list;
} // end doInHibernate()
}); // end executeFind()
}
然后再定义一个service类,这个类里持有一个内部field为对应的DAO,这个类存放的是具体的业务操作。
最后在spring的配置文件里声明如下:
<!-- ***** 定义供struts查找的service,通过插入事务对象使这个service类具有事务处理的能力 *****-->
<bean id="orderService"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref local="myTransactionManager"/>
</property>
<property name="target"><ref local="orderTarget"/></property>
<property name="transactionAttributes">
<props>
<prop key="find*">
PROPAGATION_REQUIRED,readOnly,-OrderException
</prop>
<prop key="save*">
PROPAGATION_REQUIRED,-OrderException,-OrderMinimumAmountException
</prop>
</props>
</property>
</bean>
<!—我们写的实现具体商业逻辑的service对象-->
<bean id="orderTarget"
class="edu.cqu.rdc.service.spring.OrderServiceSpringImpl">
<property name="orderDAO"><ref local="orderDAO"/></property>
</bean>
<!—我们写的DAO对象 -->
<bean id="orderDAO"
class="edu.cqu.rdc.service.dao.hibernate.OrderHibernateDAO">
<property name="sessionFactory">
<ref local="mySessionFactory"/></property>
</bean>
要在Struts里对这个service进行引用。可以使用以下方法:
public void setServlet(ActionServlet actionServlet) {
super.setServlet(actionServlet);
ServletContext servletContext = actionServlet.getServletContext();
WebApplicationContext wac =
WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
this.orderService = (IOrderService) wac.getBean("orderService");
}
- Spring+Struts初体会
- 毕业设计的体会Struts+Spring+Hibernate
- Struts到spring mvc的体会
- 体会真正的Struts开发
- spring + struts
- sTRUTS+SPRING
- struts+spring
- struts+spring
- SPRING,STRUTS
- Spring+Struts
- spring+struts
- 体会真正的Struts开发(第一部分)
- 体会真正的Struts开发(2)
- 体会真正的Struts开发(3)
- 体会真正的Struts开发(4)
- 体会真正的Struts开发(5)
- 体会真正的Struts开发(2期)
- 体会真正的Struts开发3(1)
- 进入一个短期的赶进度状态
- 假清高的李白:一生都在折腰事权贵
- Internet Explorer 编程简述(二)在IE中编辑OLE嵌入文档
- SQL SERVER实用经验技巧集 选择自 longrujun 的 Blog
- 渝广铁路
- Spring+Struts初体会
- debian的配置工具[zz]
- asp.net生成HTML
- 得到随机排序结果
- BLOB完全实践:在Oracle中存取BLOB对象实现文件的上传和下载(原创)
- 再谈MPEG4
- 这里是不是BBS?
- 博英单词
- Eric的数据分页(演示+代码)