SSH 框架整合:Struts2 + Spring + Hibernate + Tiles + jQuery + Bootstrap

最近学习框架,因为貌似很多招聘都要求 SSH 框架(-。-;)本文介绍了 Struts2+Spring+Hibernate+Tiles+jQuery+Bootstrap的整合。
首先,从普通 Web 应用开始,我们给他添加 Struts2 支持,然后一步步添加其他框架支持,最终达到整合效果。

提示:有些 .jar 文件可能会漏掉,导致不能部署成功,大部分这种情况,会提示 找不到类或类没有定义之类的错误,只需要把这个类搜一下,就可以确定是缺少哪个包导致的,添加进项目即可。

一、新建 Web 项目

自从上学期用过IDEA 我就一直用着这个了,强烈推荐,毕竟 IntelliJ IDEA 号称是最智能的 Java IDE. 当然,你坚持使用 Eclipse 也是可以继续根据本文做下去的。

二、添加 Struts2 支持

1. 去 Struts2官方网站 下载最新版 Struts2, 解压出来,把 struts-2.3.28.1\apps\struts2_blank.war 解压出来,复制其中 WEB-INF\lib\ 里面的所有 .jar 文件到项目的 web/WEB-INF/lib/(需要新建 lib 目录)中。
2. 之后还需要添加这些库到 CLASSPAATH 中,IDEA 可以通过 File-Project Structure(Ctrl+Alt+Shift+S) 打开对话框在左侧定位到 Modules, 然后在右侧的 Dependencies 点击加号选择 JARs or directories 把本项目的 web/WEB-INF/lib 文件夹添加进来。如果你使用 Eclipse, 添加路径你也肯定会对吧。
3. 配置 web.xml 文件(位于/web/WEB-INF/)。添加 Struts2 核心 Filter.

4. 新建 struts.xml 配置文件。可以在 /src/ 目录下,也可以在 /web/WEB-INF/classes 目录下。内容暂且不填,让我们先写一个 Hello World.
5. 测试 Struts2.
我们一般是按照上面的 filter 配置的 web.xml 也就是说使用 Struts2 拦截所有的请求,交给 Struts2 处理。

5.1.Action. 我们以登录为例,处理登录请求的是 LoginAction 类。内容大概是这样的。

一般我们会继承自 ActionSupport 类(其中定义了几个常用的字符串常量),只需重写 execute 方法即可,当然也可以不继承任何类,那也是可以的。私有属性对应表单提交的域,并提供 getter, setter 方法,这样框架才能把表单的值传递过来。

5.2. 表单。假设 index.jsp 里面是登录表单,内容大概是这样的:

其中使用了 Struts2 的标签库之中的 <s:form> 标签,这个可以自己查一下相关资料,很好理解的,不再本文讨论范围内。<s:form action=”> 这个 action 属性定义了要处理本表单的 Action 是哪一个。这里可以随便起名字,或者根据 Action 类名小写第一个字母,如 LoginAction 类处理的表单的 action 可以填 login 或者 loginAction.

5.3. 配置 struts.xml 文件。打开 struts.xml 输入如下内容:

其中 constant 标签用于配置各种常量,比如这里吧开发模式打开了,方便调试。
然后在 package 标签下面配置 action, name 就是对应于表单的 name 了,class 对应于 Action 类的全限定名。这里省略了另一个 method 属性,应为这个属性默认就是 execute 而我们也正是重写的 execute 方法。然后他的子标签 <result> 定义了两个“结果类型”,当 Action 类返回 “success” 时( ActionSupport.SUCCESS常量就是”success”)时,就把 /welcome.jsp 文件作为响应发给浏览器,当结果是 “login” 时,就把 /index,jsp 作为响应。需要注意的是,提交表单后浏览器地址会变成 http://localhost:8080/XXX/login.action 不管返回哪个视图,都是这个 URL 显示在客户端。如果需要登录成功 URL 也同时改变,那么需要在 <result> 标签里加上 type 属性,指定为 redirect 或者 redirectAction.

5.4. 至此,Struts2 的基本流程就算完成了,可以部署到服务器查看效果。

三、添加 Tiles.

