zoukankan      html  css  js  c++  java
  • [转]Struts2.3.16.1+Hibernate4.3.4+Spring4.0.2 框架整合

    原文地址:http://blog.csdn.net/ycb1689/article/details/22928519

    最新版Struts2+Hibernate+Spring整合

    目前为止三大框架最新版本是:

    struts2.3.16.1

    hibernate4.3.4

    spring4.0.2

    其中struts2和hibernate的下载方式比较简单,但是spring下载有点麻烦,可以直接复制下面链接下载最新版spring


    http://repo.springsource.org/libs-release-local/org/springframework/spring/4.0.2.RELEASE/spring-framework-4.0.2.RELEASE-dist.zip 

    一. 所需的jar包(其中aopaliance-1.0.jar,是spring所依赖的jar,直接复制粘贴到谷歌百度就有的下载)

    框架

    版本

    所需jar包

    Struts2

    2.3.16.1

      

    Hibernate

    4.3.4   

    spring

    4.0.2


    其它


    二. 创建一张表

    [java] view plain
    1. CREATE TABLE `user` (  
    2.   
    3. `id` int(11) NOT NULL AUTO_INCREMENT,  
    4.   
    5. `user_name` varchar(20) DEFAULT NULL,  
    6.   
    7. `password` varchar(20) DEFAULT NULL,  
    8.   
    9. `address` varchar(100) DEFAULT NULL,  
    10.   
    11. `phone_number` varchar(20) DEFAULT NULL,  
    12.   
    13. `create_time` datetime DEFAULT NULL,  
    14.   
    15. `update_time` datetime DEFAULT NULL,  
    16.   
    17. PRIMARY KEY (`id`)  
    18.   
    19. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULTCHARSET=utf8;  
    20.   
    21. ---并插入一条数据  
    22. INSERT INTO `user` VALUES ("1', 'test','test', 'test', 'test', '2014-03-29 00:48:14', '2014-03-29 00:48:17');  


    三. 先看下myeclipse的目录结构



    四. 配置文件

    1. web.xml

    [java] view plain
    1. <!--?xml version="1.0" encoding="UTF-8"?-->  
    2. <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   
    3.     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">  
    4.   <display-name></display-name>   
    5.      
    6.   <!-- 添加对spring的支持 -->  
    7.   <context-param>  
    8.     <param-name>contextConfigLocation</param-name>  
    9.     <param-value>classpath:applicationContext.xml</param-value>  
    10.   </context-param>  
    11.      
    12.     <listener>  
    13.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    14.     </listener>  
    15.        
    16.   <!-- 添加对struts2的支持 -->  
    17.   <filter>  
    18.     <filter-name>struts2</filter-name>  
    19.     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
    20.   </filter>   
    21.   <!-- 当hibernate+spring配合使用的时候,如果设置了lazy=true,那么在读取数据的时候,当读取了父数据后,  
    22.      hibernate会自动关闭session,这样,当要使用子数据的时候,系统会抛出lazyinit的错误,  
    23.       这时就需要使用spring提供的 OpenSessionInViewFilter,OpenSessionInViewFilter主要是保持Session状态  
    24.       知道request将全部页面发送到客户端,这样就可以解决延迟加载带来的问题 -->  
    25.    <filter>  
    26.     <filter-name>openSessionInViewFilter</filter-name>  
    27.     <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>  
    28.     <init-param>  
    29.       <param-name>singleSession</param-name>  
    30.       <param-value>true</param-value>  
    31.     </init-param>  
    32.   </filter>  
    33.      
    34.   <filter-mapping>  
    35.     <filter-name>struts2</filter-name>  
    36.     <url-pattern>/*</url-pattern>  
    37.   </filter-mapping>  
    38.    <filter-mapping>  
    39.     <filter-name>openSessionInViewFilter</filter-name>  
    40.     <url-pattern>*.do,*.action</url-pattern>  
    41.   </filter-mapping>  
    42.      
    43.   <welcome-file-list>  
    44.     <welcome-file>index.jsp</welcome-file>  
    45.   </welcome-file-list>  
    46. </web-app>  


    2. applicationContext.xml

    [java] view plain
    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"   
    4.     xmlns:p="http://www.springframework.org/schema/p"  
    5.     xmlns:aop="http://www.springframework.org/schema/aop"   
    6.     xmlns:context="http://www.springframework.org/schema/context"  
    7.     xmlns:jee="http://www.springframework.org/schema/jee"  
    8.     xmlns:tx="http://www.springframework.org/schema/tx"  
    9.     xsi:schemaLocation="    
    10.         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
    11.         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
    12.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  
    13.         http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd  
    14.         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">    
    15.    
    16.     <!-- 加载数据库属性配置文件 -->  
    17.     <context:property-placeholder location="classpath:db.properties" />  
    18.    
    19.     <!-- 数据库连接池c3p0配置 -->  
    20.     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"  
    21.         destroy-method="close">  
    22.         <property name="jdbcUrl" value="${db.url}"></property>  
    23.         <property name="driverClass" value="${db.driverClassName}"></property>  
    24.         <property name="user" value="${db.username}"></property>  
    25.         <property name="password" value="${db.password}"></property>  
    26.         <property name="maxPoolSize" value="40"></property>  
    27.         <property name="minPoolSize" value="1"></property>  
    28.         <property name="initialPoolSize" value="1"></property>  
    29.         <property name="maxIdleTime" value="20"></property>  
    30.     </bean>  
    31.       
    32.     <!-- session工厂 -->  
    33.     <bean id="sessionFactory"  
    34.         class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">  
    35.         <property name="dataSource">  
    36.             <ref bean="dataSource" />  
    37.         </property>  
    38.         <property name="configLocation" value="classpath:hibernate.cfg.xml"/>  
    39.         <!-- 自动扫描注解方式配置的hibernate类文件 -->  
    40.         <property name="packagesToScan">  
    41.             <list>  
    42.                 <value>com.bufoon.entity</value>  
    43.             </list>  
    44.         </property>  
    45.     </bean>  
    46.    
    47.     <!-- 配置事务管理器 -->  
    48.     <bean id="transactionManager"  
    49.         class="org.springframework.orm.hibernate4.HibernateTransactionManager">  
    50.         <property name="sessionFactory" ref="sessionFactory" />  
    51.     </bean>  
    52.    
    53.     <!-- 配置事务通知属性 -->  
    54.     <tx:advice id="txAdvice" transaction-manager="transactionManager">  
    55.         <!-- 定义事务传播属性 -->  
    56.         <tx:attributes>  
    57.             <tx:method name="insert*" propagation="REQUIRED" />  
    58.             <tx:method name="update*" propagation="REQUIRED" />  
    59.             <tx:method name="edit*" propagation="REQUIRED" />  
    60.             <tx:method name="save*" propagation="REQUIRED" />  
    61.             <tx:method name="add*" propagation="REQUIRED" />  
    62.             <tx:method name="new*" propagation="REQUIRED" />  
    63.             <tx:method name="set*" propagation="REQUIRED" />  
    64.             <tx:method name="remove*" propagation="REQUIRED" />  
    65.             <tx:method name="delete*" propagation="REQUIRED" />  
    66.             <tx:method name="change*" propagation="REQUIRED" />  
    67.             <tx:method name="get*" propagation="REQUIRED" read-only="true" />  
    68.             <tx:method name="find*" propagation="REQUIRED" read-only="true" />  
    69.             <tx:method name="load*" propagation="REQUIRED" read-only="true" />  
    70.             <tx:method name="*" propagation="REQUIRED" read-only="true" />  
    71.         </tx:attributes>  
    72.     </tx:advice>  
    73.       
    74.     <!-- 应用普通类获取bean    
    75.     <bean id="appContext" class="com.soanl.util.tool.ApplicationUtil"/>-->  
    76.    
    77.     <!-- 配置事务切面 -->  
    78.     <aop:config>  
    79.         <aop:pointcut id="serviceOperation"  
    80.             expression="execution(* com.bufoon.service..*.*(..))" />  
    81.         <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" />  
    82.     </aop:config>  
    83.    
    84.     <!-- 自动加载构建bean -->  
    85.     <context:component-scan base-package="com.bufoon" />  
    86.    
    87. </beans>  



    3. db.properties

    [java] view plain
    1. db.driverClassName=com.mysql.jdbc.Driver  
    2. db.url=jdbc:mysql://localhost:3306/test  
    3. db.username=root  
    4. db.password=root  


    4. hibernate.cfg.xml

    [java] view plain
    1. <!--?xml version='1.0' encoding='UTF-8'?-->  
    2.    
    3.    
    4. <hibernate-configuration>  
    5.     <session-factory>  
    6.    
    7.         <property name="dialect">org.hibernate.dialect.MySQLDialect</property>  
    8.         <property name="jdbc.batch_size">20</property>  
    9.         <property name="connection.autocommit">true</property>  
    10.    
    11.         <!-- 显示sql语句 -->  
    12.         <property name="show_sql">true</property>  
    13.         <property name="connection.useUnicode">true</property>  
    14.         <property name="connection.characterEncoding">UTF-8</property>  
    15.    
    16.         <!-- 缓存设置 -->  
    17.         <property name="cache.provider_configuration_file_resource_path">/ehcache.xml</property>  
    18.         <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>  
    19.         <property name="cache.use_query_cache">true</property>  
    20.    
    21.     </session-factory>  
    22. </hibernate-configuration>  


    5. struts.xml

    [html] view plain
    1. <?xml version="1.0" encoding="UTF-8" ?>   
    2. <!DOCTYPE struts PUBLIC  
    3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"  
    4.     "http://struts.apache.org/dtds/struts-2.1.7.dtd">  
    5. <struts>  
    6.     <!-- 配置为开发模式 -->  
    7.     <constant name="struts.devMode" value="false" />  
    8.     <!-- 配置扩展名为action -->  
    9.     <constant name="struts.action.extension" value="action" />  
    10.     <!-- 配置主题 -->  
    11.     <constant name="struts.ui.theme" value="simple" />  
    12.     <!-- 配置上传文件大小此处默认为20M -->  
    13.     <constant name="struts.multipart.maxSize" value="2097152" />  
    14.       
    15.     <!-- 国际化编码 -->     
    16.     <constant name="struts.i18n.encoding" value="UTF-8" />     
    17.     <!-- 定位视图资源的根路径。默认值为/WEB-INF/content -->     
    18.     <constant value="/WEB-INF/templates" name="struts.convention.result.path" />     
    19.     <!-- 指定convention扫描以xxx结尾的包 -->     
    20.     <constant value="action" name="struts.convention.package.locators" />     
    21.     <!-- 是否将Action类转换成小写 -->     
    22.     <constant value="false" name="struts.convention.package.lowercase" />        
    23.          
    24.     <!-- 是否将actionName分割,去掉action部分,以大写字母作为分割 -->  
    25.     <constant name="struts.convention.action.name.separator" value="_" />  
    26.     <!-- 浏览器是否缓存静态内容 ,开发阶段最好关闭-->  
    27.     <constant name="struts.serve.static.browserCache" value="false"/>  
    28.     <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->   
    29.     <constant name="struts.configuration.xml.reload" value="true"/>      
    30.     <!-- 配置使用Spring管理Action -->  
    31.     <constant name="struts.objectFactory" value="spring"/>  
    32.     <!-- 让struts2始终先考虑spring的自动装箱   -->  
    33.     <constant name="struts.objectFactory.spring.autoWire.alwaysRespect" value="true" />  
    34.     <!-- 设置默认的父包  
    35.     <constant value="MAIN" name="struts.convention.default.parent.package" />  
    36.     <package name="MAIN" extends="struts-default" namespace="/">  
    37.     </package>  
    38.      -->  
    39.   
    40.       
    41.     <package name="default" namespace="/" extends="struts-default">  
    42.         <interceptors>  
    43.             <!--  声明一个拦截器   进行登录检查  -->  
    44.             <interceptor name="checkePrivilege" class="com.oa168.interceptor.CheckPrivilegeInterceptor"></interceptor>  
    45.               
    46.             <!--  重新定义defaultStack拦截器栈,需要先判断权限    -->   
    47.             <interceptor-stack name="defaultStack">  
    48.                 <interceptor-ref name="checkePrivilege" />  
    49.                 <interceptor-ref name="defaultStack" />  
    50.             </interceptor-stack>  
    51.         </interceptors>  
    52.            
    53.         <!-- 配置全局的Result -->  
    54.         <global-results>  
    55.             <result name="loginUI">/WEB-INF/jsp/userAction/loginUI.jsp</result>  
    56.             <result name="noPrivilegeError">/noPrivilegeError.jsp</result>  
    57.         </global-results>  
    58.           
    59.         <!-- 测试用的action,当与Spring整合后,class属性写的就是Spring中bean的名称   
    60.              不需要写com.oa168.test.TestAction形式  
    61.              所以整合就是在Action类中加入@Controller  @Scope("prototype")  
    62.              并在Web.xml中加入监听器  
    63.         <listener>  
    64.             <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    65.         </listener>  
    66.         <context-param>  
    67.             <param-name>contextConfigLocation</param-name>  
    68.             <param-value>classpath:applicationContext*.xml</param-value>  
    69.         </context-param>  
    70.            -->  
    71.         <action name="test" class="testAction">  
    72.             <result name="success">/test.jsp</result>  
    73.         </action>   
    74.       
    75.         <!-- 首页 -->  
    76.         <action name="homeAction_*" class="homeAction" method="{1}">  
    77.             <result name="{1}">/WEB-INF/jsp/homeAction/{1}.jsp</result>  
    78.             <!--   
    79.             <result name="index">/WEB-INF/jsp/homeAction/Index.jsp</result>  
    80.             <result name="top">/WEB-INF/jsp/homeAction/Top.jsp</result>  
    81.             <result name="bottom">/WEB-INF/jsp/homeAction/Bottom.jsp</result>  
    82.             <result name="left">/WEB-INF/jsp/homeAction/Left.jsp</result>  
    83.             <result name="mainFrame">/WEB-INF/jsp/homeAction/MainFrame.jsp</result> -->  
    84.         </action>  
    85.            
    86.     </package>  
    87.   
    88. </struts>  


     

    FreeMark的配置

     

    为了在FreeMarker模板中使用标签库,可按如下步骤进行

    1.将struts-tags.tld文件复制到WEB-INF目录下

       即将系统所需的标签库定义文件(*.tld文件)复制到web应用中。对于基于struts2框架的JAVA_Web应用,则需要将Struts2- core.jar包解压,取出其中的struts-tags.tld文件,并复制到web应用的WEB-INF目录下。同时所需的最少Jar包如下图

    2.在web.xml文件中启动JspSupportServlet

      在web.xml文件中作如下配置,如下:

    [html] view plain
    1.  <servlet>  
    2. <servlet-name>JspSupportServlet</servlet-name>  
    3. <servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>  
    4.       <!--配置JspSupportServlet自启动-->  
    5. <load-on-startup>1</load-on-startup>  
    6. </servlet>  

    此配置本人没配FreeMark一样可以,具体用处有待研究。

    3. 在FreeMarker模板文件中使用“assign指令”导入标签库

     导入标签库的代码如下:

    [html] view plain
    1. <#--定义web-inf/strust-tags.tld文件对应的标签库前缀为s-->  
    2.  <#assigns=JspTaglibs["/WEB-INF/struts-tags.tld"]/>  

    说明:在上面导入的标签库定义文件中,指定了标签库前缀为s,而该前缀对应的标签库定义文件主放置在/WEB-INF/struts-tags.tld路径下、

    4.完毕

    经过上述步骤后,即可在应用的FreeMarker模板中使用Struts2标签。在FreeMarker模板中增加了标签库定义后,就可以在FreeMarker模板中使用Struts2标签了。在FreeMarker使用标签与在jsp中使用标签略有差别.

    补充说明

       我们不能直接通过浏览器直接请求该页面,否则看到的不是我们想要的结果,而是该模板页面的源代码(因为WEB容器默认不会处理 FreeMarker模板页面)。

            正如前面使用FreeMarker模板作为视图组件时看到的,FreeMarker作为视图组件是由Servlet负责加载该模板,并使用数据模型填充该模板,并且填充后的标准HTML响应输出给浏览者。

       在Strtus2框架的支持下,Struts2框架充当了之前的Servlet角色只要浏览者的请求经过了Struts2处理后,Struts2框架就会自动加载FreeMarker模板,并使用数据模型填充该模板,并且将最后的HTML页面输出给浏览者.。

       为了让所有的用户请求都经过Struts2框架处理,我们将所有的FreeMarker模板文件放在web-inf/ftl路径下.

       因为浏览者无法直接访问web-inf/ftl路径下的资源,所以我们在struts.xml配置文中增加了如下配置片段:

    [html] view plain
    1. <action name="*">  
    2.           <result type="freemarker">/WEB-INF/ftl/{1}.ftl</result>  
    3.       </action>  

    也就是把原来的Action中的result属性中type值改成“freemarker”

    五. JAVA类

    1.BaseDAO.java(网上找的一个)

     

    [java] view plain
    1. package com.bufoon.dao;  
    2.    
    3. import java.io.Serializable;  
    4. import java.util.List;  
    5.    
    6. /** 
    7.  * 基础数据库操作类 
    8.  *  
    9.  * @author ss 
    10.  *  
    11.  */  
    12. public interface BaseDAO<T> {  
    13.    
    14.     /** 
    15.      * 保存一个对象 
    16.      *  
    17.      * @param o 
    18.      * @return 
    19.      */  
    20.     public Serializable save(T o);  
    21.    
    22.     /** 
    23.      * 删除一个对象 
    24.      *  
    25.      * @param o 
    26.      */  
    27.     public void delete(T o);  
    28.    
    29.     /** 
    30.      * 更新一个对象 
    31.      *  
    32.      * @param o 
    33.      */  
    34.     public void update(T o);  
    35.    
    36.     /** 
    37.      * 保存或更新对象 
    38.      *  
    39.      * @param o 
    40.      */  
    41.     public void saveOrUpdate(T o);  
    42.    
    43.     /** 
    44.      * 查询 
    45.      *  
    46.      * @param hql 
    47.      * @return 
    48.      */  
    49.     public List<T> find(String hql);  
    50.    
    51.     /** 
    52.      * 查询集合 
    53.      *  
    54.      * @param hql 
    55.      * @param param 
    56.      * @return 
    57.      */  
    58.     public List<T> find(String hql, Object[] param);  
    59.    
    60.     /** 
    61.      * 查询集合 
    62.      *  
    63.      * @param hql 
    64.      * @param param 
    65.      * @return 
    66.      */  
    67.     public List<T> find(String hql, List<Object> param);  
    68.    
    69.     /** 
    70.      * 查询集合(带分页) 
    71.      *  
    72.      * @param hql 
    73.      * @param param 
    74.      * @param page 
    75.      *            查询第几页 
    76.      * @param rows 
    77.      *            每页显示几条记录 
    78.      * @return 
    79.      */  
    80.     public List<T> find(String hql, Object[] param, Integer page, Integer rows);  
    81.    
    82.     /** 
    83.      * 查询集合(带分页) 
    84.      *  
    85.      * @param hql 
    86.      * @param param 
    87.      * @param page 
    88.      * @param rows 
    89.      * @return 
    90.      */  
    91.     public List<T> find(String hql, List<Object> param, Integer page, Integer rows);  
    92.    
    93.     /** 
    94.      * 获得一个对象 
    95.      *  
    96.      * @param c 
    97.      *            对象类型 
    98.      * @param id 
    99.      * @return Object 
    100.      */  
    101.     public T get(Class<T> c, Serializable id);  
    102.    
    103.     /** 
    104.      * 获得一个对象 
    105.      *  
    106.      * @param hql 
    107.      * @param param 
    108.      * @return Object 
    109.      */  
    110.     public T get(String hql, Object[] param);  
    111.    
    112.     /** 
    113.      * 获得一个对象 
    114.      *  
    115.      * @param hql 
    116.      * @param param 
    117.      * @return 
    118.      */  
    119.     public T get(String hql, List<Object> param);  
    120.    
    121.     /** 
    122.      * select count(*) from 类 
    123.      *  
    124.      * @param hql 
    125.      * @return 
    126.      */  
    127.     public Long count(String hql);  
    128.    
    129.     /** 
    130.      * select count(*) from 类 
    131.      *  
    132.      * @param hql 
    133.      * @param param 
    134.      * @return 
    135.      */  
    136.     public Long count(String hql, Object[] param);  
    137.    
    138.     /** 
    139.      * select count(*) from 类 
    140.      *  
    141.      * @param hql 
    142.      * @param param 
    143.      * @return 
    144.      */  
    145.     public Long count(String hql, List<Object> param);  
    146.    
    147.     /** 
    148.      * 执行HQL语句 
    149.      *  
    150.      * @param hql 
    151.      * @return 响应数目 
    152.      */  
    153.     public Integer executeHql(String hql);  
    154.    
    155.     /** 
    156.      * 执行HQL语句 
    157.      *  
    158.      * @param hql 
    159.      * @param param 
    160.      * @return 响应数目 
    161.      */  
    162.     public Integer executeHql(String hql, Object[] param);  
    163.    
    164.     /** 
    165.      * 执行HQL语句 
    166.      *  
    167.      * @param hql 
    168.      * @param param 
    169.      * @return 
    170.      */  
    171.     public Integer executeHql(String hql, List<Object> param);  
    172.    
    173. }  


    2. BaseDAOImpl.java

    [java] view plain
    1. package com.bufoon.dao.impl;  
    2.    
    3. import java.io.Serializable;  
    4. import java.util.List;  
    5.    
    6. import org.hibernate.Query;  
    7. import org.hibernate.Session;  
    8. import org.hibernate.SessionFactory;  
    9. import org.springframework.beans.factory.annotation.Autowired;  
    10. import org.springframework.stereotype.Repository;  
    11.    
    12. import com.bufoon.dao.BaseDAO;  
    13.    
    14. @Repository("baseDAO")  
    15. @SuppressWarnings("all")  
    16. public class BaseDAOImpl<T> implements BaseDAO<T> {  
    17.    
    18.     private SessionFactory sessionFactory;  
    19.    
    20.     public SessionFactory getSessionFactory() {  
    21.         return sessionFactory;  
    22.     }  
    23.    
    24.     @Autowired  
    25.     public void setSessionFactory(SessionFactory sessionFactory) {  
    26.         this.sessionFactory = sessionFactory;  
    27.     }  
    28.    
    29.     private Session getCurrentSession() {  
    30.         return sessionFactory.getCurrentSession();  
    31.     }  
    32.    
    33.     public Serializable save(T o) {  
    34.         return this.getCurrentSession().save(o);  
    35.     }  
    36.    
    37.     public void delete(T o) {  
    38.         this.getCurrentSession().delete(o);  
    39.     }  
    40.    
    41.     public void update(T o) {  
    42.         this.getCurrentSession().update(o);  
    43.     }  
    44.    
    45.     public void saveOrUpdate(T o) {  
    46.         this.getCurrentSession().saveOrUpdate(o);  
    47.     }  
    48.    
    49.     public List<T> find(String hql) {  
    50.         return this.getCurrentSession().createQuery(hql).list();  
    51.     }  
    52.    
    53.     public List<T> find(String hql, Object[] param) {  
    54.         Query q = this.getCurrentSession().createQuery(hql);  
    55.         if (param != null && param.length > 0) {  
    56.             for (int i = 0; i < param.length; i++) {  
    57.                 q.setParameter(i, param[i]);  
    58.             }  
    59.         }  
    60.         return q.list();  
    61.     }  
    62.    
    63.     public List<T> find(String hql, List<Object> param) {  
    64.         Query q = this.getCurrentSession().createQuery(hql);  
    65.         if (param != null && param.size() > 0) {  
    66.             for (int i = 0; i < param.size(); i++) {  
    67.                 q.setParameter(i, param.get(i));  
    68.             }  
    69.         }  
    70.         return q.list();  
    71.     }  
    72.    
    73.     public List<T> find(String hql, Object[] param, Integer page, Integer rows) {  
    74.         if (page == null || page < 1) {  
    75.             page = 1;  
    76.         }  
    77.         if (rows == null || rows < 1) {  
    78.             rows = 10;  
    79.         }  
    80.         Query q = this.getCurrentSession().createQuery(hql);  
    81.         if (param != null && param.length > 0) {  
    82.             for (int i = 0; i < param.length; i++) {  
    83.                 q.setParameter(i, param[i]);  
    84.             }  
    85.         }  
    86.         return q.setFirstResult((page - 1) * rows).setMaxResults(rows).list();  
    87.     }  
    88.    
    89.     public List<T> find(String hql, List<Object> param, Integer page, Integer rows) {  
    90.         if (page == null || page < 1) {  
    91.             page = 1;  
    92.         }  
    93.         if (rows == null || rows < 1) {  
    94.             rows = 10;  
    95.         }  
    96.         Query q = this.getCurrentSession().createQuery(hql);  
    97.         if (param != null && param.size() > 0) {  
    98.             for (int i = 0; i < param.size(); i++) {  
    99.                 q.setParameter(i, param.get(i));  
    100.             }  
    101.         }  
    102.         return q.setFirstResult((page - 1) * rows).setMaxResults(rows).list();  
    103.     }  
    104.    
    105.     public T get(Class<T> c, Serializable id) {  
    106.         return (T) this.getCurrentSession().get(c, id);  
    107.     }  
    108.    
    109.     public T get(String hql, Object[] param) {  
    110.         List<T> l = this.find(hql, param);  
    111.         if (l != null && l.size() > 0) {  
    112.             return l.get(0);  
    113.         } else {  
    114.             return null;  
    115.         }  
    116.     }  
    117.    
    118.     public T get(String hql, List<Object> param) {  
    119.         List<T> l = this.find(hql, param);  
    120.         if (l != null && l.size() > 0) {  
    121.             return l.get(0);  
    122.         } else {  
    123.             return null;  
    124.         }  
    125.     }  
    126.    
    127.     public Long count(String hql) {  
    128.         return (Long) this.getCurrentSession().createQuery(hql).uniqueResult();  
    129.     }  
    130.    
    131.     public Long count(String hql, Object[] param) {  
    132.         Query q = this.getCurrentSession().createQuery(hql);  
    133.         if (param != null && param.length > 0) {  
    134.             for (int i = 0; i < param.length; i++) {  
    135.                 q.setParameter(i, param[i]);  
    136.             }  
    137.         }  
    138.         return (Long) q.uniqueResult();  
    139.     }  
    140.    
    141.     public Long count(String hql, List<Object> param) {  
    142.         Query q = this.getCurrentSession().createQuery(hql);  
    143.         if (param != null && param.size() > 0) {  
    144.             for (int i = 0; i < param.size(); i++) {  
    145.                 q.setParameter(i, param.get(i));  
    146.             }  
    147.         }  
    148.         return (Long) q.uniqueResult();  
    149.     }  
    150.    
    151.     public Integer executeHql(String hql) {  
    152.         return this.getCurrentSession().createQuery(hql).executeUpdate();  
    153.     }  
    154.    
    155.     public Integer executeHql(String hql, Object[] param) {  
    156.         Query q = this.getCurrentSession().createQuery(hql);  
    157.         if (param != null && param.length > 0) {  
    158.             for (int i = 0; i < param.length; i++) {  
    159.                 q.setParameter(i, param[i]);  
    160.             }  
    161.         }  
    162.         return q.executeUpdate();  
    163.     }  
    164.    
    165.     public Integer executeHql(String hql, List<Object> param) {  
    166.         Query q = this.getCurrentSession().createQuery(hql);  
    167.         if (param != null && param.size() > 0) {  
    168.             for (int i = 0; i < param.size(); i++) {  
    169.                 q.setParameter(i, param.get(i));  
    170.             }  
    171.         }  
    172.         return q.executeUpdate();  
    173.     }  
    174.    
    175. }  


    3. UserService.java

    [java] view plain
    1. package com.bufoon.service.user;  
    2.    
    3. import java.util.List;  
    4.    
    5. import com.bufoon.entity.User;  
    6.    
    7. public interface UserService {  
    8.    
    9.     public void saveUser(User user);  
    10.       
    11.     public void updateUser(User user);  
    12.       
    13.     public User findUserById(int id);  
    14.       
    15.     public void deleteUser(User user);  
    16.       
    17.     public List<User> findAllList();  
    18.       
    19.     public User findUserByNameAndPassword(String username, String password);  
    20. }  



    4. UserServiceImpl.java

    [java] view plain
    1. package com.bufoon.service.user.impl;  
    2.    
    3. import java.util.List;  
    4.    
    5. import javax.annotation.Resource;  
    6.    
    7. import org.springframework.stereotype.Service;  
    8.    
    9. import com.bufoon.dao.BaseDAO;  
    10. import com.bufoon.entity.User;  
    11. import com.bufoon.service.user.UserService;  
    12.    
    13. @Service("userService")  
    14. public class UserServiceImpl implements UserService {  
    15.       
    16.     @Resource  
    17.     private BaseDAO<User> baseDAO;  
    18.    
    19.     @Override  
    20.     public void saveUser(User user) {  
    21.         baseDAO.save(user);  
    22.     }  
    23.    
    24.     @Override  
    25.     public void updateUser(User user) {  
    26.         baseDAO.update(user);  
    27.     }  
    28.    
    29.     @Override  
    30.     public User findUserById(int id) {  
    31.         return baseDAO.get(User.class, id);  
    32.     }  
    33.    
    34.     @Override  
    35.     public void deleteUser(User user) {  
    36.         baseDAO.delete(user);  
    37.     }  
    38.    
    39.     @Override  
    40.     public List<User> findAllList() {  
    41.         return baseDAO.find(" from User u order by u.createTime");  
    42.     }  
    43.    
    44.     @Override  
    45.     public User findUserByNameAndPassword(String username, String password) {  
    46.         return baseDAO.get(" from User u where u.userName = ? and u.password = ? ", new Object[] { username, password });  
    47.     }  
    48.    
    49. }  



    5. LoginAction

    [java] view plain
    1. package com.bufoon.action;  
    2.    
    3. import javax.annotation.Resource;  
    4. import javax.servlet.http.HttpServletRequest;  
    5.    
    6. import org.apache.struts2.ServletActionContext;  
    7. import org.springframework.stereotype.Controller;  
    8.    
    9. import com.bufoon.entity.User;  
    10. import com.bufoon.service.user.UserService;  
    11. import com.opensymphony.xwork2.ActionSupport;  
    12.    
    13. @Controller  
    14. public class LoginAction extends ActionSupport {  
    15.    
    16.     private static final long serialVersionUID = 1L;  
    17.    
    18.     @Resource  
    19.     private UserService userService;  
    20.       
    21.     private String username;  
    22.     private String password;  
    23.       
    24.     public String login(){  
    25.           
    26.         HttpServletRequest request = ServletActionContext.getRequest();  
    27.         User user = userService.findUserByNameAndPassword(username, password);  
    28.         if (user != null) {  
    29.             request.setAttribute("username", username);  
    30.             return SUCCESS;  
    31.         } else {  
    32.             return ERROR;  
    33.         }  
    34.               
    35.     }  
    36.     public String getUsername() {  
    37.         return username;  
    38.     }  
    39.     public void setUsername(String username) {  
    40.         this.username = username;  
    41.     }  
    42.     public String getPassword() {  
    43.         return password;  
    44.     }  
    45.     public void setPassword(String password) {  
    46.         this.password = password;  
    47.     }  
    48.       
    49. }  


    6. Util.java

    [java] view plain
    1. package com.bufoon.util;  
    2.    
    3. import java.io.PrintWriter;  
    4. import java.io.StringWriter;  
    5. import java.security.MessageDigest;  
    6.    
    7. import org.springframework.context.ApplicationContext;  
    8. import org.springframework.context.support.ClassPathXmlApplicationContext;  
    9.    
    10. import com.bufoon.entity.User;  
    11. import com.bufoon.service.user.UserService;  
    12.    
    13. import sun.misc.BASE64Encoder;  
    14.    
    15. /** 
    16.  * 通用工具类 
    17.  */  
    18. public class Util {  
    19.    
    20.     /** 
    21.      * 对字符串进行MD5加密 
    22.      *  
    23.      * @param str 
    24.      * @return String 
    25.      */  
    26.     public static String md5Encryption(String str) {  
    27.         String newStr = null;  
    28.         try {  
    29.             MessageDigest md5 = MessageDigest.getInstance("MD5");  
    30.             BASE64Encoder base = new BASE64Encoder();  
    31.             newStr = base.encode(md5.digest(str.getBytes("UTF-8")));  
    32.         } catch (Exception e) {  
    33.             e.printStackTrace();  
    34.         }  
    35.         return newStr;  
    36.     }  
    37.        
    38.    
    39.     /** 
    40.      * 判断字符串是否为空 
    41.      *  
    42.      * @param str 
    43.      *            字符串 
    44.      * @return true:为空; false:非空 
    45.      */  
    46.     public static boolean isNull(String str) {  
    47.         if (str != null && !str.trim().equals("")) {  
    48.             return false;  
    49.         } else {  
    50.             return true;  
    51.         }  
    52.     }  
    53. }  


    六. JSP文件

    1. login.jsp

    [java] view plain
    1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
    2. <%  
    3. String path = request.getContextPath();  
    4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
    5. %>  
    6.    
    7.    
    8. <html>  
    9.      
    10.     <base href="<%=basePath%>">  
    11.        
    12.     <title>My JSP 'index.jsp' starting page</title>  
    13.     <meta http-equiv="pragma" content="no-cache">  
    14.     <meta http-equiv="cache-control" content="no-cache">  
    15.     <meta http-equiv="expires" content="0">      
    16.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
    17.     <meta http-equiv="description" content="This is my page">  
    18.     <!--  
    19.     <link rel="stylesheet" type="text/css" href="styles.css">  
    20.     -->  
    21.      
    22.      
    23.      
    24.   <form action="${pageContext.request.contextPath}/user/login.action" method="post">  
    25.      username:<input type="text" name="username"> <br>  
    26.      password:<input type="password" name="password"> <br>  
    27.     <input type="submit" value="login"><input type="reset" value="reset">  
    28.   </form>  


    2. success.jsp

    [java] view plain
    1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
    2. <%  
    3. String path = request.getContextPath();  
    4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
    5. %>  
    6.    
    7.    
    8.    
    9.      
    10.     <base href="<%=basePath%>">  
    11.        
    12.     <title>My JSP 'index.jsp' starting page</title>  
    13.     <meta http-equiv="pragma" content="no-cache">  
    14.     <meta http-equiv="cache-control" content="no-cache">  
    15.     <meta http-equiv="expires" content="0">      
    16.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
    17.     <meta http-equiv="description" content="This is my page">  
    18.     <!--  
    19.     <link rel="stylesheet" type="text/css" href="styles.css">  
    20.     -->  
    21.      
    22.      
    23.      
    24.   <form action="${pageContext.request.contextPath}/user/login.action" method="post">  
    25.      username:<input type="text" name="username"> <br>  
    26.      password:<input type="password" name="password"> <br>  
    27.     <input type="submit" value="login"><input type="reset" value="reset">  
    28.   </form>  


    ================================================================ENDING==================================================

  • 相关阅读:
    Fix Installing .NET Framework 3.5 failed Error Code 0x800F0954 on Windows 10
    RHEL8安装五笔输入法
    Enable EPEL and Local Repository on RHEL8
    Why is Yum Replaced by DNF?
    检查Linux服务器是否被攻击的常用命令及方法
    IDEA 主题
    IDEA 如何显示一个类中所有的方法
    Appium 安装以及安装过程中遇到的问题
    Maven 如何发布 jar 包到 Nexus 私库
    java泛型的基本使用
  • 原文地址:https://www.cnblogs.com/dirgo/p/5275080.html
Copyright © 2011-2022 走看看