关闭

搭建基于注解方式的SSH项目框架

221人阅读 评论(0) 收藏 举报

转自:http://blog.csdn.net/ererfei/article/details/46800415



1. 项目目录以及数据表结构

2. 准备jar

下面是我开发项目准备的jar包,可能有一些是项目依赖的,例如其中的druid-1.0.13.jarftplet-api-1.0.6.jar ftpserver-core-1.0.6.jarjunit-4.1.1.jarslf4j-api-1.7.12这几个包就是根据需要添加的,分别是阿里巴巴开源数据库连接池、两个ftp文件服务器、单元测试以及slf4j用于log跟踪记录数据库操作信息,其他的都是SSH中的jar包,到百度共享下载下图中的所有包。

(jar包下载 链接: http://pan.baidu.com/s/1pJ42207 提取密码: c5yh)

 

3. 配置struts2

配置代码如下(所有的配置属性都可以在struts2-core-×××.jar包中org.apache.struts2下的default.properties中找到)

struts.xml

[html] view plain copy
  1. <?xml version="1.0"encoding="UTF-8" ?>  
  2.   
  3. <!DOCTYPE struts PUBLIC  
  4.   
  5.    "-//Apache Software Foundation//DTD StrutsConfiguration 2.3//EN"  
  6.   
  7.    "http://struts.apache.org/dtds/struts-2.3.dtd">  
  8.   
  9.    
  10.   
  11. <struts>  
  12.   
  13.    <constant name="struts.enable.DynamicMethodInvocation"value="false" />  
  14.   
  15.    <constant name="struts.devMode" value="true" />  
  16.   
  17.    <!-- 指定由spring负责action对象的创建 -->  
  18.   
  19.    <constant name="struts.objectFactory" value="spring" />  
  20.   
  21.    <!-- 国际化设置,请求参数为utf-8编码 -->  
  22.   
  23.    <constant name="struts.i18n.encoding" value="utf-8" />  
  24.   
  25.    <!-- 指定被struts2处理的请求后缀类型,如果有多个,用逗号隔开 -->  
  26.   
  27.    <constant name="struts.action.extension" value="action" />  
  28.   
  29.    <!-- 指定上传文件的大小上限 -->  
  30.   
  31.    <constant name="struts.multipart.maxSize" value="209715200" />  
  32.   
  33.    <!-- 当配置文件改动后是否重新加载,生产环境下需要设置为false -->  
  34.   
  35.    <constant name="struts.configuration.xml.reload" value="false" />  
  36.   
  37.    <!-- 是否使用struts2的开发模式,生产环境下需要设置为false -->  
  38.   
  39.    <constant name="struts.devMode" value="false" />  
  40.   
  41.    <!-- 浏览器是否缓存静态内容,生产环境下需要设置为true -->  
  42.   
  43.    <constant name="struts.serve.static.browserCache" value="true" />  
  44.   
  45.    <!-- <includefile="example.xml"/> -->  
  46.   
  47. </struts>  


 

 

 

4. 配置Spring+Hibernate

4.1  编写Spring配置文件applicationContext.xml

applicationContext.xml

[html] view plain copy
  1. <?xml version="1.0"encoding="UTF-8"?>  
  2.   
  3. <beans  
  4.   
  5.    xmlns="http://www.springframework.org/schema/beans"  
  6.   
  7.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  8.   
  9.     xmlns:aop="http://www.springframework.org/schema/aop"  
  10.   
  11.     xmlns:tx="http://www.springframework.org/schema/tx"  
  12.   
  13.     xmlns:context="http://www.springframework.org/schema/context"  
  14.   
  15.     xmlns:task="http://www.springframework.org/schema/task"  
  16.   
  17.     xsi:schemaLocation="  
  18.   
  19.     http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.1.xsd  
  20.   
  21.     http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.1.xsd  
  22.   
  23.     http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.1.xsd  
  24.   
  25.    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd  
  26.   
  27.     http://www.springframework.org/schema/taskhttp://www.springframework.org/schema/task/spring-task-4.1.xsd">  
  28.   
  29.      
  30.   
  31.    <!-- 扫描base-package下的文件,并注册bean,同时激活已注册的bean,就是扫描那些用@Service,@component,@Repositiry标识的那些类 -->  
  32.   
  33.    <context:component-scan base-package="com.mlq.love" />  
  34.   
  35. </beans>  


 

 

4.2编写Hibernate配置文件applicationContext-hibernate.xml

首先编写配置文件dbconfig.properties,这样提取出来配置信息可以比较直观的查看和维护

dbconfig.properties

[plain] view plain copy
  1. url=jdbc\:mysql\://localhost\:3306/test  
  2. driverClassName=com.mysql.jdbc.Driver  
  3. username=root  
  4. password=centerm  
  5. initialSize=10  
  6. minIdle=5  
  7. maxActive=50  
  8. maxWait=60000  
  9. timeBetweenEvictionRunsMillis=60000  
  10. minEvictableIdleTimeMillis=300000  
  11. poolPreparedStatements=true  
  12. maxPoolPreparedStatementPerConnectionSize=100  
  13. validationQuery=SELECT'x'  
  14. testWhileIdle=true  
  15. testOnBorrow=false  
  16. testOnReturn=false  
  17. maxOpenPreparedStatements=20  
  18. removeAbandoned=false  
  19. removeAbandonedTimeout=1800  
  20. logAbandoned=true  

 

 

applicationContext-hibernate.xml

[html] view plain copy
  1. <?xml version="1.0"encoding="UTF-8" ?>  
  2.   
  3. <beans xmlns="http://www.springframework.org/schema/beans"  
  4.   
  5.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"  
  6.   
  7.    xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"  
  8.   
  9.    xmlns:task="http://www.springframework.org/schema/task"  
  10.   
  11.    xsi:schemaLocation="  
  12.   
  13.     http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.1.xsd  
  14.   
  15.     http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.1.xsd  
  16.   
  17.     http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.1.xsd  
  18.   
  19.    http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.1.xsd  
  20.   
  21.     http://www.springframework.org/schema/taskhttp://www.springframework.org/schema/task/spring-task-4.1.xsd">  
  22.   
  23.    <bean id="propertyConfigurer"    
  24.   
  25.         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">    
  26.   
  27.         <property name="locations">    
  28.   
  29.             <list>    
  30.   
  31.                 <value>/WEB-INF/classes/dbconfig.properties</value>    
  32.   
  33.             </list>    
  34.   
  35.         </property>    
  36.   
  37.    </bean>    
  38.   
  39.      
  40.   
  41.    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">  
  42.   
  43.       <property name="url" value="${url}"/>  
  44.       <!--可以省略这个driveerClassName的指定,因为Druid提供了N个数据库的支持-->  
  45.       <property name="driverClassName" value="${driverClassName}" />  
  46.   
  47.       <property name="username" value="${username}"/>  
  48.   
  49.       <property name="password" value="${password}"/>  
  50.   
  51.         
  52.   
  53.       <!-- 配置初始化大小、最小、最大 -->  
  54.   
  55.       <property name="initialSize" value="${initialSize}" />  
  56.   
  57.       <property name="minIdle" value="${minIdle}"/>  
  58.   
  59.       <property name="maxActive" value="${maxActive}"/>  
  60.   
  61.    
  62.   
  63.       <!-- 配置获取连接等待超时的时间 -->  
  64.   
  65.       <property name="maxWait" value="${maxWait}"/>  
  66.   
  67.    
  68.   
  69.       <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->  
  70.   
  71.       <property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}" />  
  72.   
  73.    
  74.   
  75.       <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->  
  76.   
  77.       <property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}" />  
  78.   
  79.         
  80.   
  81.       <!-- 打开PSCache(PreparedStatementCache),并且指定每个连接上PSCache的大小 -->  
  82.   
  83.       <property name="poolPreparedStatements" value="${poolPreparedStatements}" />  
  84.   
  85.       <property name="maxPoolPreparedStatementPerConnectionSize"value="${maxPoolPreparedStatementPerConnectionSize}"/>  
  86.   
  87.         
  88.   
  89.       <property name="validationQuery" value="${validationQuery}" />  
  90.   
  91.       <property name="testWhileIdle" value="${testWhileIdle}" />  
  92.   
  93.       <property name="testOnBorrow" value="${testOnBorrow}" />  
  94.   
  95.       <property name="testOnReturn" value="${testOnReturn}" />  
  96.   
  97.    </bean>  
  98.   
  99.    <bean id="sessionFactory"  
  100.   
  101.       class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">  
  102.   
  103.       <!-- entity包扫描范围 -->  
  104.   
  105.       <property name="packagesToScan">  
  106.   
  107.          <list>  
  108.   
  109.             <value>com.mlq.love.entity</value>  
  110.   
  111.          </list>  
  112.   
  113.       </property>  
  114.   
  115.       <property name="dataSource" ref="dataSource" />  
  116.   
  117.       <property name="hibernateProperties">  
  118.   
  119.          <props>  
  120.   
  121.             <prop key="hibernate.hbm2ddl.auto">update</prop>  
  122.   
  123.             <prop key="dialect">org.hibernate.dialect.MySQLDialect</prop>  
  124.   
  125.             <prop key="hibernate.show_sql">true</prop>  
  126.   
  127.             <prop key="hibernate.format_sql">true</prop>  
  128.   
  129.             <prop key="current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>  
  130.   
  131.             <prop key="cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>  
  132.   
  133.          </props>  
  134.   
  135.       </property>  
  136.   
  137.    </bean>  
  138.   
  139.      
  140.   
  141.    <!-- 事务配置 -->  
  142.   
  143.    <bean id="transactionManager"  
  144.   
  145.       class="org.springframework.orm.hibernate4.HibernateTransactionManager">  
  146.   
  147.       <property name="sessionFactory" ref="sessionFactory" />  
  148.   
  149.    </bean>  
  150.   
  151.      
  152.   
  153.    <!-- 开启注解配置事务 -->  
  154.   
  155.    <tx:annotation-driven transaction-manager="transactionManager" />  
  156.   
  157. </beans>  


 

