基于注解配置SSH框架

采用注解的方式,也不能完全的丢掉配置文件,因为配置文件是程序的入口,是基础。服务器启动最先加载web.xml文件,读取其中的配置信息,将程序运行所需要的信息进行初始化。因为是整合SSH,所以web.xml文件中需要配置Spring以及Struts的信息,同时Spring跟Struts也需要进行一些基本的配置。

首先配置web.xml文件

1. <?xml version="1.0" encoding="UTF-8"?>

2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

3. xmlns="http://java.sun.com/xml/ns/javaee"

4. xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

5. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="SSH" version="2.5">

6.   <display-name>ssh</display-name>

7.   <welcome-file-list>

8.     <welcome-file>index.jsp</welcome-file>

9.   </welcome-file-list>

10.

11.   <!-- 配置Spring的监听器,用于初始化ApplicationContext对象 -->

12.   <listener>

13.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

14.   </listener>

15.   <context-param>

16.     <param-name>contextConfigLocation</param-name>

17.     <param-value>classpath:applicationContext*.xml</param-value>

18.   </context-param>

19.

20.   <!-- struts2 的配置 -->

21.   <filter>

22.     <filter-name>struts2</filter-name>

23.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

24.     <init-param>

25.       <param-name>filterConfig</param-name>

26.       <param-value>classpath:struts.xml</param-value>

27.     </init-param>

28.

29.     <!-- 自动扫描action -->

30.     <init-param>

31.       <param-name>actionPackages</param-name>

32.       <param-value>com.ssh</param-value>

33.     </init-param>

34.   </filter>

35.

36.   <filter-mapping>

37.     <filter-name>struts2</filter-name>

