您的位置:

用ssh框架做java,ssh三大框架整合

本文目录一览:

学习Java常用的SSH框架是什么呢?

Java框架一直是面试的重点,在成熟的大型企业、快速发展的企业和初创企业中都需要掌握Java框架,这样才能对当前正在开发的系统有一个大致的了解,以便更好地熟悉基础知识和相关技术。那么学习Java常用的框架是什么,应该如何使用呢?下面云南计算机学习为大家具体介绍。

SSH框架的组合主要由Struts,Spring,Hibernate这3个框架构成,把Struts作为系统整体的基础结构加以利用,负责MVC的分离,在Struts框架的模型部分,控制业务的跳跃,利用Hibernate框架支持持续性层,利用Spring管理Struts和Hibernate。下文北大青鸟云南计算机学院具体说明了这三种框架:

Struts框架

Struts框架基本上是基于相当于Servlet的MVC设计模式的Web应用程序框架。MVC设计模式使用Struts2作为控制器(Controller)来建立模型和视图之间的数据交互。云南昆明java软件开发发现它包含Struts1和Struts2两个版本,两者的差异实际上还很大,Struts2虽然不是Struts1的更新,但是充分发挥了这两种技术的优点,它放弃了原来Struts1的缺点,使Web开发更加容易。

Spring框架

我们都应该知道,最传统的JavaWeb应用程序是通过JSP、Servlet、Javabean实现的,它实现了最基本的MVC分层。该结构存在一些问题,如JSP需要使用符号在页面中嵌入大量Java代码,页面结构混乱,Servlet和Javabean负责大量的跳转和操作工作,紧密耦合,程序重用低等。昆明计算机学校发现Spring框架的出现解决了这个问题。通过对AOP和IOC两个特性的加持,所有类之间的这种依赖完全被配置文件所取代,实体bean被很好地管理到容器中,所以耦合大大降低,可重用性大大提高。

Hibernate框架

Hibernate框架是半自动化的永久性层框架,SQL的大幅度削减,代码的制作,在这个框架中,需要相关作业的时候,不需要注意数据库表,通过将一个级别永久性化就可以达到添加,删除和检查的功能。云南昆明IT培训发现这是因为在框架内部实现了很多针对数据库的操作方法。

java程序中使用SSH框架的有什么好处

典型的J2EE三层结构,分为表现层、中间层(业务逻辑层)和数据服务层。三层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与数据库交互。

表现层是传统的JSP技术,自1999年问世以来,经过多年的发展,其广泛的应用和稳定的表现,为其作为表现层技术打下了坚实的基础。

中间层采用的是流行的Spring+Hibernate,为了将控制层与业务逻辑层分离,又细分为以下几种。

Web层,就是MVC模式里面的“C”(controller),负责控制业务逻辑层与表现层的交互,调用业务逻辑层,并将业务数据返回给表现层作组织表现,该系统的MVC框架采用Struts。

Service层(就是业务逻辑层),负责实现业务逻辑。业务逻辑层以DAO层为基础,通过对DAO组件的正面模式包装,完成系统所要求的业务逻辑。

DAO层,负责与持久化对象交互。该层封装了数据的增、删、查、改的操作。

PO,持久化对象。通过实体关系映射工具将关系型数据库的数据映射成对象,很方便地实现以面向对象方式操作数据库,该系统采用Hibernate作为ORM框架。

Spring的作用贯穿了整个中间层,将Web层、Service层、DAO层及PO无缝整合,其数据服务层用来存放数据。

一个良好的框架可以让开发人员减轻重新建立解决复杂问题方案的负担和精力;它可以被扩展以进行内部的定制化;并且有强大的用户社区来支持它。框架通常能很好的解决一个问题。然而,你的应用是分层的,可能每一个层都需要各自的框架。仅仅解决UI问题并不意味着你能够很好的将业务逻辑和持久性逻辑和UI

组件很好的耦合。

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=" "

xmlns:xsi=" "

xsi:schemaLocation="

"

welcome-file-list

welcome-fileindex.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-namecontextConfigLocation/param-name

param-value

/WEB-INF/classes/applicationContext.xml

/param-value

/context-param

!-- 下面的配置信息,用来配置说明使用struts过滤器 --

filter

filter-namestruts2/filter-name

filter-class

org.apache.struts2.dispatcher.FilterDispatcher

/filter-class

!--

下面的配置信息用来说明:程序中运行的action放置在哪个包下面,对于list.action的请求,它会自动在这个包下面寻找ListAction.class的类

如果没有这句话,那么所有的action请求只能在struts.xml中进行配置。

--

init-param

param-nameactionPackages/param-name

param-value

com.action

/param-value

/init-param

/filter

!--

下面的配置表示对于所有请求都交给struts来处理。

--

filter-mapping

filter-namestruts2/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"

" "

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=" "

xmlns:aop=" "

xmlns:xsi=" "

xsi:schemaLocation="

"

!-- 数据源 --

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

valuecom/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"

" "

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:

*

* 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=方法名。

在JAVA中 做哪类项目 适合用SSH框架, 哪些不适用, SSH 框架他的优缺点是什么?

您好,自信成功团队竭诚为您服务。 你所提到的关于SSH框架的适用范围,我可以给您个参考。SSH框架的是基于Struts+Spring+Hibernate的组合框架。所以比较适合大中型项目。具体的就是带后台管理的大中型企业项目。如果从绩效方面看的话,这类框架不适合偏小型的项目。 SSH的缺点主要是在数据库方面的,如果要对数据库进行修改,扩展,或者改换(从Sqlserver改成Mysql)或其他,就会显得麻烦了,还有目前国外的大型站还是利用Servlet的。 至于它的优点我就不说了,除了效率还是效率! 如果您还有任何疑问,欢迎随时联系本团队。谢谢采纳。