一:建立mysql数据库
create database student default chracter set uttf8;
二:建表(手动写SQL)
三: 插入三条测试
insert into user(user_name,sex,age) values(‘小红‘,1,16);
insert into user(user_name,sex,age) values(‘小明‘,0,20);
insert into user(user_name,sex,age) values(‘小军‘,1,13);
四: 创建新的项目(到时直接导入war)
【参考之前的idea_maven的结合使用】
五、 建立4个目录action,service,dao,entity
六 : 配置maven
对web的支持
对hibernate的支持
struts 与 Spring结合的插件
Spring 与 Hibernate 结合的插件
数据库连接池C3P0
检查驱动是否正常
七 : 配置web.xml
熟悉web.xml所在的目录结构,代码中webappàWEB-INF中的一个文件
配置struts的2个过滤器(3年前的struts是1个过滤器)
配置spring的监听器
八、 配置一个struts.xml
- 用idea创建struts.xml文件,文件要保存到resources
- 配置所有的action实例,由spring的容器创建
九 :
三、 配置Spring容器的配置文件applicationContext.xml
1、 增加context和tx的支持
1、 此项目中,我们期待自己写的类使用注解,而不是<bean>,增加自动扫描包配置
- 配置数据连接池(本项目中使用的是C3P0,如果速度不够快,可以选DBCP)
编写一个DataSource的<bean>,注意里面的${driverClass}等变量来自于上一步的jdbc.properties文件
以上:所有的环境搭配,(struts2+hibernate5+spring5)已经完成,剩下的全是编码了。
导出一个war包,平时或者考试时,可以直接导入war到eclipse使用
后端代码:
一、 实体类
在entity建立一个实体类User
a.在类的前面写上@Entity,@Table
b.根据表结构,编写各个属性,然后填写get/set
c.在主键(id)前面加上
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
最好加上@Column(name="id")
d.其它字段加@ Column() 即可
e.对私有字段增加@Transient
二、 写Dao层,进行各种数据库的操作
1、 先写Dao接口UserDao
本例中设计一个方法getAllUser(),返回类型为:List<User>
2、 编写实现类UserDaoImpl
a、 implements UserDao
b、 添加未实现的方法getAllUser()
c、 添加注解@Repository和@Scope("prototype")
d、 添加一个SessionFactory的属性,未保证实例不为null,添加@Autowired
e、 编写具体数据库操作代码,生成一个session,然后调用具体api,注意不需要编写任何的事务代码(属于横切关注点的,交给Spring完成)
三、 写Service层,进行各种业务逻辑的操作(绝对不包含任何数据库代码)
1、 先写Service接口UserService
本例子中设计一个方法getAllUser(),返回类型为:List<User>
2、 编写实现类UserServiceImpl
a、 implements UserService
b、 添加未实现的方法getAllUser()
c、 对此方法添加一个注解:@Transactional
(因为此方法会调用Dao层,目的让Dao可以被Spring实现事务支持)
d、 对本类添加@Service 和@Scope("prototype")
e、 由于需要引用Dao的支持,所以添加一个Dao的属性,未保证实例不为null,添加@Autowired
f、 在getAllUser()中调用Dao层获取相关数据
g、 根据业务逻辑需要,假如有业务逻辑,先编写游戏规则
h、 返回结果
四、 编写Action层
1、 编写实现类UserAction(本质上是Struts的Action接口的实现类)
2、 写上注解@Controller和@Scope("prototype")
3、 编写方法showAllUser(),注意返回类型为String
4、 由于需要调用service层的东西,添加一个Service的属性,并且为了防止为,加入@Autowired
5、 调用service获取相关的数据(从数据库来的,以及经过service包装)
6、 把结果传递给前端的jsp页面
ActionContext.getContext().getValueStack().set();
7、 return this.SUCCESS;
8、 编写strtus.xml文件,配置返回结果与jsp的关系
- 编写package的节点
- 在package节点内,编写action节点
对应上name class method的属性值
- 在action节点内,编写result,指定对应的jsp页面
前端代码:
编写jsp文件
1、 引入
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
2、 使用相关<c:forEach>以及el表达式,进行数据的显示
3、 编写index.jsp,跳转到具体action去。
要求3单独一个功能写
一、 后端
提供一个json
比如:
获奖 {status:1,message:’获奖’,data:true}
没获奖 {status:1,message:’没获奖’,data:false}
服务器异常{status:0,message:’服务器异常’,data:null}
1、 前置任务,修改strtus.xml文件要配置
把action的名字,method等改为通配符的方式
同时增加<allowed-methods>showAllUser ,isWin</allowed-methods>
index.jsp修改一下跳转地址
1、 在原来的UserAction中增加一个方法:isWin
2、 增加多id用于获取前端传递的用户id
private Integer id;以及对应get/set
3、 在DAO层增加一个getUser(Integer id)方法,返回值:User
a.在接口UserDao增加一个方法:
public User getUser(Integer id);
b.在实现类UserDaoImpl,实现此方法
4、在Service层增加isWin(Integer id),返回:boolean是否获奖
a.在接口UserService中增加一个方法。
public boolean isWin(Integer id);
b.在实现类实现isWin方法,并且编写相关的游戏规则的代码
c.由于调用了Dao中,所以在isWin前面加一个@Transactional
5、在Action调用service
a.定义一个Map属性,用来存放json的内容
private Map<String,Object> jsonMap;(增加get/set)
b.在isWin中初始化Map
jsonMap = new HashMap<String, Object>();
c.根据service返回的结果,对Map提供status,message,data等信息
d.在struts.xml中对应的action节点,
增加一个result type= "json"
<result type="json" name="jsonOK">
<param name="root">jsonMap</param>
</result>
e、在package中extends中,增加一个
json-default
<package name="myPackage" extends="struts-default,json-default">
f、增加一个包Struts 2 JSON Plugin的Maven依赖
解决错误:Parent package is not defined: json-default
二、 前端
使用jQuery的.ajax方法调用后端的API
例如API:http://localhost:8080/userAction_isWin.action?id=1
1、 拷贝jQuery文件到webapp/js/目录下
2、 编辑ok.jsp
<script type="text/javascript" src="/js/jquery-3.2.1.min.js"></script>
3、ajax的应用就不详细描述