由于项目需要,现在需要再搭建一次ssh。由于之前搭过几次,有一定的经验,但是有些地方还不是很明白,所以借这次机会,我打算把搭建的过程以及相关的疑惑一并解决。这次的搭建过程还是依赖eclipse的相关插件来自动生成,过几天再尝试自己下载jar包来完成整个创建过程。
首先点击创建Web Project,在弹出的对话框中填写自己的项目名称。
在下面选择J2ee的版本,我选择的是Java EE 6.0,关于5.0与6.0的区别,给个传送门,晚上再来补充
http://hi.baidu.com/i_ccboy/item/b4577651fbf7cf444eff2095 对于里面讲的一些内容,我也没用过。总的来说6.0比5.0多了一些类与接口。
看下来,我看到了Maven,这个东西又是干嘛的呢?
接下来,搭建struts2框架,右击项目名称-〉myeclipse-〉add struts capabilities
点击finish搞定。这时候在Package Explorer中的src文件夹下就会有出现struts.xml文件。
我们可以对比一下框架搭建前的包视图,发现多了Struts 2 Core Libraries库,这个就是对struts2所需的jar包的引用,引用的这些包是myeclipse自带的,放在myeclipse一个固定的位置,所以当其他人用myeclipse导入你的项目的时候,该项目依然能够正常运行。但是如果使用的eclipse版本太低,没有这些默认包的话就会出错。如果我们不使用myeclipse自带包,想自己搭建环境的话,一般在项目根目录下新建lib文件夹,把包放在里面,然后在myeclipse中右击项目名称-〉buildpath-〉add libraries 加入刚放入lib文件夹中的包。
为了检测struts2搭建是否成功,我们在src新建一个包,并在该包内新建一个类。
testAction.java 代码
1: /**
2: * com.reminder.test.action
3: * create on 2014-1-4 下午3:21:19
4: */
5: package com.reminder.test.action;
6:
7: import com.opensymphony.xwork2.ActionSupport;
8:
9: /**
10: * Copyright 2014 SCUT
11: * All right reserved.
12: * Create on 2014-1-4 下午3:21:19
13: * @project 139Reminder
14: * @module
15: * @case
16: * @author yangkai
17: * @completed 90%
18: */
19:
20: public class testAciton extends ActionSupport{
21:
22: private String testCode;
23:
24: public String getTestCode() {
25: return testCode;
26: }
27:
28: public void setTestCode(String testCode) {
29: this.testCode = testCode;
30: }
31:
32: /**
33: * @Case
34: * @author yangkai
35: * @email [email protected]
36: * @createTime 2014-1-4 下午3:24:38
37: * @completed 90%
38: * @see com.opensymphony.xwork2.ActionSupport#execute()
39: */
40: @Override
41: public String execute() throws Exception {
42: // TODO Auto-generated method stub
43: return "success";
44: }
45: }
然后需要配置web.xml里面,加入struts2的监听器,代码如下:
1: "1.0" encoding="UTF-8"?>
2:"3.0"
3: xmlns="http://java.sun.com/xml/ns/javaee"
4: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5: xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
6: http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
7:
8:
9:index.jsp
10:
11:
12:struts2
13:class>
14: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
15: class>
16:
17:
18:struts2
19:/*
20:
接着要配置struts.xml内容
1: "1.0" encoding="UTF-8" ?>
2: "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
3:
4:"139Reminder" extends="json-default" namespace="/">
5:"test" class="com.reminder.test.action.testAciton">
6:"success" type="json">
7: "includeProperties">
8: ^testCode
9:
10:
11:"input" type="json">
12:
13:
14:
对项目进行部署,在浏览器中输入 你的服务器名/项目名/test?testCode=11 ,比如我的 http://yk:8080/139Reminder/test?testCode=1
会看到输出1,表示struts成功搭建。
接下来搭建Spring,右击项目名称-〉myeclipse-〉add spring capabilities
选择Spring 3.0 选择如下的包
其中,aop是spring对面向切面编程的支持,以后要用到的拦截器就属于AOP编程,所以应该导入该包。Core Library是spring的核心包,当然要导入啦。Persistence Core与JDBC Libraries都与Spring对持久层操作有关,如果不导入这两个包对hibernate整合有影响。对于其他包,没用过,也很难说清作用,要用的时候才查吧。
点击下一步
点击finish就完成spring的搭建。
我们再对比下myeclipse为我们完成了什么工作:
加入了web app libraries库,在web-inf中加入了applicationContext.xml文件,这个文件用来配置spring。
来到这里,很多同学都以为struts2与spring都搭完了,的确如此,但是这两者目前还是独立的框架,我们的目的是将两者关联起来。这时候就需要导入一个名为 struts2-spring-plugin-2.3.8.jar的包。同时,在struts.xml里面每个action的class也要改一下,从直接的引用action地址改为应用该action在spring中配置的名称。这样两者就关联起来了。
接下来搭建hibernate框架。我们选择的是Hibernate 3.3版本,右击项目名称-〉myeclipse-〉add hibernate capabilities
点击下一步,选择Spring来配置hibernate
选择已有的applicationContext.xml来配置hibernate
finish,搭建完成。
打开applicationContext.xml会看到myeclipse已经帮我们完成了spring对hibernate的控制。
同时,为了操作数据库,我们还需要再导入一个包:mysql-connector-java-5.1.18-bin.jar,这样hibernate才能操作jdbc。
至此,可以说ssh搭建完成。
现在检验一下我们搭建的环境能否运行。首先利用反向工程生成bean与dao。步骤如下:
在你的数据库中添加一个表test,里面一个字段:id。
在myeclipse调出数据库窗口(DB Browser)
右键-〉hibernate reverse engineering
上图中的create POJO是生成对象映射表,存储在xml文件中,在本例子中,若选择该项目会生成Test.hbm.xml。Java Data Object是生成映射对象,本例中将生成Test.java。点击next
点击finish完成bean的生成。看看myeclipse为我们完成了什么:打开applicationContext.xml,我们会发现名为sessionFactory的bean中多了一个名为mappingResources的property,里面能找到我们加入的数据库对象映射文件test.hbm.xml。并且在src中多了个名为com.reminder.bean的包。
第二步是加入dao层。
同样右击test表,点击hibernate reverse engineering
点击完成就可以了。
生成后出现错误?
别慌,打开TestDao.java,导入以下头文件:
import com.reminder.bean.Test;
然后把所有dao.Test替换为bean.Test。错误原因是myeclipse自动把持久类所在的位置默认为本包。替换过来就没事了。
建立com.reminder.test.service包,添加TestService.java类,代码如下:
1: /**
2: * com.reminder.test.service
3: * create on 2014-1-4 下午8:55:34
4: */
5: package com.reminder.test.service;
6:
7: import javax.annotation.Resource;
8:
9: import com.reminder.bean.Test;
10: import com.reminder.dao.TestDAO;
11:
12: /**
13: * Copyright 2014 SCUT
14: * All right reserved.
15: * Create on 2014-1-4 下午8:55:34
16: * @project 139Reminder
17: * @module
18: * @case
19: * @author yangkai
20: * @completed 90%
21: */
22:
23: public class TestService {
24:
25: @Resource
26: private TestDAO testDao;
27:
28: public void findById(){
29: testDao.findAll();
30: }
31: }
建立com.reminder.test.action包,添加TestAction.java类,代码如下:
1: /**
2: * com.reminder.test.action
3: * create on 2014-1-4 下午3:21:19
4: */
5: package com.reminder.test.action;
6:
7: import javax.annotation.Resource;
8:
9: import com.opensymphony.xwork2.ActionSupport;
10: import com.reminder.test.service.TestService;
11:
12: /**
13: * Copyright 2014 SCUT
14: * All right reserved.
15: * Create on 2014-1-4 下午3:21:19
16: * @project 139Reminder
17: * @module
18: * @case
19: * @author yangkai
20: * @completed 90%
21: */
22:
23: public class TestAciton extends ActionSupport{
24:
25: private String testCode;
26:
27:
28: @Resource
29: private TestService testService;
30:
31: /**
32: * @Case
33: * @author yangkai
34: * @email [email protected]
35: * @createTime 2014-1-4 下午3:24:38
36: * @completed 90%
37: * @see com.opensymphony.xwork2.ActionSupport#execute()
38: */
39: @Override
40: public String execute() throws Exception {
41: // TODO Auto-generated method stub
42: testService.findById();
43: return "success";
44: }
45:
46: public String getTestCode() {
47: return testCode;
48: }
49:
50: public void setTestCode(String testCode) {
51: this.testCode = testCode;
52: }
53: }
最后得到的包如下图:
以上是采用注解的方式配置Action与dao的,所以要在applicationContext.xml中加入