JAVA SSH框架搭建流程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA SSH框架搭建流程相关的知识,希望对你有一定的参考价值。

首先,明确spring,struts,hibernate在环境中各自的作用。

struts:
用来响应用户的action,对应到相应的类进行处理。需要struts对应的包。

hibernate:
用来把实体类对应到数据库。提供增删改查的基本操作实现。需要hibernate对应的包以及mysql的jdbc驱动包。

spring:
管理struts:在xml配置文件中为struts的action进行值注入。
管理hibernate:在xml配置文件中配置hibernate的配置信息(dataSource,sessionFactory),即不需要原来的hibernate的xml文件。为hibernate的dao操作注入sessionfactory属性值。
需要提供spring对应的包,除此以外,还需要提供一个整合spring与struts的包:truts2-spring-plugin-2.0.11.1.jar

下面就搭建步骤进行详细说明:
1、新建一个web project,导入包,需要的包放在文件夹sshlib中。
2、修改web.xml的配置信息,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd ">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<!-- 下面的listener,是spring提供的,它会在创建时自动查找WEB-INF下的applicationContext.xml文件 ,从而创建spring容器-->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- 下面的配置作用是:在MyEclipse中,系统会自动到WEB-INF下寻找 applicationContext.xml文件,而系统
会自动将applicationContext.xml放置到WEB-INF下的classes下,所以会产生找不到applicationContext.xml的错误,需要指明applicationContext.xml
的放置位置。这就是下面的信息作用。在Eclipse中也许不需要此配置信息。-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/applicationContext.xml
</param-value>
</context-param>
<!-- 下面的配置信息,用来配置说明使用struts过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
<!--
下面的配置信息用来说明:程序中运行的action放置在哪个包下面,对于list.action的请求,它会自动在这个包下面寻找ListAction.class的类
如果没有这句话,那么所有的action请求只能在struts.xml中进行配置。
-->
<init-param>
<param-name>actionPackages</param-name>
<param-value>
com.action
</param-value>
</init-param>
</filter>
<!--
下面的配置表示对于所有请求都交给struts来处理。
-->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

3、接下来用来配置struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd ">

<struts>
<!-- 指定Web应用的默认编码集。该属性对于处理中文请求参数非常有用,对于获取中文请求参数值,应该将该属性值设置为GBK或者GB2312 当设置该参数为GBK时,相当于调用HttpServletRequest的setCharacterEncoding方法 -->
<constant name="struts.i18n.encoding" value="utf-8" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<interceptors>
<!-- 定义拦截器 -->
<interceptor name="crudInterceptor"
class="com.action.CrudInterceptor" />
<interceptor-stack name="appStack">
<interceptor-ref name="crudInterceptor" />
<!-- 下面一行自带的拦截器必须加上,否则出错 -->
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<!-- 使用默认拦截器配置Action都需要拦截器堆栈
即所有struts请求都自动先交给拦截器处理。关于拦截器的具体规则在拦截器对应类(com.action.CrudInterceptor)中进行了解释。
-->
<default-interceptor-ref name="appStack"></default-interceptor-ref>
</package>
</struts>

4、接下来配置applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans "
xmlns:aop="http://www.springframework.org/schema/aop "
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd ">

<!-- 数据源 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"
value="org.gjt.mm.mysql.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/user" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>
<!-- sessionFactory配置 -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingResources">
<list>
<value>com/ssh/User.hbm.xml</value>
</list>
</property>
<!-- 定义sessionFactory的属性 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQL5InnoDBDialect
</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>

<!-- hibernate的类名,属性名和数据库之间的对应关系的自定义 com.ynstudio.tools.LocalNamingStrategy -->
<bean id="namingStrategy"
class="org.hibernate.cfg.ImprovedNamingStrategy">
</bean>
<!-- 定义DAO的bean -->
<bean id="userDao"
class="com.ssh.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!--
下面的代码用来向Action类注入属性值
-->
<bean id="crudAction" class="com.action.CrudAction">
<property name="userDao" ref="userDao"></property>
</bean>
</beans>

5、上述配置文件完成后,就开始业务逻辑部分。
首先完成hibernate的curd操作部分内容。
设计一个User实体类。包含数据库中User表的字段。
新建一个User.hbm.xml文件,实现实体类与数据库的关联。内容如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd ">
<hibernate-mapping>
<class name="com.ssh.User" table="user">
<id name="id" column="id">
<generator class="increment" />
</id>
<property name="username" column="username" />
<property name="password" column="password" />
<property name="birthday" column="birthday" />
<property name="email" column="email" />
</class>

