简单ssh框架整合

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Struts2+Spring4 +Hibernate4 首先看看建立项目的框架      第一步  建立web项目 第二步  导入相对应需要的jar包(放在项目WEB-INFO/lib下)   需要导入Spring需要的,Struts2需要的,Hibernate需要的,mysQL连接驱动;    第三步  配置ssh各个的xml文件;      第四步 将log4j.

Struts2+Spring4 +Hibernate4

首先看看建立项目的框架

    

第一步  建立web项目

第二步  导入相对应需要的jar包(放在项目WEB-INFO/lib下)

  需要导入Spring需要的,Struts2需要的,Hibernate需要的,mysQL连接驱动;

  

第三步  配置ssh各个的xml文件;

    

第四步 将log4j.dtd与log4j.xml放在WEB-INFO下:

    log4j.xml  

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
 3 <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
 4 
 5     <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
 6         <layout class="org.apache.log4j.PatternLayout">
 7             <param name="ConversionPattern" value="%c %d{yyyy-MM-dd HH:mm:ss} -- %p -- %m%n" />
 8         </layout>
 9     </appender>
10 
11     <appender name="DEBUG" class="org.apache.log4j.RollingFileAppender">
12         <param name="File" value="${sshWeb.root}/sshWeb-debug.log" />
13         <param name="Append" value="true" />
14         <param name="MaxFileSize" value="10240KB" />
15         <param name="MaxBackupIndex" value="1000" />
16         <layout class="org.apache.log4j.PatternLayout">
17             <param name="ConversionPattern" value="%c %d{yyyy-MM-dd HH:mm:ss} -- %p -- %m%n" />
18         </layout>
19         <filter class="org.apache.log4j.varia.LevelRangeFilter">
20             <param name="LevelMin" value="DEBUG" />
21             <param name="LevelMax" value="DEBUG" />
22         </filter>
23     </appender>
24 
25     <appender name="INFO" class="org.apache.log4j.RollingFileAppender">
26         <param name="File" value="${sshWeb.root}/sshWeb-info.log" />
27         <param name="Append" value="true" />
28         <param name="MaxFileSize" value="10240KB" />
29         <param name="MaxBackupIndex" value="1000" />
30         <layout class="org.apache.log4j.PatternLayout">
31             <param name="ConversionPattern" value="%c %d{yyyy-MM-dd HH:mm:ss} -- %p -- %m%n" />
32         </layout>
33         <filter class="org.apache.log4j.varia.LevelRangeFilter">
34             <param name="LevelMin" value="INFO" />
35             <param name="LevelMax" value="INFO" />
36         </filter>
37     </appender>
38 
39     <appender name="WARN" class="org.apache.log4j.RollingFileAppender">
40         <param name="File" value="${sshWeb.root}/sshWeb-warn.log" />
41         <param name="Append" value="true" />
42         <param name="MaxFileSize" value="10240KB" />
43         <param name="MaxBackupIndex" value="1000" />
44         <layout class="org.apache.log4j.PatternLayout">
45             <param name="ConversionPattern" value="%c %d{yyyy-MM-dd HH:mm:ss} -- %p -- %m%n" />
46         </layout>
47         <filter class="org.apache.log4j.varia.LevelRangeFilter">
48             <param name="LevelMin" value="WARN" />
49             <param name="LevelMax" value="WARN" />
50         </filter>
51     </appender>
52 
53     <appender name="ERROR" class="org.apache.log4j.RollingFileAppender">
54         <param name="File" value="${sshWeb.root}/sshWeb-error.log" />
55         <param name="Append" value="true" />
56         <param name="MaxFileSize" value="10240KB" />
57         <param name="MaxBackupIndex" value="1000" />
58         <layout class="org.apache.log4j.PatternLayout">
59             <param name="ConversionPattern" value="%c %d{yyyy-MM-dd HH:mm:ss} -- %p -- %m%n" />
60         </layout>
61         <filter class="org.apache.log4j.varia.LevelRangeFilter">
62             <param name="LevelMin" value="ERROR" />
63             <param name="LevelMax" value="ERROR" />
64         </filter>
65     </appender>
66 
67     <root>
68         <priority value="INFO" />
69         <appender-ref ref="STDOUT" />
70         <appender-ref ref="DEBUG" />
71         <appender-ref ref="INFO" />
72         <appender-ref ref="WARN" />
73         <appender-ref ref="ERROR" />
74     </root>
75 
76 </log4j:configuration>
View Code

 

    log4j.dtd

  1 <?xml version="1.0" encoding="UTF-8" ?>
  2 <!--
  3  Licensed to the Apache Software Foundation (ASF) under one or more
  4  contributor license agreements.  See the NOTICE file distributed with
  5  this work for additional information regarding copyright ownership.
  6  The ASF licenses this file to You under the Apache License, Version 2.0
  7  (the "License"); you may not use this file except in compliance with
  8  the License.  You may obtain a copy of the License at
  9 
 10       http://www.apache.org/licenses/LICENSE-2.0
 11 
 12  Unless required by applicable law or agreed to in writing, software
 13  distributed under the License is distributed on an "AS IS" BASIS,
 14  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 15  See the License for the specific language governing permissions and
 16  limitations under the License.
 17 -->
 18 
 19 <!-- Authors: Chris Taylor, Ceki Gulcu. -->
 20 
 21 <!-- Version: 1.2 -->
 22 
 23 <!-- A configuration element consists of optional renderer
 24 elements,appender elements, categories and an optional root
 25 element. -->
 26 
 27 <!ELEMENT log4j:configuration (renderer*, throwableRenderer?,
 28                                appender*,plugin*, (category|logger)*,root?,
 29                                (categoryFactory|loggerFactory)?)>
 30 
 31 <!-- The "threshold" attribute takes a level value below which -->
 32 <!-- all logging statements are disabled. -->
 33 
 34 <!-- Setting the "debug" enable the printing of internal log4j logging   -->
 35 <!-- statements.                                                         -->
 36 
 37 <!-- By default, debug attribute is "null", meaning that we not do touch -->
 38 <!-- internal log4j logging settings. The "null" value for the threshold -->
 39 <!-- attribute can be misleading. The threshold field of a repository     -->
 40 <!-- cannot be set to null. The "null" value for the threshold attribute -->
 41 <!-- simply means don't touch the threshold field, the threshold field   --> 
 42 <!-- keeps its old value.                                                -->
 43      
 44 <!ATTLIST log4j:configuration
 45   xmlns:log4j              CDATA #FIXED "http://jakarta.apache.org/log4j/" 
 46   threshold                (all|trace|debug|info|warn|error|fatal|off|null) "null"
 47   debug                    (true|false|null)  "null"
 48   reset                    (true|false) "false"
 49 >
 50 
 51 <!-- renderer elements allow the user to customize the conversion of  -->
 52 <!-- message objects to String.                                       -->
 53 
 54 <!ELEMENT renderer EMPTY>
 55 <!ATTLIST renderer
 56   renderedClass  CDATA #REQUIRED
 57   renderingClass CDATA #REQUIRED
 58 >
 59 
 60 <!--  throwableRenderer allows the user to customize the conversion
 61          of exceptions to a string representation.  -->
 62 <!ELEMENT throwableRenderer (param*)>
 63 <!ATTLIST throwableRenderer
 64   class  CDATA #REQUIRED
 65 >
 66 
 67 
 68 <!-- Appenders must have a name and a class. -->
 69 <!-- Appenders may contain an error handler, a layout, optional parameters -->
 70 <!-- and filters. They may also reference (or include) other appenders. -->
 71 <!ELEMENT appender (errorHandler?, param*,
 72       rollingPolicy?, triggeringPolicy?, connectionSource?,
 73       layout?, filter*, appender-ref*)>
 74 <!ATTLIST appender
 75   name         CDATA     #REQUIRED
 76   class     CDATA    #REQUIRED
 77 >
 78 
 79 <!ELEMENT layout (param*)>
 80 <!ATTLIST layout
 81   class        CDATA    #REQUIRED
 82 >
 83 
 84 <!ELEMENT filter (param*)>
 85 <!ATTLIST filter
 86   class        CDATA    #REQUIRED
 87 >
 88 
 89 <!-- ErrorHandlers can be of any class. They can admit any number of -->
 90 <!-- parameters. -->
 91 
 92 <!ELEMENT errorHandler (param*, root-ref?, logger-ref*,  appender-ref?)> 
 93 <!ATTLIST errorHandler
 94    class        CDATA   #REQUIRED 
 95 >
 96 
 97 <!ELEMENT root-ref EMPTY>
 98 
 99 <!ELEMENT logger-ref EMPTY>
