<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,comments - 227,trackbacks - 0

    此次整合的版本是:struts2.1.8 + spring2.5.6 + hibernate3.3.2

    一.先整合hibernate和spring:

    hibernate所需要jar包:antlr- 2.7.6.jar、commons-collections-3.1.jar、dom4j-1.6.1.jar、hibernate3.jar、 javassist-3.9.0.GA.jar、jta-1.1.jar、slf4j-api-1.5.8.jar、log4j.jar、slf4j- log4j12-1.5.8.jar (slf4j接口以log4j形式實現),因為采用了注解的方式所以還需(annotation3.4的包):ejb3-persistence.jar、hibernate-annotations.jar、 hibernate-commons-annotations.jar、hibernate-entitymanager.jar、hibernate- validator.jar、jboss-archive-browsing.jar ,采用了c3p0連接池,還需要:c3p0-0.9.1.2.jar

    spring所需要jar包:spring.jar、 commons-logging.jar ,spring注解需要:common-annotations.jar ,aop需要:aspectjrt.jar、 aspectjweaver.jar、cglib-nodep-2.1_3.jar

     

    hibernate.cfg.xml配置:

    Xml代碼
    1. <?xml version='1.0' encoding='UTF-8'?>  
    2. <!DOCTYPE hibernate-configuration PUBLIC  
    3.           "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
    4.           "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
    5.   
    6. <hibernate-configuration>  
    7.   
    8.     <session-factory>  
    9.         <property name="dialect">  
    10.             org.hibernate.dialect.MySQLDialect  
    11.         </property>  
    12.         <property name="connection.url">  
    13.             jdbc:mysql://localhost:3306/oa  
    14.         </property>  
    15.         <property name="connection.username">root</property>  
    16.         <property name="connection.password">root</property>  
    17.         <property name="connection.driver_class">  
    18.             com.mysql.jdbc.Driver  
    19.         </property>  
    20.         <property name="myeclipse.connection.profile">mysql5</property>  
    21.         <property name="show_sql">true</property>  
    22.         <property name="current_session_context_class">thread</property>  
    23.         <property name="hbm2ddl.auto">update</property>  
    24.   
    25.         <!-- 首先說明我是使用c3p0連接池的方式 -->  
    26.         <property name="connection.provider_class">  
    27.             org.hibernate.connection.C3P0ConnectionProvider  
    28.         </property>  
    29.         <!-- 最大連接數 -->  
    30.         <property name="hibernate.c3p0.max_size">20</property>  
    31.         <!-- 最小連接數 -->  
    32.         <property name="hibernate.c3p0.min_size">2</property>  
    33.         <!-- 獲得連接的超時時間,如果超過這個時間,會拋出異常,單位毫秒 -->  
    34.         <property name="hibernate.c3p0.timeout">5000</property>  
    35.         <!-- 最大的PreparedStatement的數量 -->  
    36.         <property name="hibernate.c3p0.max_statements">100</property>  
    37.         <!-- 每隔1000秒檢查連接池里的空閑連接 ,單位是秒-->  
    38.         <property name="hibernate.c3p0.idle_test_period">1000</property>  
    39.         <!-- 當連接池里面的連接用完的時候,C3P0一下獲取的新的連接數 -->  
    40.         <property name="hibernate.c3p0.acquire_increment">2</property>  
    41.         <!-- 每次都驗證連接是否可用 -->  
    42.         <property name="hibernate.c3p0.validate">true</property>  
    43.           
    44.         <mapping class="com.fsj.model.User" />  
    45.   
    46.     </session-factory>  
    47.   
    48. </hibernate-configuration>  

     applicationContext.xml配置如下:

    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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"  
    5.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
    6.            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
    7.            http://www.springframework.org/schema/context  
    8.            http://www.springframework.org/schema/context/spring-context-2.5.xsd  
    9.            http://www.springframework.org/schema/aop  
    10.            http://www.springframework.org/schema/aop/spring-aop-2.5.xsd  
    11.            http://www.springframework.org/schema/tx  
    12.            http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">  
    13.              
    14.     <context:component-scan base-package="com.fsj" /><!-- 啟用自動掃描 -->  
    15.     <!-- 基于hibernate注解的sessionFactory -->  
    16.     <bean id="sessionFactory"  
    17.         class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
    18.         <property name="configLocation" value="classpath:hibernate.cfg.xml">  
    19.         </property>  
    20.     </bean>  
    21.     <!-- 基于hibernate的事務管理器 -->  
    22.     <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
    23.         <property name="sessionFactory" ref="sessionFactory" />  
    24.     </bean>  
    25.     <!-- 采用注解形式的聲明式事務管理 -->  
    26.     <tx:annotation-driven transaction-manager="txManager"/>  
    27.       
    28. </beans>  
     

    User類采用hibernate的注解形式:

    Java代碼
    1. package com.fsj.model;  
    2.   
    3. import javax.persistence.Column;  
    4. import javax.persistence.Entity;  
    5. import javax.persistence.GeneratedValue;  
    6. import static javax.persistence.GenerationType.IDENTITY;  
    7. import javax.persistence.Id;  
    8. import javax.persistence.Table;  
    9.   
    10. @Entity  
    11. @Table(name = "_user")  
    12. public class User implements java.io.Serializable {  
    13.   
    14.     private static final long serialVersionUID = -3564872478826196506L;   
    15.     private Integer uid;  
    16.     private String uname;  
    17.     private String upwd;  
    18.   
    19.     @Id  
    20.     @GeneratedValue(strategy = IDENTITY)  
    21.     @Column(name = "u_id", unique = true, nullable = false)  
    22.     public Integer getUid() {  
    23.         return this.uid;  
    24.     }  
    25.   
    26.     public void setUid(Integer UId) {  
    27.         this.uid = UId;  
    28.     }  
    29.   
    30.     @Column(name = "u_name", length = 20)  
    31.     public String getUname() {  
    32.         return this.uname;  
    33.     }  
    34.   
    35.     public void setUname(String UName) {  
    36.         this.uname = UName;  
    37.     }  
    38.   
    39.     @Column(name = "u_pwd", length = 20)  
    40.     public String getUpwd() {  
    41.         return this.upwd;  
    42.     }  
    43.   
    44.     public void setUpwd(String UPwd) {  
    45.         this.upwd = UPwd;  
    46.     }  
    47.   
    48. }  

    DAO層的實現類為:

    Java代碼
    1. package com.fsj.dao.impl;  
    2.   
    3. import java.util.List;  
    4.   
    5. import javax.annotation.Resource;  
    6.   
    7. import org.hibernate.SessionFactory;  
    8. import org.springframework.orm.hibernate3.HibernateTemplate;  
    9. import org.springframework.stereotype.Repository;  
    10.   
    11. import com.fsj.dao.UserDao;  
    12. import com.fsj.model.User;  
    13.   
    14. @Repository("userDao")  
    15. public class UserDaoImpl implements UserDao {  
    16.   
    17.     private HibernateTemplate hibernateTemplate;  
    18.       
    19.     @Resource  
    20.     public void setSessionFactory(SessionFactory sessionFactory)  
    21.     {  
    22.         this.hibernateTemplate = new HibernateTemplate(sessionFactory);  
    23.     }  
    24.         @SuppressWarnings("unchecked")  
    25.     public User login(String name, String pwd) {          
    26.         List<User> users= hibernateTemplate.find("from User where uname=? and upwd=?",new Object[]{name,pwd});          
    27.         System.out.println(users.size()+"-------------");  
    28.         return (users==null || users.size()==0)?null:(User)users.get(0);  
    29.     }  
    30.   
    31. }  

     service層的實現類采用事務管理:

    Java代碼
    1. package com.fsj.sevice.impl;  
    2.   
    3. import java.util.List;  
    4.   
    5. import javax.annotation.Resource;  
    6.   
    7. import org.springframework.stereotype.Service;  
    8. import org.springframework.transaction.annotation.Propagation;  
    9. import org.springframework.transaction.annotation.Transactional;  
    10.   
    11. import com.fsj.dao.UserDao;  
    12. import com.fsj.model.User;  
    13. import com.fsj.sevice.UserService;  
    14.   
    15. @Service("userService")  
    16. @Transactional(rollbackFor = Exception.class)  
    17. public class UserServiceImpl implements UserService {  
    18.   
    19.     @Resource  
    20.     private UserDao userDao;  
    21.     @Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)  
    22.     public User login(String name, String pwd) {  
    23.         return userDao.login(name, pwd);  
    24.     }  
    25.   
    26. }  
     

    junit測試成功后,再加入struts2:

    加入包:xwork-core-2.1.6.jar、 struts2-core-2.1.8.jar、ognl-2.7.3.jar、freemarker-2.3.15.jar、commons-io- 1.3.2.jar、commons-fileupload-1.2.1.jar、struts2-spring-plugin-2.1.8.jar

    web.xml如下設置:

    Xml代碼
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <web-app version="2.5"   
    3.     xmlns="http://java.sun.com/xml/ns/javaee"   
    4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
    6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
    7.       
    8.     <context-param>  
    9.        <param-name>contextConfigLocation</param-name>  
    10.        <param-value>classpath:applicationContext.xml</param-value>  
    11.     </context-param>  
    12.       
    13.     <listener>  
    14.           <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    15.     </listener>  
    16.           
    17.     <filter>  
    18.         <filter-name>struts2</filter-name>  
    19.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
    20.     </filter>   
    21.     <filter-mapping>  
    22.         <filter-name>struts2</filter-name>  
    23.         <url-pattern>/*</url-pattern>  
    24.     </filter-mapping>  
    25.           
    26.     <filter>  
    27.         <filter-name>encoding</filter-name>  
    28.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
    29.         <init-param>  
    30.             <param-name>encoding</param-name>  
    31.             <param-value>UTF-8</param-value>  
    32.         </init-param>  
    33.     </filter>  
    34.     <filter-mapping>  
    35.         <filter-name>encoding</filter-name>  
    36.         <url-pattern>/*</url-pattern>  
    37.     </filter-mapping>  
    38.           
    39.                           
    40.     <filter>  
    41.             <filter-name>OpenSessionInViewFilter</filter-name>  
    42.             <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>  
    43.     </filter>  
    44.     <filter-mapping>  
    45.             <filter-name>OpenSessionInViewFilter</filter-name>  
    46.             <url-pattern>/*</url-pattern>  
    47.     </filter-mapping>  
    48.       
    49. </web-app>  
     

    struts.xml如下:

    Xml代碼
    1. <?xml version="1.0" encoding="UTF-8" ?>  
    2. <!DOCTYPE struts PUBLIC  
    3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
    4.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
    5.   
    6. <struts>  
    7.   
    8.     <!-- 指定Web應用的默認編碼集,相當于調用HttpServletRequest的 setCharacterEncoding方法 -->  
    9.     <constant name="struts.i18n.encoding" value="UTF-8" />  
    10.     <!-- 設置瀏覽器是否緩存靜態內容,默認值為true(生產環境下使用),開發階段最好關 閉 -->  
    11.     <constant name="struts.serve.static.browserCache" value="false" />  
    12.     <!-- 當struts的配置文件修改后,系統是否自動重新加載該文件,默認值為false(生產環境下使 用),開發階段最好打開 -->  
    13.     <constant name="struts.configuration.xml.reload" value="true" />  
    14.     <!-- 開發模式下使用,這樣可以打印出更詳細的錯誤信息 -->  
    15.     <constant name="struts.devMode" value="true" />  
    16.     <!-- 默認的視圖主題 -->  
    17.     <constant name="struts.ui.theme" value="simple" />  
    18.     <!-- 把action對象交給spring創建 -->  
    19.     <constant name="struts.objectFactory" value="spring" />  
    20.   
    21.     <package name="myDefault" extends="struts-default">  
    22.         <default-action-ref name="indexPage" />  
    23.         <global-results>  
    24.             <result name="exceptionPage">/WEB-INF/exceptionPage.jsp  
    25.             </result>  
    26.         </global-results>  
    27.         <global-exception-mappings>  
    28.             <exception-mapping result="exceptionPage" exception="java.lang.Exception" />  
    29.         </global-exception-mappings>        
    30.         <action name="indexPage">  
    31.             <result>/login.jsp</result>  
    32.         </action>  
    33.     </package>  
    34.   
    35.     <package name="user" namespace="/user" extends="myDefault">  
    36.         <!-- 這里面的class不是指完整類路徑,而是指在spring中定義的bean的名稱 -->  
    37.         <action name="*UserAction" class="userAction" method="{1}">  
    38.             <result name="success">/WEB-INF/user/loginSuccess.jsp</result>  
    39.             <result name="input">/login.jsp</result>  
    40.         </action>  
    41.     </package>  
    42.   
    43. </struts>  

     UserAction類:

    Java代碼
    1. package com.fsj.web;  
    2.   
    3. import java.util.Map;  
    4.   
    5. import javax.annotation.Resource;  
    6.   
    7. import org.apache.struts2.interceptor.SessionAware;  
    8. import org.springframework.context.annotation.Scope;  
    9. import org.springframework.stereotype.Controller;  
    10.   
    11. import com.fsj.model.User;  
    12. import com.fsj.sevice.UserService;  
    13. import com.opensymphony.xwork2.ActionSupport;  
    14. @Controller("userAction")@Scope("prototype")  
    15. public class UserAction extends ActionSupport implements SessionAware{  
    16.   
    17.     private Map<String, Object> session;  
    18.     private User user;  
    19.     @Resource  
    20.     private UserService userService;  
    21.       
    22.     public String getResult() {  
    23.         return result;  
    24.     }  
    25.   
    26.     public String login()  
    27.     {  
    28.         User logindUser = userService.login(user.getUname(), user.getUpwd());  
    29.         if(logindUser==null)  
    30.         {  
    31.             addActionError("用戶名或密碼錯誤,請重新輸入。");  
    32.             return INPUT;  
    33.         }  
    34.         session.put("user", logindUser);  
    35.         return SUCCESS;  
    36.     }  
    37.           
    38.     public User getUser() {  
    39.         return user;  
    40.     }  
    41.   
    42.     public void setUser(User user) {  
    43.         this.user = user;  
    44.     }  
    45.   
    46.     public void setSession(Map<String, Object> session) {  
    47.         this.session = session;  
    48.     }  
    49. }  

    與UserAction同一包中建立驗證文件:UserAction-validation.xml

    Xml代碼
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2.  <!DOCTYPE validators PUBLIC   
    3.         "-//OpenSymphony Group//XWork Validator 1.0.2//EN"   
    4.         "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">  
    5.   
    6. <validators>  
    7.     <field name="user.uname">  
    8.         <field-validator type="requiredstring">  
    9.             <message>登錄的用戶名不能為空</message>  
    10.         </field-validator>  
    11.         <field-validator type="regex">  
    12.             <param name="expression">^[a-zA-Z][a-zA-Z0-9_]{3,14}$</param>  
    13.             <message>登錄的用戶名必須以字母開始,后面跟字母、數字或_,長度為4-15位</message>  
    14.         </field-validator>  
    15.     </field>  
    16.       
    17.     <field name="user.upwd">  
    18.         <field-validator type="requiredstring">  
    19.             <message>登錄的密碼不能為空</message>  
    20.         </field-validator>  
    21.         <field-validator type="regex">  
    22.             <param name="expression">^[a-zA-Z0-9!@#]{4,15}$</param>  
    23.             <message>登錄的密碼可以由字母、數字和! @ # 組成,長度為4-15位</message>  
    24.         </field-validator>  
    25.     </field>  
    26. </validators>  
     

     login.jsp頁面:

    Jsp代碼
    1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
    2. <%@ taglib prefix="s" uri="/struts-tags" %>  
    3. <%  
    4. String path = request.getContextPath();  
    5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
    6. %>  
    7.   
    8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    9. <html>  
    10.   <head>  
    11.     <base href="<%=basePath%>">     
    12.     <title> 登陸</title>  
    13.   </head>  
    14.     
    15.   <body>  
    16.     <s:head/>  
    17.     <s:actionerror/>  
    18.         <s:fielderror />  
    19.     <s:form action="loginUserAction" namespace="/user" method="post">  
    20.         <s:textfield label="用戶名" name="user.uname" />  
    21.         <s:password label="密碼" name="user.upwd" />  
    22.         <s:submit value="登陸" />  
    23.     </s:form>  
    24.   </body>  
    25. </html>  
    posted on 2010-02-24 22:06 SIMONE 閱讀(1892) 評論(2)  編輯  收藏 所屬分類: struts

    FeedBack:
    # re: S2SH 框架 基于annotation配置
    2013-11-22 10:39 | 李炯
    我測試的時候報空指針是什么意思啊  回復  更多評論
      
    # re: S2SH 框架 基于annotation配置
    2013-11-22 10:40 | 李炯
    那個 hibernateTemplate 確定那樣寫就沒問題么??  回復  更多評論
      
    主站蜘蛛池模板: 日韩免费视频一区二区| 亚洲日本国产精华液| 女人张开腿等男人桶免费视频| a级毛片高清免费视频就| 亚洲AV无码专区国产乱码不卡| 亚洲黄色在线视频| 久久精品国产亚洲网站| 四虎影永久在线高清免费| 成全高清视频免费观看| 在线看无码的免费网站| 一区二区三区无码视频免费福利 | 国产精品美女久久久免费 | 日韩精品无码免费视频| 亚洲精品亚洲人成在线| 亚洲日韩国产精品无码av| 亚洲国产成人久久精品影视| 亚洲日韩精品无码一区二区三区| 四虎免费久久影院| 日日AV拍夜夜添久久免费| 好吊妞998视频免费观看在线| 97碰公开在线观看免费视频| 久久国产乱子伦精品免费不卡 | 亚洲午夜久久久久妓女影院| 亚洲日本中文字幕天堂网| 国产一级高清视频免费看| 日韩中文字幕在线免费观看| 黄网址在线永久免费观看| 午夜免费福利在线| 在线永久免费观看黄网站| 国产老女人精品免费视频| 日韩免费福利视频| 四虎永久成人免费| 亚洲精品综合久久| 久久精品国产精品亚洲人人| 亚洲色婷婷综合开心网| 91麻豆精品国产自产在线观看亚洲 | 亚洲午夜激情视频| 在线精品亚洲一区二区小说 | 一级免费黄色毛片| 中文字幕成人免费高清在线| 女同免费毛片在线播放|