SSH框架搭建过程

来源:互联网 发布:数据堂众包 编辑:程序博客网 时间:2024/06/06 02:36

一.搭建原理

运用Struts2.0+Hibernate3.1+Spring3.0+MySql方式搭建。

 

二.搭建环境准备

2.1.  建立新项目

右击创建新项目,如:erp,在com下先创建common,database,service,web包,分别用于存放通用类,数据库实体类,服务类和控制跳转类;

2.2.  引入项目包

 将以上程序包添加到WebRoot-WEB-INF-lib里面,作为程序的基础包;(附件内容比较大,建议下载SSH框架包)

2.3.  MySql数据库创建项目数据库

         创建数据库erp,并在数据库里面创建表principal(用户信息表),用户登录认证;建表语句如下:

CREATE TABLE`principal` (

  `ID` varchar(32) primary key,

  `NAME` varchar(100) default NULL,

  `ACCOUNT` varchar(32) default NULL,

  `PASSWORD` varchar(32) default NULL,

  `COMPANY_CODE` varchar(32) default NULL,

  `COMPANY_NAME` varchar(32) default NULL,

  `DEP_CODE` varchar(32) default NULL,

  `DEP_NAME` varchar(32) default NULL,

  `EMAIL` varchar(32) default NULL,

  `TELEPHONE` varchar(32) default NULL,

  `STATE` varchar(32) default NULL,

  `LOGIN_TYPE` varchar(255) default NULL

) ENGINE=InnoDBDEFAULT CHARSET=utf8;

         创建一条基础记录

INSERT INTO `principal`VALUES ('admin', '系统管理员', 'admin', 'E10ADC3949BA59ABBE56E057F20F883E', null, null, null,null, null, null, null, '1');

 

2.4.  修改项目web.xml配置

首选引入Web容器配置,这里需要引入包commons-logging-1.1.1.jar

