zoukankan      html  css  js  c++  java
  • (转载)Struts Spring Hibernate (SSH) 整合实例

    首选创建web.xml 主要是配置Struts的ActionServlet和Spring的字符过滤器

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
      
    <filter>
        <filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
      
    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
          <param-name>config</param-name>
          <param-value>/WEB-INF/struts/struts.xml</param-value>
        </init-param>
        <init-param>
          <param-name>debug</param-name>
          <param-value>3</param-value>
        </init-param>
        <init-param>
          <param-name>detail</param-name>
          <param-value>3</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
    </servlet>
      
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
      
    <!-- session超时定义,单位为分钟 -->
    <session-config>
        <session-timeout>10</session-timeout>
    </session-config>
      
    <!-- 默认首页定义 -->
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
      
    </web-app>

    然后创建struts.xml(String配置文件) 要注意这里集成了Spring插件,把全部Spring配置文件注入到ContextLoaderPlugIn中

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
    <struts-config>

    <form-beans>
    <form-bean name="loginVO" type="com.vo.LoginVO" />
    </form-beans>

    <global-forwards>
    <forward name="error" path="/error.jsp"/>
    </global-forwards>

    <action-mappings>
    <action path="/login"
        name="loginVO"
           type="org.springframework.web.struts.DelegatingActionProxy"
           parameter="action"
           scope="request">
           <forward name="login" path="/login.jsp"/>
           <forward name="index" path="/index.jsp"/>
       </action>
    </action-mappings>

    <!-- 集成Spring插件 -->
    <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
        <set-property property="contextConfigLocation" value="/WEB-INF/spring/*.xml" />
    </plug-in>

    </struts-config>


    配置Spring配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>
    <!-- 读入属性文件 -->
    <bean id="propertyConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
       <property name="locations">
        <list>
         <value>classpath:hibernate.properties</value>
        </list>
       </property>
    </bean>

    <!-- 配置数据源,可以其他方式 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
         <property name="driverClassName" value="${hibernate.driverClassName}" />
       <property name="url" value="${hibernate.url}" />
       <property name="username" value="${hibernate.username}" />
       <property name="password" value="${hibernate.password}" />
         <property name="maxActive" value="${hibernate.maxActive}" />
       <property name="maxIdle" value="${hibernate.maxIdle}" />
       <property name="maxWait" value="${hibernate.maxWait}" />
        </bean>

    <!-- 配置Hibernate的Session工厂,注入数据源、映射文件 -->
        <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource">
             <ref local="dataSource"/>
        </property>
            <property name="mappingResources">
                <list>
                    <value>com/po/login.hbm.xml</value>
                </list>
            </property>
            <property name="hibernateProperties">
           <props>
             <prop key="hibernate.dialect">${hibernate.dialect}</prop>
             <prop key="hibernate.show_sql">${hibernate.showSQL}</prop>
           </props>
        </property>
        </bean>

    <!-- 声明Hibernate事务管理,注入Session工厂 -->
        <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
         <property name="sessionFactory">
           <ref local="sessionFactory"/>
         </property>
    </bean>

    <!-- 配置事务代理,注入事务管理transactionManager,由Spring来代理事务,设置事务属性 -->
        <bean id="transactionProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
         <property name="transactionManager">
           <ref bean="transactionManager"/>
         </property>
         <property name="transactionAttributes">
           <props>
               <prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>
                   <prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>
                   <prop key="remove*">PROPAGATION_REQUIRED,-Exception</prop>
                   <prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop>
                   <prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>
                   <prop key="create*">PROPAGATION_REQUIRED,-Exception</prop>
                   <prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
                   <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
                   <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
                   <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
                   <prop key="*">PROPAGATION_REQUIRED</prop>
           </props>
         </property>
        </bean>
    </beans>


    配置Action将Service注入到Action

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>
    <!-- 配置Action,singleton属性设置为false表示不使用单例,每次都重新创建实例,避免并发问题,注入事务管理的Service -->
       <bean name="/login" class="com.action.LoginAction" singleton="false">
        <property name="loginService">
            <ref bean="loginService"/>
            </property>
       </bean>
    </beans>

    配置Service将Dao注入到Service

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>
    <!-- 配置事务代理Service,先将Dao注入到Service,再将Service注入给事务代理 -->
        <bean id="loginService" parent="transactionProxy">
         <property name="target">
         <ref bean="loginTempService"/>
         </property>
    </bean>
    <bean id="loginTempService" class="com.service.LoginService">
            <property name="loginDao">
            <ref bean="loginDao"/>
            </property>
        </bean>
    </beans>

    配置Dao 注入Session工厂

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>
    <!-- 配置Dao,注入Session工厂 -->
        <bean id="loginDao" class="com.dao.LoginDao">
            <property name="sessionFactory">
            <ref bean="sessionFactory"/>
            </property>
        </bean>
    </beans>

    数据源属性文件(注意不是Hibernate的配置文件,是为了让Spring读入的)

    hibernate.dialect=org.hibernate.dialect.SQLServerDialect
    hibernate.driverClassName=com.mysql.jdbc.Driver
    hibernate.url=jdbc:mysql://127.0.0.1:3306/ssh
    hibernate.username=root
    hibernate.password=5719
    hibernate.showSQL=true
    hibernate.maxActive=50
    hibernate.maxIdle=30
    hibernate.maxWait=1000

    log4j配置文件(简单)

    log4j.rootLogger=ERROR,console,file

    log4j.appender.console=org.apache.log4j.ConsoleAppender
    log4j.appender.console.layout=org.apache.log4j.PatternLayout
    log4j.appender.console.layout.ConversionPattern=%-5p %d [%F,%L] - %m%n

    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.File=F:\\SSH.log
    #log4j.appender.file.MaxFileSize=100000KB
    #log4j.appender.file.MaxBackupIndex=1
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%-5p %d [%F,%L] - %m%n

    下面是类文件

    package com.action;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.actions.DispatchAction;

    import com.service.LoginService;
    import com.vo.LoginVO;

    public class LoginAction extends DispatchAction {

    private Log logger = LogFactory.getLog(LoginAction.class);
    private LoginService loginService;

    public void setLoginService(LoginService loginService) {
       this.loginService = loginService;
    }

    public ActionForward login(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) {
       try {
        LoginVO loginVO = (LoginVO) form;
        String username = loginVO.getUsername();
        String password = loginVO.getPassword();
        System.out.println(username+password);
        if(loginService.validate(username, password)) {
         return mapping.findForward("index");
        }
        return mapping.findForward("error");
       } catch (Exception e) {
        logger.error(e);
        return mapping.findForward("error");
       }
    }

    public ActionForward save(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) {
       try {
        LoginVO loginVO = (LoginVO) form;
        loginService.saveUser(loginVO);
        return mapping.findForward("index");
       } catch (Exception e) {
        logger.error(e);
        return mapping.findForward("error");
       }
    }
    }



    package com.dao;

    import java.util.List;

    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

    import com.po.LoginPO;

    public class LoginDao extends HibernateDaoSupport {

    @SuppressWarnings("unchecked")
    public String getPassword(String username) {
       String hql = "from LoginPO l where l.username=?";
       List list = getSession().createQuery(hql).setString(0,username).list();
       if(list!=null && list.size()>0) {
        LoginPO loginPO = (LoginPO) list.get(0);
        return loginPO.getPassword();
       }
       return null;
    }

    public void save(LoginPO loginPO) {
       getSession().save(loginPO);
    }
    }



    package com.po;

    import java.io.Serializable;

    public class LoginPO implements Serializable {

    private static final long serialVersionUID = 1L;

    private Integer id = null;
    private String username = null;
    private String password = null;

    public Integer getId() {
       return id;
    }
    public String getPassword() {
       return password;
    }
    public String getUsername() {
       return username;
    }
    public void setId(Integer id) {
       this.id = id;
    }
    public void setPassword(String password) {
       this.password = password;
    }
    public void setUsername(String username) {
       this.username = username;
    }
    }



    package com.service;

    import com.dao.LoginDao;
    import com.po.LoginPO;
    import com.vo.LoginVO;

    public class LoginService {

    private LoginDao loginDao;

    public void setLoginDao(LoginDao loginDao) {
       this.loginDao = loginDao;
    }

    public boolean validate(String username,String password) {
       String pass = loginDao.getPassword(username);
       if(pass!=null) {
        if(pass.equals(password)) {
         return true;
        }
       }
       return false;
    }

    public void saveUser(LoginVO loginVO) {
       LoginPO loginPO = new LoginPO();
       loginPO.setUsername(loginVO.getUsername());
       loginPO.setPassword(loginVO.getPassword());
       System.out.println(loginVO.getUsername()+"-"+loginVO.getPassword()+":save succeed...");
       loginDao.save(loginPO);
       //故意制造异常,测试事务。
       //loginDao.save(null);
    }
    }



    package com.vo;

    import org.apache.struts.action.ActionForm;

    public class LoginVO extends ActionForm {

    private static final long serialVersionUID = 1L;

    private String username = null;

    private String password = null;

    public String getPassword() {
       return password;
    }
    public String getUsername() {
       return username;
    }
    public void setPassword(String password) {
       this.password = password;
    }
    public void setUsername(String username) {
       this.username = username;
    }
    }

    Hibernate映射文件

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

    <hibernate-mapping>
        <class name="com.po.LoginPO" table="login">
            <comment></comment>
            
            <id name="id" type="int">
        <column name="id" />
        <generator class="native" />
       </id>
            
            <property name="username" type="string">
                <column name="username" not-null="true">
                    <comment></comment>
                </column>
            </property>
            
            <property name="password" type="string">
                <column name="password" not-null="true">
                    <comment></comment>
                </column>
            </property>
        </class>
    </hibernate-mapping>

    jsp页面文件

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <body>
       <form name="form" action="login.do?action=login" method="post">
        <h1>Login</h1>
        <h4>username:</h4><input name="username" type="text">&nbsp;&nbsp;&nbsp;<span id="message"></span>
        <h4>password:</h4><input name="password" type="password">
        <br>
        <br>
        <input value="提交" type="button" onclick="form.submit();">
       </form>
       <br>
       <br>
       <br>
       <form name="form" action="login.do?action=save" method="post">
        <h1>Save</h1>
        <h4>username:</h4><input name="username" type="text">&nbsp;&nbsp;&nbsp;<span id="message"></span>
        <h4>password:</h4><input name="password" type="password">
        <br>
        <br>
        <input value="提交" type="button" onclick="form.submit();">
       </form>
    </body>
    </html>

  • 相关阅读:
    es5预览本地文件、es6练习代码演示案例
    Java实现 LeetCode 838 推多米诺(暴力模拟)
    Java实现 LeetCode 838 推多米诺(暴力模拟)
    Java实现 LeetCode 838 推多米诺(暴力模拟)
    Java实现 LeetCode 837 新21点(DP)
    Java实现 LeetCode 837 新21点(DP)
    Java实现 LeetCode 837 新21点(DP)
    Java实现 LeetCode 836 矩形重叠(暴力)
    Subversion under Linux [Reprint]
    Subversion how[Reprint]
  • 原文地址:https://www.cnblogs.com/xinzhuangzi/p/4100496.html
Copyright © 2011-2022 走看看