</hibernate-mapping>
接下来需要实现dao操作。
设计一个类继承了HibernateDaoSupport类。关于HibernateDaoSupport类,请参考相关文档。

6、完成hibernate的设计后,接下来设计struts的拦截器和struts的action。
struts的拦截器:
package com.action;

import java.lang.reflect.Method;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

/**
* 这个类的是拦截器。
* 对于如下URL:
* http://xxxxx:xxxx//xxx/hello.action?method:list
* actionInvocation.invoke()方法会自动调用名称了HelloAction类的list方法。
* 在action中根据该方法的返回值决定页面显示或跳转位置。
* result值除了可以再action类中定义,还可以在struts.xml中配置。
* 配置时可采用如下语句:
* <action name="hello" class="crudAction">
* <result name="list">/list.jsp</result>
* <result name="modify">/modify.jsp</result>
* </action>
* 此处需要格外注意的是:class属性的值,此值是applicationContext.xml中的id。
* 该bean中注入了action类中属性userDao的值。
* 所以,如果需要使用struts.xml中的action配置,需要使用该id,否则,系统不会给其注入值,最终导致空指针异常。
* @author HeXiaoXing
*
*/
public class CrudInterceptor extends AbstractInterceptor

public String intercept(ActionInvocation actionInvocation) throws Exception
/*
*下面代码演示了获取请求的类名与方法名的一半方式,但本例中不涉及。 全部注释掉。
*/
// Object action = actionInvocation.getAction();
// Class actionClass = action.getClass();
// String actionClassName = actionClass.getSimpleName();
// String methodName = actionInvocation.getProxy().getMethod();

return actionInvocation.invoke();




struts的action,关于此action的全部内容,请参考源程序CrudAction。

7、完成了类设计后,就是页面的设计,关于页面的设计,不再一一叙述,给粗源文件,请自行参考。
需要提出的是,在转向时,url的格式必须是method:方法名。这是约定的,不可以写成method=方法名。
参考技术A --- 访问数据库的方言 1.3 Xxxx.hbm.xml 映射文件 HIBERNATE_HOME/project/tutorials/eg/src/main/java&...

Java之基于Eclipse搭建SSH框架(下)

在上篇博客里,我简介了Tomcat滴配置与Struts2滴搭建,假设对这个还不会滴童鞋去看一下我滴上篇博客《Java之基于Eclipse搭建SSH框架(上)》。今天我们接着上篇博客滴内容。继续搭建我们滴SSH框架。
(一)在上篇博客滴基础上整合Spring:
首先我们把Spring所须要的jar(上篇博客有),拷贝到WebContent下的WEB-INF下的lib里面。

其次在src下创建名为:applicationContext.xml文件。(有些人提示在WEB-INF下创建)个人建议在src下创建
Spring配置文件有两种格式:DTD格式。Schema格式。
基于DTD格式的配置文件格式例如以下:

<?xml version="1.0" encoding="UTF-8"?

> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <beans> <!-- Service配置 --> <bean id="loginService" class="com.hy.service.impl.LoginServiceImpl" /> </beans>

Schema格式的配置文件拥有自己的命名空间。格式例如以下:

<?xml version="1.0" encoding="UTF-8"?

> <beans xmlns="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:tx="http://www.springframework.org/schema/tx" 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-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <!-- Service配置 --> <bean id="loginService" class="com.hy.service.impl.LoginServiceImpl" /> </beans>

这里我用的是另外一种配置方式。applicationContext.xml内容为:

<?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans  
               http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
        <!-- Service配置 -->
        <bean id="loginService" class="com.hy.service.impl.LoginServiceImpl" />
        <!-- Action配置 -->
        <bean id="loginServer" class="com.hy.action.LoginAction" scope="prototype">
            <property name="loginService" ref="loginService"></property>
        </bean>
    </beans>  

在struts里面这样配置就能够了:

    <package name="struts2" extends="struts-default">
        <!-- 此处的class的内容要与Spring配置文件里的bean的id同样 -->
        <action name="Login" class="loginServer">
            <result name="success">/result.jsp</result>
            <result name="input">/login.jsp</result>
        </action>
    </package>

这里要注意的是在struts.xml文件里面的action配置中。class=”“与我们上篇博客讲的Struts搭建不一样了。这里的class内容与applicationContext.xml里面的Action配置bean的id是同样的!

。!