<!-- 引入监听器 -->

    <!-- 启动Web容器时,自动装配ApplicationContext的配置信息 -->

    <listener>

       <listener-class>

           org.springframework.web.context.ContextLoaderListener

       </listener-class>

    </listener>

         然后引入ApplicationContext.xml配置                       

         <!-- ApplicationContext文件路径 -->

    <context-param>

       <param-name>contextConfigLocation</param-name>

       <param-value>

           classpath:/conf/applicationContext.xml

       </param-value>

    </context-param>

         然后引入Struts配置

         <!-- 引入Struts-->

    <filter>

       <filter-name>struts2</filter-name>

       <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

    </filter>

    <filter-mapping>

       <filter-name>struts2</filter-name>

       <url-pattern>/*</url-pattern>

    </filter-mapping>

         再定义数据源

<!-- 定义数据源 -->

    <resource-ref>

       <description>DB Connection</description>

       <res-ref-name>jdbc/erpDS</res-ref-name>

       <res-type>javax.sql.DataSource</res-type>

       <res-auth>Container</res-auth>

       <res-sharing-scope>Unshareable</res-sharing-scope>

    </resource-ref>

         定义首页(欢迎页)

         <welcome-file-list>

       <welcome-file>manager/login.jsp</welcome-file>

    </welcome-file-list>

 

2.5.  applicationContext.xml配置

在web.xml配置文件看出,该配置文件应该建立在classpath:/conf/applicationContext.xml上。因此创建项目包conf。由于是需要AOP业务的,同时需要引进aopalliance.jar,bean解释过程中,需要引入dom4j-1.6.1.jar,slf4j-api-1.5.0.jar,slf4j-jcl-1.5.0.jar,commons-collections-3.2.1.jar。

         首先,文件前缀不变,如下:

<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 xmlns:aop="http://www.springframework.org/schema/aop"

 xmlns:context="http://www.springframework.org/schema/context"

 xmlns:p="http://www.springframework.org/schema/p"

 xmlns:tx="http://www.springframework.org/schema/tx"

 xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring"

 xsi:schemaLocation="http://www.springframework.org/schema/beans

 http://www.springframework.org/schema/beans/spring-beans.xsd

  http://www.springframework.org/schema/aop

 http://www.springframework.org/schema/aop/spring-aop-3.0.xsd

  http://www.springframework.org/schema/context

 http://www.springframework.org/schema/context/spring-context-3.0.xsd

  http://www.springframework.org/schema/tx

 http://www.springframework.org/schema/tx/spring-tx-3.0.xsd

 http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring  

 http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd">

         启动Spring扫描机制

<!-- Spring扫描机制 -->

    <context:component-scanbase-package="com"/>

使用DBCP连接方式引用数据源

<!-- 使用DBCP连接方式引用数据源 -->

    <beanid="dataSource"class="org.springframework.jndi.JndiObjectFactoryBean">

       <propertyname="jndiName">

           <value>java:comp/env/jdbc/erpDS</value>

       </property>

    </bean>

开启Hibernate工厂,引入Hibernate文件,指定为MySql数据源,并指向hbm配置文件路径

         <!-- 开启HIBERNATE工厂 -->

    <beanid="sessionFactory"

       class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

       <!-- 引用数据源 -->

       <propertyname="dataSource"ref="dataSource"/>

 

       <propertyname="hibernateProperties">

           <props>

              <!-- SQL方言 -->

              <propkey="hibernate.dialect">

                  org.hibernate.dialect.MySQLInnoDBDialect

              </prop>

              <!-- SQL打印输出 -->

              <propkey="hibernate.show_sql">true</prop>

              <!-- 缓存设置 -->

              <propkey="hibernate.cache.provider_class">

                  org.hibernate.cache.EhCacheProvider

              </prop>

              <!-- 开启二级缓存 -->

              <propkey="hibernate.cache.use_query_cache">true</prop>

           </props>

       </property>

       <!-- 通配符指定项目文件 -->

       <propertyname="mappingLocations"

           value="classpath*:com/**/*.hbm.xml"/>

    </bean>

         开启事务配置,并指向Service后缀的为事务控制点。这里涉及到事务管理,要引入jta-1.1.jar包,做事务控制

         <!--事务配置 -->

    <beanid="txManager"

       class="org.springframework.orm.hibernate3.HibernateTransactionManager">

       <propertyname="sessionFactory">

           <refbean="sessionFactory"/>

       </property>

    </bean>

    <beanid="transactionInterceptor"

       class="org.springframework.transaction.interceptor.TransactionInterceptor">

       <propertyname="transactionManager"ref="txManager"/>

       <propertyname="transactionAttributes">

           <props>

              <propkey="*">PROPAGATION_REQUIRED,-Exception</prop>

           </props>

       </property>

    </bean>

    <bean

       class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">

       <propertyname="beanNames">

           <list>

              <value>*Service</value>

           </list>

       </property>

       <propertyname="interceptorNames">

           <list>

              <value>transactionInterceptor</value>

           </list>

       </property>

    </bean>

    <tx:annotation-driventransaction-manager="txManager"/>

 

2.6.  struts.xml配置

创建struts.xml到项目的包根目录

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEstruts PUBLIC

    "-//Apache Software Foundation//DTD StrutsConfiguration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <packagename="sysmgr"namespace="/sysmgr"extends="struts-default">

       <!-- 登录Action -->

       <actionname="login"class="com.erp.web.sysmgr.LoginAction">

           <result>

              /WEB-INF/jsp/HelloWorld.jsp

           </result>

       </action>

    </package>

</struts>

 

2.7.  系统lib配置

重新引包,刷新项目文件

 

2.8.  tomcat配置

进入conf/server.xml,配置一个Service

<Servicename="service2">

         <Connector port="8383" protocol="HTTP/1.1"connectionTimeout="20000"                redirectPort="8444"URIEncoding="GBK"  />

    <Connector port="9999"protocol="AJP/1.3" redirectPort="8444"/>

    <Engine name="erp"defaultHost="localhost">

                   <RealmclassName="org.apache.catalina.realm.UserDatabaseRealm"                resourceName="UserDatabase"/>

                   <Hostname="localhost" appBase="webapps"unpackWARs="true"                       autoDeploy="true"xmlValidation="false"                                                                 xmlNamespaceAware="false">

                            <ContextdocBase="D:\ehome\erp\WebRoot" path="/erp">

                                     <Resourcename="jdbc/erpDS"

                                                                 type="javax.sql.DataSource"

                                                                 driverClassName="com.mysql.jdbc.Driver"

                                                                 maxActive="150"

                                                                 maxIdle="20"

                                                                 maxWait="10000"

                                                                 username="root"

                                                                 password="123456"

                                                                 url="jdbc:mysql://localhost:3306/erp"

                                     />

                            </Context>

                   </Host>

         </Engine>

  </Service>

 

  进行启动测试,没有问题,证明框架初步成型

 