5. 修改web.xml文件

主要是增加Struts2Spring的配置信息

web.xml

[html] view plain copy
  1. <?xml version="1.0"encoding="UTF-8"?>  
  2.   
  3. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://xmlns.jcp.org/xml/ns/javaee"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">  
  4.   
  5.    <display-name>SSH搭建(注解)</display-name>  
  6.   
  7.    <welcome-file-list>  
  8.   
  9.       <welcome-file>index.html</welcome-file>  
  10.   
  11.    </welcome-file-list>  
  12.   
  13.   <!-- spring配置文件路径 -->  
  14.   
  15.    <context-param>  
  16.   
  17.       <param-name>contextConfigLocation</param-name>  
  18.   
  19.       <param-value>/WEB-INF/classes/applicationContext*.xml</param-value>  
  20.   
  21.    </context-param>  
  22.   
  23.    
  24.   
  25.    <!-- spring监听器 -->  
  26.   
  27.    <listener>  
  28.   
  29.       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  30.   
  31.    </listener>  
  32.   
  33.    
  34.   
  35.    <filter>  
  36.   
  37.       <filter-name>struts2</filter-name>  
  38.   
  39.       <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
  40.   
  41.    </filter>  
  42.   
  43.    
  44.   
  45.    <filter-mapping>  
  46.   
  47.        <filter-name>struts2</filter-name>  
  48.   
  49.        <url-pattern>/*</url-pattern>  
  50.   
  51.    </filter-mapping>  
  52.   
  53. </web-app>  

 

 

6. 编写实体类、DAO类、Service类以及Action

User.java

[java] view plain copy
  1. @Entity  
  2. @Table(name="user")  
  3. public class User {  
  4.     @Id  
  5.     @GeneratedValue(strategy = GenerationType.IDENTITY)  
  6.     @Column(name="userid")  
  7.     private Integer userId;  
  8.     @Column(name="username")  
  9.     private String userName;  
  10.     @Column(name="password")  
  11.     private String passWord;  
  12.     @Column(name="birthday")  
  13.     private Date birthday;  
  14.     @Column(name="age")  
  15.     private Integer age;  
  16.     @Column(name="sex")  
  17.     private String sex;  
  18.          
  19.         getters setters......  
  20. }  

 

BaseDao.java

[java] view plain copy
  1. public class BaseDao<T> {  
  2.     @Resource(name = "sessionFactory")  
  3.     protected SessionFactory sessionFactory;  
  4.       
  5.     protected Class<?> entityClass;  
  6.       
  7.     public BaseDao()  
  8.     {  
  9.         ParameterizedType type = (ParameterizedType)this.getClass().getGenericSuperclass();  
  10.         entityClass = (Class<?>)type.getActualTypeArguments()[0];  
  11.     }  
  12.       
  13.     protected Session getSession()  
  14.     {  
  15.         return sessionFactory.getCurrentSession();  
  16.     }  
  17.       
  18.     public Serializable save(T t){  
  19.         return getSession().save(t);  
  20.     }  
  21. }  

UserDao.java

[java] view plain copy
  1. @Repository("userDao")  
  2. public class UserDao extends BaseDao<User>{  
  3.     @SuppressWarnings("unchecked")  
  4.     public User checkUser(User user){  
  5.         String hql = "from User where userId = :id and password = :password";  
  6.           
  7.         Query query = getSession().createQuery(hql)  
  8.                         .setParameter("id", user.getUserId())  
  9.                         .setParameter("password", user.getPassWord());  
  10.           
  11.         List<User> userList = (List<User>)query.list();  
  12.         if(userList != null && userList.size() > 0){  
  13.             System.out.println("wocao");  
  14.             return userList.get(0);  
  15.         }  
  16.         return null;  
  17.     }  
  18. }  

UserService.java

[java] view plain copy
  1. @Service("userService")  
  2. public class UserService {  
  3.     @Resource  
  4.     private UserDao userDao;  
  5.       
  6.     public Serializable save(User user){  
  7.         return userDao.save(user);  
  8.     }  
  9.       
  10.     @Transactional(readOnly = true, rollbackFor = Exception.class)  
  11.     public User checkUser(User user){  
  12.         return userDao.checkUser(user);  
  13.     }  
  14. }  

LoginAction.java

 

[java] view plain copy
  1. @Controller("loginAction")  
  2. @Scope("prototype")  
  3. @Namespace("")  
  4. @ParentPackage("struts-default")  
  5. public class LoginAction extends ActionSupport implements SessionAware{  
  6.     private static final long serialVersionUID = 6473585621724667329L;  
  7.       
  8.     @Resource(name = "userService")  
  9.     private UserService userService;  
  10.       
  11.     private Map<String, Object> session;  
  12.     private String id;  
  13.     private String password;  
  14.       
  15.     @Action  
  16.     (  
  17.         value="login",  
  18.         results =  
  19.             {  
  20.                 @Result(name = "success", location = "/main.jsp"),  
  21.                 @Result(name = "error", location = "/login.jsp")  
  22.             }  
  23.     )  
  24.     public String login(){  
  25.         User user = (User)session.get("user");  
  26.           
  27.         if(user == null){  
  28.             user = new User();  
  29.             user.setUserId(Integer.parseInt(id));  
  30.             user.setPassWord(password);  
  31.         }  
  32.         user = userService.checkUser(user);  
  33.           
  34.         if(user == null){  
  35.             return "error";  
  36.         }else {  
  37.             session.put("user", user);  
  38.             return "success";  
  39.         }  
  40.     }  
  41.   
  42.     public String getId() {  
  43.         return id;  
  44.     }  
  45.     public void setId(String id) {  
  46.         this.id = id;  
  47.     }  
  48.   
  49.     public String getPassword() {  
  50.         return password;  
  51.     }  
  52.   
  53.     public void setPassword(String password) {  
  54.         this.password = password;  
  55.     }  
  56.   
  57.     @Override  
  58.     public void setSession(Map<String, Object> session) {  
  59.         this.session = session;  
  60.     }  
  61. }  

 

7. 测试页面

login.java

[html] view plain copy
  1. <body>  
  2.     <form action="login.action" method="post">  
  3.     <label>姓名:</label><input name="id" type="text" value="" />  
  4.     <label>密碼:</label><input name="password" type="password" value="" />  
  5.     <input type="submit" value="登陆" />  
  6.     </form>  
  7. </body>  

 

main.java

[html] view plain copy
  1. <body>  
  2.     <label>姓名: ${sessionScope.user.userName}</label>  
  3.     <label>出生日期 : ${sessionScope.user.birthday}</label>  
  4.     <label id="skill">展示技能</label>  
  5. </body>  


至此,基于注解方式的SSH框架搭建完成~


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:16779次
    • 积分:478
    • 等级:
    • 排名:千里之外
    • 原创:22篇
    • 转载:13篇
    • 译文:0篇
    • 评论:0条
    文章分类