其次在web.xml我们须要在加入以下这些代码:

    <!-- 用来定位Spring框架配置文件 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext*.xml,classpath*:applicationContext*.xml</param-value>
    </context-param>
    <!-- 配置Spring监听 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

这样集成Spring所要配置的文件算是结束了,另一点要强调整合Struts与Spring须要一个jar(struts2-spring-plugin-2.3.8.jar)。这个jar我放到了struts2所需jar里面了,加入了这个jar才算把Struts与Spring整合在一起了。
在集成Hibernate前,说一下关于Spring XML文件上下文配置问题。

applicationContext.xml事实上这个文件能够保存到classpath或者WEB-INF文件下。随着项目增大,Spring的配置文件也会变得庞大,能够依据已定的原则分为几个配置文件。从而使配置更加清晰。提高可维护性。上面代码中的写法是查找classpath和WEB-INF文件下全部的配置文件(好多人都说了当中一种。假设写的查找和文件保存位置不一样。就会报错哦~)。


測试一下,整合情况,效果图例如以下:
技术分享
莫急哈~~demo我会在以下给大家,请大家看清里面的网址,由于这个demo里面也包含最后SSH的搭建測试。
(二)集成Hibernate
首先还是把Hibernate所须要的jar(上篇博客有)。拷贝到WebContent下的WEB-INF下的lib里面。然后在applicationContext.xml中加入以下的配置:

    <!-- 配置数据源 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <!-- 指定连接数据库的驱动 -->
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <!-- 指定连接数据库的URL -->
        <property name="url" value="jdbc:mysql://localhost:3306/test" />
        <!-- 指定连接数据库的用户名 -->
        <property name="username" value="root" />
        <!-- 指定连接数据库的密码 -->
        <property name="password" value="" />
    </bean>
    <!-- 配置SessionFactory -->
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.MySQLDialect
                </prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.connection.autocommit">true </prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="sql_format">true</prop>
            </props>
        </property>
        <property name="mappingResources">
            <!-- 指定hibernate映射文件 -->
            <list>
                <value>com/hy/entity/User.hbm.xml</value>
            </list>
        </property>
    </bean>

到这里框架就算搭建完成了。

有人会有疑惑。不是要创建hibernate.cfg.xml或者hibernate.properties配置嘛。事实上在上面的配置文件里,你是不是发现有一个bean中的文件特别像这两个文件里的内容嘛。事实上这样就能够了,不用再创建那两个文件了。
在此说明一下假设你的数据库是MySQL配置依照上面那种方式配置,别忘了加入相应的jar(有人告诉我:jar包也要与自己的数据版本号相应,否则连不上)。假设你的数据库是Oracle,配置依照以下图中进行配置。
技术分享
最后在说一下Hibernate映射文件(类与表之间的关系映射)

<hibernate-mapping>
    <class name="类名" table="表名">
        <!-- 主键 -->
        <id name="主键名">
            <column name="主键列" />
            <!-- 主键生成器 -->
            <generator class="生成策略" />
        </id>
        <property name="属性名" type="数据类型">
            <column name="列名" length="长度" not-null="是否不为空" />
        </property>
    </class>
</hibernate-mapping> 

測试一下,效果图:

技术分享

技术分享

技术分享

搭建SSH到这里就结束啦。如有疑问。请给我留言~~
最近有小伙伴反映。看了偶滴博客然后跟着做还是报错,总结了他们的错误这里我简单说明一下:
1.假设亲还没有配置Spring,就不要把(struts2-spring-plugin-2.3.8.jar)。这个jar包提前导入到项目里(这是我滴错。把这个jar包放到struts所需的包包里面了)。假设按我的博客验证struts时出错。那就把这个包删除就可以。(整合Spring别忘了导入哦~)
2.就是配置问题:(上图,有图有真相~)
技术分享

技术分享

技术分享

技术分享

技术分享
配置文件和代码里面的名字要相应,不然就出错哦~
3.就是我们的框架用到Hibernate,童鞋们都知道写映射表,可是别忘了配置文件里指定。
技术分享

最后附上:
demo地址























以上是关于JAVA SSH框架搭建流程的主要内容,如果未能解决你的问题,请参考以下文章

1、搭建搭建一个SSH框架 Web工

在家里面搭建Java SSH框架我先把所有的包都建好了,免得后面要新建但是我后来选包的时候发现我原先的包不

SSH(Struts2+Spring+Hibernate)框架搭建流程

SSH(Struts2+Spring+Hibernate)框架搭建流程

如何搭建SSH框架,myeclipse搭建SSH框架详解

eclipse怎么搭建ssh框架