三.验证搭建环境

3.1.  新增用户登录页面

在项目manager/login.jsp上面,添加如下内容

<%@ page language="java"import="java.util.*"pageEncoding="utf-8"%>

<%

String path =request.getContextPath();

String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

 

<!DOCTYPEHTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">

<html>

  <head>

    <basehref="<%=basePath%>">

   

    <title></title>

 

  </head>

 

  <body>

    <formaction="<%=basePath%>sysmgr/login.action"method="post">

    用户名:

    <inputtype="text"name="username">

    <inputtype="submit"value="登录">

    </form>

  </body>

</html>

 

3.2.  新增用户登录Action

在项目web层下创建sysmgr/LoginAction.java。

在项目中,使用AOP注入方式,继承ActionSupport,如下:

package com.erp.web.sysmgr;

 

import org.springframework.context.annotation.Scope;

import org.springframework.stereotype.Controller;

 

import com.opensymphony.xwork2.ActionSupport;

 

/**

 * 用户登录方法测试

 *

 * @author ChenJianHui

 *

 */

@Scope("prototype")

@Controller("loginAction")

@SuppressWarnings("serial")

public class LoginAction extends ActionSupport{

 

    private Stringusername;

 

    public String execute() {

 

       System.out.println(username);

       return null;

    }

 

    public String getUsername() {

       returnusername;

    }

 

    public void setUsername(String username) {

       this.username = username;

    }

 

}

 

3.3.  新增底层数据持久化Dao

在项目database层上面创建dao/CommonDao.java。

packagecom.erp.database.dao;

 

importorg.hibernate.Query;

import org.hibernate.Session;

importorg.hibernate.SessionFactory;

importorg.springframework.beans.factory.annotation.Autowired;

importorg.springframework.orm.hibernate3.support.HibernateDaoSupport;

importorg.springframework.stereotype.Repository;

 

/**

 * 通用数据访问对象

 *

 * @author ChenJianHui

 *

 */

@Repository()

public classCommonDao extends HibernateDaoSupport {

 

         /**

          * 设置工厂类

          *

          * @param sessionFactory

          */

    @Autowired

    public voidsetSession$Factory(SessionFactory sessionFactory) {

        super.setSessionFactory(sessionFactory);

    }

 

    /**

     * 取当前管理的数据访问会话.

     *

     * @return HIBERNATE会话对象

     */

    public Session currentSession() {

        return this.getSession();

    }

 

    /**

     * 根据SQL创建查询对象

     *

     * @param queryString

     * @return

     */

    public Query createQuery(StringqueryString) {

        returnthis.currentSession().createQuery(queryString);

    }

 

}

 

3.4.  新增用户信息实体

在项目database层上面创建entity/sysmgr/Principal.java。

package com.erp.database.entity.sysmgr;

 

import java.io.Serializable;

 

/**

 * 登录用户信息表

 *

 * @author ChenJianHui

 *

 */

@SuppressWarnings("serial")

public class Principal implements Serializable {

 

    // Fields

 

    private Stringid;          // 用户ID

    private Stringname;     // 用户名称

    private Stringaccount; // 用户账号

    private Stringpassword;    // 密码

    private StringcompanyCode; // 公司编码

    private StringcompanyName; // 公司名称

    private StringdepCode; // 部门编码

    private StringdepName; // 所属部门

    private Stringemail;       // 邮件

    private Stringtelephone;   // 联系电话

    private Stringstate;       // 用户状态

    private StringloginType;   // 用户类型

 

    public String getId() {

       returnid;

    }

 

    public void setId(String id) {

       this.id = id;

    }

 

    public String getName() {

       returnname;

    }

 

    public void setName(String name) {

       this.name = name;

    }

 

    public String getAccount() {

       returnaccount;

    }

 

    public void setAccount(String account) {

       this.account = account;

    }

 

    public String getPassword() {

       returnpassword;

    }

 

    public void setPassword(String password) {

       this.password = password;

    }

 

    public String getCompanyCode() {

       returncompanyCode;

    }

 

    public void setCompanyCode(String companyCode) {

       this.companyCode = companyCode;

    }

 

    public String getCompanyName() {

       returncompanyName;

    }

 

    public void setCompanyName(String companyName) {

       this.companyName = companyName;

    }

 

    public String getDepCode() {

       returndepCode;

    }

 