38.     <url-pattern>/*</url-pattern>

39.   </filter-mapping>

40. </web-app>

web.xml中包含了Spring和struts的基本配置,自动扫描Action的配置就是告诉tomcat,我要使用注解来配置struts。

applicationContext.xml

1. <?xml version="1.0" encoding="UTF-8"?>

2. <beans xmlns="http://www.springframework.org/schema/beans"

3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"

4.     xmlns:tx="http://www.springframework.org/schema/tx"

5.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

6.                 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd

7.                 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

8.

9.     <!-- 自动扫描与装配bean -->

10.     <context:component-scan base-package="dao,biz,action"></context:component-scan>

11.

12.     <!-- dbcp配置 -->

13.     <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">

14.         <property name="driverClassName">

15.             <value>oracle.jdbc.OracleDriver</value>

16.         </property>

17.         <property name="url">

18.             <value>jdbc:oracle:thin:@localhost:1521:orcl</value>

19.         </property>

20.         <property name="username">

21.             <value>root</value>

22.         </property>

23.         <property name="password">

24.             <value>123456</value>

25.         </property>

26.     </bean>

27.

28.     <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

29.         <property name="dataSource">

30.             <ref local="dataSource" />

31.         </property>

32.         <property name="hibernateProperties">

33.             <props>

34.                 <!--配置Hibernate的方言-->

35.                 <prop key="hibernate.dialect">

36.                  org.hibernate.dialect.MySQLDialect

37.                 </prop>

38.                 <prop key="hibernate.hbm2ddl.auto">update</prop>

39.

40.                 <!--格式化输出sql语句-->

41.                 <prop key="hibernate.show_sql">true</prop>

42.                 <prop key="hibernate.format_sql">true</prop>

43.                 <prop key="hibernate.use_sql_comments">false</prop>

44.             </props>

45.         </property>

46.

47.         <!--自动扫描实体 -->

48.         <property name="packagesToScan"  value="com.tgb.ssh.model" />

49.     </bean>

50.

51.     <!-- 用注解来实现事务管理 -->

52.     <bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">

53.         <property name="sessionFactory" ref="sessionFactory"></property>

54.     </bean>

55.     <tx:annotation-driven transaction-manager="txManager"/>

56.

57. </beans>

Struts.xml文件的基本配置,并有spring来管理

1. <?xml version="1.0" encoding="UTF-8"?>

2. <!DOCTYPE struts PUBLIC

3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

4. "http://struts.apache.org/dtds/struts-2.3.dtd">

5.

6. <struts>

7.

8.     <!-- 开启使用开发模式,详细错误提示 -->

9.     <constant name="struts.devMode" value="true" />

10.     <!-- 将对象交给spring管理 -->

11.     <constant name="struts.objectFactory" value="spring" />

12.     <!-- 指定资源编码类型 -->

13.     <constant name="struts.i18n.encoding" value="UTF-8" />

14.     <!-- 指定每次请求到达,重新加载资源文件 -->

15.     <constant name="struts.i18n.reload" value="false" />

16.     <!-- 指定每次配置文件更改后,自动重新加载 -->

17.     <constant name="struts.configuration.xml.reload" value="false" />

18.     <!-- 默认后缀名 -->

19.     <constant name="struts.action.extension" value="action," />

20.

21. </struts>

然后就是代码的书写了:

UserAction通过注解配置Action的名字和返回的页面,通过@Resource活动Spring注入的UserManager对象,然后进行相应的操作。Action里还有@Namespace、@InterceptorRef等很多注解可以用,根据自己需要选择吧。

1. package com.tgb.ssh.action;

2.

3. import javax.annotation.Resource;

4.

5. import org.apache.struts2.convention.annotation.Action;

6. import org.apache.struts2.convention.annotation.Result;

7. import org.apache.struts2.convention.annotation.Results;

8.

9. import com.opensymphony.xwork2.ActionSupport;

10. import com.tgb.ssh.model.User;

11. import com.tgb.ssh.service.UserManager;

12.

13.

14. @Results( { @Result(name="success",location="/success.jsp"),

15.         @Result(name="failure",location="/failure.jsp") })

16. public class UserAction extends ActionSupport {

17.     @Resource

18.     private UserManager userManager;

19.     private User user;

20.

21.     @Action(value="addUser")

22.     public String addUser() {

23.         try {

24.             userManager.addUser(user);

25.         } catch (Exception e) {

26.             e.printStackTrace();

27.             return "failure";

28.         }

29.         return "success";

30.

31.     }

32.

33.     public User getUser() {

34.         return user;

35.     }

36.     public void setUser(User user) {

37.         this.user = user;

38.     }

39.

40.

41. }

对象的usermanage

UserManager通过@Service自动装配到Spring的容器,为其他组件提供服务;通过@Transactional进行事务的管理;通过@Resource注入UserDao对象。

1. package com.tgb.ssh.service;

2.

3. import javax.annotation.Resource;

4.

5. import org.springframework.stereotype.Service;

6. import org.springframework.transaction.annotation.Transactional;

7.

8. import com.tgb.ssh.dao.UserDao;

9. import com.tgb.ssh.model.User;

10.

11. @Service

12. @Transactional

13. public class UserManager {

14.     @Resource

15.     UserDao userDao;

16.

17.     public void addUser(User user) {

18.         userDao.addUser(user);

19.     }

20.

21. }

Userdao的写法

UserDao通过@Repository自动装配到Spring的容器,通过@Resource获得Sessionfactory,将User对象持久化

1. package com.tgb.ssh.dao;

2.

3. import javax.annotation.Resource;

4.

5. import org.hibernate.Session;

6. import org.hibernate.SessionFactory;

7. import org.hibernate.Transaction;

8. import org.springframework.orm.hibernate4.HibernateTemplate;

9. import org.springframework.stereotype.Repository;

10.

11. import com.tgb.ssh.model.User;

12.

13. @Repository

14. public class UserDao {

15.     @Resource(name="sessionFactory")

16.     private SessionFactory sessionFactory;

17.

18.     public void addUser(User user ) {

19.         Session session = sessionFactory.getCurrentSession();

20.         session.save(user);

21.     }

22.

23. }

User实体类

User通过@Entity将实体类映射到数据库,生成t_user表,通过@Id定义表的Id,通过@GenerateValue定义Id的生成策略。

1. package com.tgb.ssh.model;

2.

3. import javax.persistence.Entity;

4. import javax.persistence.GeneratedValue;

5. import javax.persistence.GenerationType;

6. import javax.persistence.Id;

7.

8.

9. @Entity(name="t_user")

10. public class User {

11.     @Id

12.     @GeneratedValue(strategy = GenerationType.IDENTITY)

13.     private int id;

14.     private String name;

15.     private String password;

16.

17.

18.     public int getId() {

19.         return id;

20.     }

21.

22.     public void setId(int id) {

23.         this.id = id;

24.     }

25.

26.     public String getName() {

27.         return name;

28.     }

29.

30.     public void setName(String name) {

31.         this.name = name;

32.     }

33.     public String getPassword() {

34.         return password;

35.     }

36.     public void setPassword(String password) {

37.         this.password = password;

38.     }

39. }

好了,到此为止,基于注解的SSH就算是搭建完成了。基础的搭建已经使注解简洁的优势初现端倪,随着开发的进行,代码不断地增加,其简洁的风格相比传统配置文件的方式会更加明显。因为如果采用配置文件的方式,每增加一个Action都需要在struts.xml和applicationContext.xml文件增加一段代码;每多一个实体,也需要多一个*.hbm.xml文件。配置文件泛滥是一件让人头疼的事情。

时间: 2024-10-05 04:40:42

基于注解配置SSH框架的相关文章

基于注解的ssh框架之spring配置文件

<?xml version="1.0" encoding="UTF-8"?> com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/ssh root 123456 org.hibernate.dialect.MySQLDialect update true true false 版权声明:本文为博主原创文章,未经博主允许不得转载.

基于注解的SSH将配置精简到极致(1)

很早之前就想写一篇关于SSH整合的博客了,但是一直觉得使用SSH的时候那么多的配置文件,严重破坏了我们代码整体性,比如你要看两个实体的关系还得对照*.hbm.xml文件,要屡清一个Action可能需要对照applicationContext*.xml和struts*.xml文件.总之过多的配置文件坏破坏代码的整体性,会打乱代码的连续性,因为很多情况下你需要一边看Java代码,一边看xml的配置,采用注解就能很好的解决这个问题. 当然,即使采用注解的方式,也不能完全的丢掉配置文件,因为配置文件是程

Java之基于Eclipse搭建SSH框架(下)

在上篇博客里,我简介了Tomcat滴配置与Struts2滴搭建,假设对这个还不会滴童鞋去看一下我滴上篇博客<Java之基于Eclipse搭建SSH框架(上)>.今天我们接着上篇博客滴内容.继续搭建我们滴SSH框架. (一)在上篇博客滴基础上整合Spring: 首先我们把Spring所须要的jar(上篇博客有),拷贝到WebContent下的WEB-INF下的lib里面. 其次在src下创建名为:applicationContext.xml文件.(有些人提示在WEB-INF下创建)个人建议:在s

基于maven的ssh框架一步一步搭建(一)

一.新建maven项目,配置ssh框架pom的最低支持 1.新建一个maven项目 2.添加一个web.xml ? 1 2 3 4 5 6 7 8 9 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns="http://java.sun.com/xm

Spring基于注解TestContext 测试框架使用详解

概述 Spring 2.5 相比于 Spring 2.0 所新增的最重要的功能可以归结为以下 3 点: 1.基于注解的 IoC 功能:  2.基于注解驱动的 Spring MVC 功能:  3.基于注解的 TestContext 测试框架. Spring 推荐开发者使用新的基于注解的 TestContext 测试框架,本文我们将对此进行详细的讲述. 低版本的 Spring 所提供的 Spring 测试框架构在 JUnit 3.8 基础上扩展而来,它提供了若干个测试基类.而 Spring 2.5

基于Java Web SSH框架的网上书店

获取项目源文件,技术交流与指导联系Q:1225467431 摘   要 随着互联网技术的发展,网上购物越来越流行,而网上书店更是逐渐受到越来越多的人关注,不用涉及交通.不用到书店翻阅.即可看到全国各地的书籍价格.更加全面地搜索自己喜欢的书籍.需要的书籍.通过网络销售系统的平台,商家将拥有更大的市场,能更加及时快速地得到用户对于商品的反响,可以随时调整销售策略,提高商家的市场竞争力.对于消费者也提供了方便,消费者可以不受时间和地域的限制进行购物,并且可以获取更多信息.. 本文阐述了如何构建基于B/

基于注解配置spring

1 对 bean 的标注基于注解方式有3个注解 @Component @Repository 对DAO类进行标注 @Service 对Service类进行标注 @Controller  对Controller类进行标注 2 想要 spring 获得基于注解的bean 需要配置 <context:component-scan /> 进行扫描,并从注解中获得配置信息. 3 自动装配 bean ,使用 @Autowired 注解实现 Bean 的依赖注入.@Autowired 默认按照类型匹配 by

Spring(七)之基于注解配置

基于注解的配置 从 Spring 2.5 开始就可以使用注解来配置依赖注入.而不是采用 XML 来描述一个 bean 连线,你可以使用相关类,方法或字段声明的注解,将 bean 配置移动到组件类本身. 在 XML 注入之前进行注解注入,因此后者的配置将通过两种方式的属性连线被前者重写. 一.@Required注解 @Required 注解应用于 bean 属性的 setter 方法,它表明受影响的 bean 属性在配置时必须放在 XML 配置文件中,否则容器就会抛出一个 BeanInitiali

[问题解决]基于注解配置dubbo遇到ConnectionLoss for /dubbo/xxx问题解决

今天升级spring版本的时候,同时升级dubbo的版本,采用的是dubbo的基于注解的配置方法,采用curator作为dubbo的客户端, curator版本为4.1.0,启动之后,发现一直报错 ConnectionLoss for /dubbo/xxx, 通过debug调试源码发现两个问题: 1. 连接服务端经常返回 KeeperNode Not found的现象,即dubbo节点找不到,但是通过dubbo admin是可以看到节点注册成功的 2. Zookeeper客户端对于连接失败的接口