100 <!ATTLIST logger-ref
101   ref CDATA #REQUIRED
102 >
103 
104 <!ELEMENT param EMPTY>
105 <!ATTLIST param
106   name        CDATA   #REQUIRED
107   value        CDATA    #REQUIRED
108 >
109 
110 
111 <!-- The priority class is org.apache.log4j.Level by default -->
112 <!ELEMENT priority (param*)>
113 <!ATTLIST priority
114   class   CDATA    #IMPLIED
115   value      CDATA #REQUIRED
116 >
117 
118 <!-- The level class is org.apache.log4j.Level by default -->
119 <!ELEMENT level (param*)>
120 <!ATTLIST level
121   class   CDATA    #IMPLIED
122   value      CDATA #REQUIRED
123 >
124 
125 
126 <!-- If no level element is specified, then the configurator MUST not -->
127 <!-- touch the level of the named category. -->
128 <!ELEMENT category (param*,(priority|level)?,appender-ref*)>
129 <!ATTLIST category
130   class         CDATA   #IMPLIED
131   name        CDATA    #REQUIRED
132   additivity    (true|false) "true"  
133 >
134 
135 <!-- If no level element is specified, then the configurator MUST not -->
136 <!-- touch the level of the named logger. -->
137 <!ELEMENT logger (param*,level?,appender-ref*)>
138 <!ATTLIST logger
139   class         CDATA   #IMPLIED
140   name        CDATA    #REQUIRED
141   additivity    (true|false) "true"  
142 >
143 
144 
145 <!ELEMENT categoryFactory (param*)>
146 <!ATTLIST categoryFactory 
147    class        CDATA #REQUIRED>
148 
149 <!ELEMENT loggerFactory (param*)>
150 <!ATTLIST loggerFactory
151    class        CDATA #REQUIRED>
152 
153 <!ELEMENT appender-ref EMPTY>
154 <!ATTLIST appender-ref
155   ref CDATA #REQUIRED
156 >
157 
158 <!-- plugins must have a name and class and can have optional parameters -->
159 <!ELEMENT plugin (param*, connectionSource?)>
160 <!ATTLIST plugin
161   name         CDATA        #REQUIRED
162   class     CDATA  #REQUIRED
163 >
164 
165 <!ELEMENT connectionSource (dataSource?, param*)>
166 <!ATTLIST connectionSource
167   class        CDATA  #REQUIRED
168 >
169 
170 <!ELEMENT dataSource (param*)>
171 <!ATTLIST dataSource
172   class        CDATA  #REQUIRED
173 >
174 
175 <!ELEMENT triggeringPolicy ((param|filter)*)>
176 <!ATTLIST triggeringPolicy
177   name         CDATA  #IMPLIED
178   class     CDATA  #REQUIRED
179 >
180 
181 <!ELEMENT rollingPolicy (param*)>
182 <!ATTLIST rollingPolicy
183   name         CDATA  #IMPLIED
184   class     CDATA  #REQUIRED
185 >
186 
187 
188 <!-- If no priority element is specified, then the configurator MUST not -->
189 <!-- touch the priority of root. -->
190 <!-- The root category always exists and cannot be subclassed. -->
191 <!ELEMENT root (param*, (priority|level)?, appender-ref*)>
192 
193 
194 <!-- ==================================================================== -->
195 <!--                       A logging event                                -->
196 <!-- ==================================================================== -->
197 <!ELEMENT log4j:eventSet (log4j:event*)>
198 <!ATTLIST log4j:eventSet
199   xmlns:log4j             CDATA #FIXED "http://jakarta.apache.org/log4j/" 
200   version                (1.1|1.2) "1.2" 
201   includesLocationInfo   (true|false) "true"
202 >
203 
204 
205 
206 <!ELEMENT log4j:event (log4j:message, log4j:NDC?, log4j:throwable?, 
207                        log4j:locationInfo?, log4j:properties?) >
208 
209 <!-- The Date format is application dependent. -->
210 <!ATTLIST log4j:event
211     logger     CDATA #REQUIRED
212     level      CDATA #REQUIRED
213     thread     CDATA #REQUIRED
214     Date  CDATA #REQUIRED
215     time       CDATA #IMPLIED
216 >
217 
218 <!ELEMENT log4j:message (#PCDATA)>
219 <!ELEMENT log4j:NDC (#PCDATA)>
220 
221 <!ELEMENT log4j:throwable (#PCDATA)>
222 
223 <!ELEMENT log4j:locationInfo EMPTY>
224 <!ATTLIST log4j:locationInfo
225   class  CDATA    #REQUIRED
226   method CDATA    #REQUIRED
227   file   CDATA    #REQUIRED
228   line   CDATA    #REQUIRED
229 >
230 
231 <!ELEMENT log4j:properties (log4j:data*)>
232 
233 <!ELEMENT log4j:data EMPTY>
234 <!ATTLIST log4j:data
235   name   CDATA    #REQUIRED
236   value  CDATA    #REQUIRED
237 >
View Code

 

第五步 配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>SSH</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <!-- web应用一启动,便加载spring容器 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
    </context-param>
    
 <!-- 动态设置项目的运行路径 -->
    <context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>sshWeb.root</param-value>
    </context-param>
    
     <!-- 加载LOG4J -->
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/log4j.xml</param-value>
    </context-param>

    <context-param>
        <param-name>log4jRefreshInterval</param-name>
        <param-value>60000</param-value>
    </context-param>
    
    <!-- 配置Hibernate过滤器 -->
    <filter>
        <filter-name>hibernateFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
        <init-param>
            <param-name>sessionFactoryBeanName</param-name>
            <param-value>sessionFactory</param-value>
        </init-param>
        <init-param>
            <param-name>singleSession</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>flushMode</param-name>
            <param-value>AUTO</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>hibernateFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    <!-- 字符集过滤 -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- 登录过滤  -->
    <filter>
         <filter-name>loginFilter</filter-name>
         <filter-class>com.cy.ssh.filter.LoginFilter</filter-class>
     </filter>
 
     <filter-mapping>
        <filter-name>loginFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    
    <!-- 加载spring容器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!-- 加载log4j文件 -->
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>
     
</web-app>
View Code

 

第六步 来配置ssh各个的xml文件,

先配置 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" 
 4      xmlns:p="http://www.springframework.org/schema/p" 
 5     xmlns:aop="http://www.springframework.org/schema/aop" 
 6      xmlns:tx="http://www.springframework.org/schema/tx" 
 7      xmlns:mvc="http://www.springframework.org/schema/mvc" 
 8     xmlns:context="http://www.springframework.org/schema/context" 
 9     xsi:schemaLocation="http://www.springframework.org/schema/beans
10                         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
11                         http://www.springframework.org/schema/context
12                         http://www.springframework.org/schema/context/spring-context-3.0.xsd 
13                         http://www.springframework.org/schema/aop
14                         http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
15                         http://www.springframework.org/schema/tx
16                         http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
17                         http://www.springframework.org/schema/mvc
18                         http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 
19 <!-- 开启spring自动扫描功能,适用注解 -->
20     <context:component-scan base-package="com.cy.ssh" />
21     
22     <!-- 配置C3P0数据源 -->
23     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
24         <property name="driverClass" value="com.mysql.jdbc.Driver" />
25         <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
26         <property name="user" value="root" />
27         <property name="password" value="root" />
28         <property name="minPoolSize" value="1" />
29         <property name="maxPoolSize" value="20" />
30         <property name="initialPoolSize" value="1" />
31         <property name="maxIdleTime" value="60" />
32         <property name="acquireIncrement" value="5" />
33         <property name="automaticTestTable" value="c3p0TestTable" />
34         <property name="idleConnectionTestPeriod" value="60" />
35         <property name="checkoutTimeout" value="3000" />
36     </bean>
37     
38     <!-- 配置SessionFactory -->    
39     <bean id="sessionFactory"
40         class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
41         <!-- 向SessionFactory中注入数据源 -->
42         <property name="dataSource" ref="dataSource" />
43         <property name="hibernateProperties">
44             <props>
45                 <!-- 定义Hibernate的方言 -->
46                 <prop key="hibernate.dialect">
47                     org.hibernate.dialect.MySQLDialect
48                 </prop>
49                 <!-- 是否根据需要每次自动更新数据库
50                 <prop key="hibernate.hbm2ddl.auto">update</prop> -->
51                 <!-- 控制台显示SQL -->
52                 <prop key="hibernate.show_sql">true</prop>
53                 <prop key="hibernate.format_sql">true</prop>
54                 <!-- 使用SQL注释 -->
55                 <prop key="hibernate.use_sql_comments">true</prop>
56             </props>
57         </property>
58         
59         <!-- 浏览bean包下的所有使用Hibernate注解的JavaBean -->
60         <property name="packagesToScan">
61             <list>
62                 <value>com.cy.ssh.beans</value>
63             </list>
64         </property>
65     </bean>    
66     
67     <!-- spring通过声明式方式来进行事务管理-->
68     <bean id="transactionManager"
69         class="org.springframework.orm.hibernate4.HibernateTransactionManager">
70         <property name="sessionFactory" ref="sessionFactory"/>
71     </bean>
72     
73     
74     <!-- 定义个通知,指定事务管理器 -->
75     <tx:advice id="txAdvice" transaction-manager="transactionManager">
76         <tx:attributes>
77             <tx:method name="delete*" propagation="REQUIRED" read-only="false"
78                 rollback-for="java.lang.Exception" />
79             <tx:method name="save*" propagation="REQUIRED" read-only="false"
80                 rollback-for="java.lang.Exception" />
81             <tx:method name="update*" propagation="REQUIRED" read-only="false"
82                 rollback-for="java.lang.Exception" />
83             <tx:method name="load*" propagation="SUPPORTS" read-only="true"/>
84             <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
85             <tx:method name="select*" propagation="SUPPORTS" read-only="true"/>
86             <tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
87         </tx:attributes>
88     </tx:advice>
89     
90     <aop:config>
91         <!-- 配置一个切入点 -->
92         <aop:pointcut id="serviceMethods"
93             expression="execution(* com.cy.ssh.service.impl.*ServiceImpl.*(..))" />
94         <aop:advisor advice-ref="txAdvice"
95             pointcut-ref="serviceMethods" />
96     </aop:config>    
97 
98 </beans>
View Code

 

 配置都差不多了。

来写个登录案例

User.java   使用Hibernate注解  

 1 package com.cy.ssh.beans;
 2 
 3 import java.io.Serializable;
 4 import javax.persistence.Column;
 5 import javax.persistence.Entity;
 6 import javax.persistence.GeneratedValue;
 7 import javax.persistence.Id;
 8 import javax.persistence.Table;
 9 
10 import org.hibernate.annotations.GenericGenerator;
11 /**
12  * 用户
13  * @author acer
14  *
15  */
16 @Entity
17 @Table(name="t_user")
18 public class User implements Serializable {
19 
20     private static final long serialVersionUID = 1L;
21     @Id
22     @Column(name="id")
23     @GenericGenerator(name="hbincrement", strategy="increment")
24     @GeneratedValue(generator="hbincrement")
25     private int id;
26     @Column(name="username",length=20)
27     private String username;
28     @Column(name="password",length=32)
29     private String password;
30     @Column(name="age")
31     private int age;
32     @Column(name="flag")
33     private int flag;
34     
35     public User(){
36       
37     }
38 
39     public int getId() {
40         return id;
41     }
42 
43     public void setId(int id) {
44         this.id = id;
45     }
46 
47     public String getUsername() {
48         return username;
49     }
50 
51     public void setUsername(String username) {
52         this.username = username;
53     }
54 
55     public String getPassword() {
56         return password;
57     }
58 
59     public void setPassword(String password) {
60         this.password = password;
61     }
62 
63     public int getAge() {
64         return age;
65     }
66 
67     public void setAge(int age) {
68         this.age = age;
69     }
70 
71     public int getFlag() {
72         return flag;
73     }
74 
75     public void setFlag(int flag) {
76         this.flag = flag;
77     }
78 
79     @Override
80     public String toString() {
81         return "User [id=" + id + ", username=" + username + ", password="
82                 + password + ", age=" + age + ", flag=" + flag + "]";
83     }
84   
85     
86 
87 }
View Code

 

 

工具类:

HibernateTools.java

 1 package com.cy.ssh.tools;
 2 
 3 import org.hibernate.Session;
 4 import org.hibernate.SessionFactory;
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.beans.factory.annotation.Qualifier;
 7 import org.springframework.stereotype.Component;
 8 /**
 9  * 
10  * @author acer
11  *
12  */
13 @Component
14 public class HibernateTools {
15     
16     @Autowired
17     @Qualifier("sessionFactory")
18     private SessionFactory sessionFactory;
19     public void setSessionFactory(SessionFactory sessionFactory) {
20         this.sessionFactory = sessionFactory;
21     }
22     
23     public Session getSession(){
24         return sessionFactory.getCurrentSession();
25     }
26     
27     public Session getNewSession(){
28         return sessionFactory.openSession();
29     }
30     
31 }
View Code

 

StringTools.java

 1 package com.cy.ssh.tools;
 2 /**
 3  * 判断是否为空
 4  * @author acer
 5  *
 6  */
 7 public class StringTools {
 8 
 9     public static boolean isNull(String str){
10         if(str == null || "".equals(str)){
11             return true;
12         }
13         return false;
14     }
15 }
View Code

 

 

持久层

IUserDao.java

 1 package com.cy.ssh.dao;
 2 
 3 import java.util.List;
 4 
 5 import com.cy.ssh.beans.User;
 6 
 7 public interface IUserDao {
 8     /**
 9      * 查询用户
10      * @param hql
11      * @return
12      */
13     public List<?> find(String hql);
14     /**
15      * 新增user
16      * @param u
17      */
18     public void saveUser(User u);
19     
20     /**
21      * 修改user
22      * @param u
23      */
24     public void updateUser(User u);
25     
26     /**
27      * 删除user
28      * @param u
29      */
30     public void updateDeleteUser(User u);
31 
32 }
View Code

 

UserServiceImpl.java

 1 package com.cy.ssh.dao.impl;
 2 
 3 import java.util.List;
 4 
 5 
 6 
 7 
 8 import org.hibernate.Query;
 9 import org.springframework.stereotype.Repository;
10 
11 import com.cy.ssh.beans.User;
12 import com.cy.ssh.dao.IUserDao;
13 import com.cy.ssh.tools.HibernateTools;
14 @Repository
15 public class UserDaoImpl extends HibernateTools implements IUserDao{
16 
17     @Override
18     public List<?> find(String hql) {
19         Query query= getSession().createQuery(hql);
20         return query.list();
21     }
22 
23     @Override
24     public void saveUser(User u) {
25         getSession().save(u);
26         
27     }
28 
29     @Override
30     public void updateUser(User u) {
31         getSession().update(u);
32         
33     }
34 
35     @Override
36     public void updateDeleteUser(User u) {
37         getSession().update(u);
38         
39     }
40 
41 }
View Code

 

 

业务层

IUserService.java

 1 package com.cy.ssh.service;
 2 
 3 import com.cy.ssh.beans.User;
 4 
 5 public interface IUserService {
 6     /**
 7      * 
 8      * @param user
 9      * @return
10      */
11     public User getUser(User user);
12     /**
13      * 新增user
14      * @param u
15      */
16     public void saveUser(User u);
17     
18     /**
19      * 修改user
20      * @param u
21      */
22     public void updateUser(User u);
23     
24     /**
25      * 删除user
26      * @param id
27      */
28     public void updateDeleteUser(int id);
29 }
View Code

 

IUserServiceImpl.java

 1 package com.cy.ssh.service.impl;
 2 
 3 import java.util.List;
 4 
 5 import javax.annotation.Resource;
 6 
 7 import org.springframework.stereotype.Service;
 8 
 9 import com.cy.ssh.beans.User;
10 import com.cy.ssh.dao.IUserDao;
11 import com.cy.ssh.service.IUserService;
12 @Service
13 public class UserServiceImpl implements IUserService{
14     @Resource
15     private IUserDao userDaoImpl;
16     
17     @Override
18     public User getUser(User user) {
19         
20         User ret = null;
21         String hql = "from User as u where (1=1) and u.username = '"+user.getUsername()+"' and u.flag = 1";
22         List<?> list = userDaoImpl.find(hql);
23         if(list != null && !list.isEmpty()){
24             ret = (User) list.get(0);
25         }
26         return ret;    
27         }
28 
29     @Override
30     public void saveUser(User u) {
31     
32         userDaoImpl.saveUser(u);
33     }
34 
35     @Override
36     public void updateUser(User u) {
37          userDaoImpl.updateUser(u);
38     }
39 
40     @Override
41     public void updateDeleteUser(int id) {
42 
43     }
44 
45 }
View Code

 

 

LoginAction.java

 1 package com.cy.ssh.action;
 2 
 3 import javax.annotation.Resource;
 4 
 5 import org.apache.struts2.ServletActionContext;
 6 import org.springframework.context.annotation.Scope;
 7 import org.springframework.stereotype.Controller;
 8 
 9 import com.cy.ssh.beans.User;
10 import com.cy.ssh.service.IUserService;
11 import com.cy.ssh.tools.StringTools;
12 import com.opensymphony.xwork2.ActionSupport;
13 @Controller
14 @Scope("prototype")
15 public class LoginAction extends ActionSupport {
16 
17     
18     private static final long serialVersionUID = 1L;
19     private User user;
20     @Resource
21     private IUserService userServiceImpl;
22     
23     
24     @Override
25     public void validate() {
26         if(StringTools.isNull(user.getUsername())){
27             this.addFieldError("dataErr", "用户名不能为空");
28         }
29         if(StringTools.isNull(user.getPassword())){
30             this.addFieldError("dataErr", "密码不能为空");
31         }
32         
33     }
34     @Override
35     public String execute() throws Exception {
36         User u=userServiceImpl.getUser(user);
37         if(u!=null){
38             ServletActionContext.getRequest().getSession().setAttribute("user", user);
39             return SUCCESS;
40         }else{
41             return ERROR;
42         }
43     }
44 
45     public User getUser() {
46         return user;
47     }
48     public void setUser(User user) {
49         this.user = user;
50     }
51     
52     
53 
54 }
View Code

 

 

login.jsp

 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 <%@ taglib uri="/struts-tags" prefix="s" %> 
 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 8 <html>
 9   <head>
10     <base href="<%=basePath%>">
11     
12     <title>My JSP 'login.jsp' starting page</title>
13     
14     <meta http-equiv="pragma" content="no-cache">
15     <meta http-equiv="cache-control" content="no-cache">
16     <meta http-equiv="expires" content="0">    
17     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
18     <meta http-equiv="description" content="This is my page">
19     <!--
20     <link rel="stylesheet" type="text/css" href="styles.css">
21     -->
22 
23   </head>
24   
25   <body>
26   <s:fielderror></s:fielderror>
27     <form action="<%=basePath%>login.do" method="post">
28       <table>
29         <tr>
30           <td>用户名:</td>
31           <td><input type="text" name="user.username"/></td>
32         </tr>
33          <tr>
34            <td>密码:</td>
35            <td><input type="password" name="user.password"/></td>
36         </tr>
37         <tr>
38            <td colspan="2"><input type="submit" value="登录"/></td>
39         </tr>
40       </table>
41     
42     </form>
43   </body>
44 </html>
View Code

 

 

配置struts.xml

 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 <struts>
 6          <!-- 告诉struts框架,我们的Action类的实例化来源于Spring容器 -->
 7              <constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" />
 8          <!-- 指定需要Struts 2处理的请求后缀 -->
 9              <constant name="struts.action.extension" value="action,do" />
10   
11        <package name="default" namespace="/" extends="struts-default">
12        
13       
14         <action name="login" class="loginAction">
15            
16             <result name="success">/success.jsp</result>
17             <result name="input">/login.jsp</result>
18         </action>
19         
20         
21         
22         
23     </package>
24     
25 
26 </struts>
View Code

 

 差不多就完成了! 

 

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
Java 关系型数据库 MySQL
JSP SSH公车拍卖系统myeclipse开发mysql数据库bs框架java编程网结构
JSP SSH公车拍卖系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发,系统主要采用B/S模式开发。
73 0
|
24天前
|
Java 数据库连接 数据库
让星星⭐月亮告诉你,SSH框架01、Spring概述
Spring是一个轻量级的Java开发框架,旨在简化企业级应用开发。它通过IoC(控制反转)和DI(依赖注入)降低组件间的耦合度,支持AOP(面向切面编程),简化事务管理和数据库操作,并能与多种第三方框架无缝集成,提供灵活的Web层支持,是开发高性能应用的理想选择。
32 1
|
5月前
|
网络安全 数据安全/隐私保护
分布式系统详解--框架(Hadoop-Ssh免密登陆配置)
分布式系统详解--框架(Hadoop-Ssh免密登陆配置)
54 0
|
6月前
|
Java 数据库连接 网络安全
SSH 组合框架模式小知识分享
【5月更文挑战第4天】SSH 组合框架模式小知识分享
42 0
|
6月前
|
前端开发 Java 网络安全
基于SSH框架甜品商城管理系统【源码+数据库】
基于SSH框架甜品商城管理系统【源码+数据库】
|
前端开发 Java 关系型数据库
JSP仓库进销存系统ssh框架mysql数据库myeclipse开发mvc结构java
JSP 仓库进销存系统(struts2+hibernate) 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。
54 0
|
Java 网络安全 Spring
SSH框架学习中遇到的问题
SSH框架学习中遇到的问题
51 0
|
Java 应用服务中间件 网络安全
【ssh系列一】——框架搭建
建立项目(SpringMVC+Spring+hibernate的maven项目)
|
设计模式 开发框架 缓存
SSH框架简介篇
SSH框架简介篇
402 0
|
SQL 缓存 Java
《SSH框架》---Hibernate
《SSH框架》---Hibernate
101 0