    public void setDepCode(String depCode) {

       this.depCode = depCode;

    }

 

    public String getDepName() {

       returndepName;

    }

 

    public void setDepName(String depName) {

       this.depName = depName;

    }

 

    public String getEmail() {

       returnemail;

    }

 

    public void setEmail(String email) {

       this.email = email;

    }

 

    public String getTelephone() {

       returntelephone;

    }

 

    public void setTelephone(String telephone) {

       this.telephone = telephone;

    }

 

    public String getState() {

       returnstate;

    }

 

    public void setState(String state) {

       this.state = state;

    }

 

    public String getLoginType() {

       returnloginType;

    }

 

    public void setLoginType(String loginType) {

       this.loginType = loginType;

    }

 

}

 

3.5.  新增用户信息HBM实体

在项目database层上面创建entity/sysmgr/Principal.hbm.xml。

<?xmlversion="1.0"encoding="utf-8"?>

<!DOCTYPEhibernate-mapping PUBLIC"-//Hibernate/HibernateMapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<!--

    Mapping file autogenerated byMyEclipse Persistence Tools

-->

<hibernate-mapping>

    <classname="com.erp.database.entity.sysmgr.Principal"table="PRINCIPAL">

        <idname="id" type="java.lang.String">

            <columnname="ID"length="32"/>

            <generatorclass="assigned"/>

        </id>

        <propertyname="name" type="java.lang.String">

            <columnname="NAME"length="50"/>

        </property>

        <propertyname="account"type="java.lang.String">

            <columnname="ACCOUNT"length="50"not-null="true"unique="true"/>

        </property>

        <propertyname="password"type="java.lang.String">

            <columnname="PASSWORD"length="64"/>

        </property>

        <propertyname="companyCode"type="java.lang.String">

            <columnname="COMPANY_CODE"length="32"/>

        </property>

        <propertyname="companyName"type="java.lang.String">

            <columnname="COMPANY_NAME"length="32"/>

        </property>

        <propertyname="depCode"type="java.lang.String">

            <columnname="DEP_CODE"length="100"/>

        </property>

        <propertyname="depName"type="java.lang.String">

            <columnname="DEP_NAME"length="100"/>

        </property>

        <propertyname="email" type="java.lang.String">

            <columnname="EMAIL"length="50"/>

        </property>

        <propertyname="telephone"type="java.lang.String">

            <columnname="TELEPHONE"length="50"/>

        </property>

       <propertyname="state" type="java.lang.String">

            <columnname="STATE"length="10"/>

        </property>

        <propertyname="loginType"type="java.lang.String">

            <columnname="LOGIN_TYPE"length="10"/>

        </property>

    </class>

</hibernate-mapping>

 

3.6.  新增用户登录服务Service

在项目service层上面创建sysmgr/principal/LoginService.java。

package com.erp.service.sysmgr.principal;

 

import java.util.List;

 

import org.springframework.beans.factory.annotation.Autowired;

 

import com.erp.database.dao.CommonDao;

import com.erp.database.entity.sysmgr.Principal;

 

/**

 * 用户登录逻辑处理Service

 *

 * @author ChenJianHui

 *

 */

@Service("loginService")

@SuppressWarnings("unchecked")

public class LoginService {

 

    @Autowired

    private CommonDaocommonDao;

 

/**

     * 根据用户账号查询

     *

     * @param account

     * @return

     * @throws Exception

     */

    public Principal findPrincipal(String account)throws Exception {

 

       Principal principal = null;

       try {

           String hql = "From " + Principal.class.getName() +" model where model.account = :account ";

           List<Principal> principalList = this.commonDao.createQuery(hql).setParameter("account", account).list();

           if (!principalList.isEmpty()) {

              principal = principalList.get(0);

           }

       } catch (Exception e) {

           e.printStackTrace();

           throw e;

       }

       return principal;

    }

 

}

 

3.7.  用户登录Action引用登录服务Service

调用登录服务Service

/**

     * 用户登录主方法

     */

    public String execute() {

 

       try {

           System.out.println(username);

           Principal principal = this.loginService.findPrincipal(username);

           if (null == principal) {

              throw new Exception("用户不存在");

           }

       } catch (Exception e) {

           return null;

       }

       return null;

    }

 

3.8.  验证登录

如果能够成功进行查询,并返回实体内容,则框架搭建成功。

 


0 0
原创粉丝点击