什么是 Tiles 呢?Tiles 是一种表现层技术,如果你不需要,或者坚持对每一个页面都很耐烦地写一些重复的代码,那么你可以跳过本小节。
其实我原来是不知道 Tiles 的,但由于很多 JSP 页面都有很多重复的代码,比如一个页面的开头总是那么几行,受到 WordPress 主题源代码的影响/启发,我就想,要是 Java Web 页面也有类似的机制就好了,只需在主题的 header 里面写一遍,每个页面都调用这个 header 那么久省事多了。想过 <jsp:include> 但是这样不能传参。比如 WP 主题页面的标题,就一个 < ?php wp_title( '|', true, 'right' ); ?> 就可以让每个页面标题都不一样。于是我搜到了 Tiles, 这个就是可以自定义模板,然后自己根据模板组装不同页面 (Tiles) 成一个页面作为响应。另外还搜到 SiteMash 但这个貌似是每次对响应的 JSP 进行装饰,而不是组装,因此我最终选的是 Tiles.

1. Struts2 的 lib 目录下自带了 Tiles 所需的包。把

struts2-tiles-plugin-2.3.28.1.jar
tiles-api-2.2.2.jar
tiles-compat-3.0.1.jar
tiles-core-2.2.2.jar
tiles-el-2.2.2.jar
tiles-freemarker-2.2.2.jar
tiles-jsp-2.2.2.jar
tiles-ognl-2.2.2.jar
tiles-servlet-2.2.2.jar
tiles-template-2.2.2.jar

复制到项目的 /lib 下。
2. web.xml 里进行配置。添加如下代码:

3. 创建 tiles.xml 配置文件。
插播 Tiles 流程。
3.1 介绍几个概念:

Template 模板
模板是一个 JSP 页面,其中可以有很多 Tiles 属性,也可以直接写 JSP 代码。当其中的属性都被填充时可以直接使用。
Attribute 属性
分为 string 字符串,template 模板,definition 定义。
Definition 定义
一个定义有一个名字,可以指定这个定义的模板,可以在这个定义里加入一下属性和相应的值。

3.2. 创建并使用 Tiles 页面。

a. 创建一个模板。如:

b. 创建组件。如 footer.jsp:

c. 添加 Tiles支持。
在 struts.xml 的 packpage 标签下添加新的结果类型:

这样 Struts2 才能知道怎么处理。

d. 在 tiles.xml 里创建定义。

e. 让 Struts2 使用 Tiles 进行响应。更改原先的配置如下:

至此,Tiles 应该可以正确工作了。

四、添加 jQuery/Bootstrap.

原先搜到了 Struts2 有一个 Bootstrap 插件,试用了感觉并不好用,还不如直接导入 js/css 文件,直接根据需要写需要的 css class.
这里我们把所有静态资源放在 /web/static/ 目录下。
然后在 struts.xml 里添加:

在需要引用的地方写:

五、添加 Hibernate.

1. 去 官网 下载 Hibernate. 把解压出来的 /lib/required/ 目录下的所有 .jar 复制到项目的 /lib 里面。
2. 开启数据库,比如 MySQL. 添加数据库驱动包,比如 mysql-connector-java-5.1.38-bin.jar
3. 配置文件。在 src/ 下新建 hibernate.cfg.xml 文件:

4. 测试 Hibernate.
DBTest.java:

DBTestManager.java:

其中的实体关系多对一,一对多什么的(好吧,这个例子没有)以及注解的含义,需要读者深入查询相关资料。

六、添加 Spring.

1. 去 官网 下载 Spring. 把 /libs/ 下的 20 个 .jar 文件复制到项目中。(至此,项目中有63个包!)
2. web.xml 添加 Listener.

3. 测试 Spring.
a. 编写类
Axe.java:

Person.java

具体实现类:
StoneAxe.java

具体人物
Xiaoming.java

b. 编写 beans.xml 让 Srping 管理。

c. 主程序:

七、SSH 整合.

1. 编写 DAO 组件基类接口。
2. 实现 DAO 组件。
3. Action 与 Service.
4. applicationContext.xml 配置,让 Spring 管理 Hibernate 的 sessionFactory 和各种 bean.

项目目录大概是这样子:

1.基接口。
BaseDao.java

接口的实现。BaseDaoImpl.java

2.实现 DAO 组件。
UserDao.java

UserDaoImpl.java

3. po 类、 Acton 及 Service.
User.java

UserAction.java

对应的添加用户的表单:

对应的 Struts.xml 配置:

其中DAO里的服务类:
UserService.java

4. Spring 配置文件。
在 /web/ 下新建 applicationContext.xml.

完成!之后有新的功能添加时,只需添加相应的页面,编写 po 类、Action 类、Service类、并配置一下就好了。
在 GitHub 上有源代码:https://github.com/YouthLin/TopFresh


发表评论

电子邮件地址不会被公开。 必填项已用*标注