org.apache.struts
struts2-core
2.3.35
org.apache.struts
struts2-spring-plugin
2.3.35
org.apache.struts
struts2-json-plugin
2.3.8
1.4 配置Java EE 坐标依赖
这里可以引入 servlet api,jstl 标签库等一系列工具
javax.servlet
javax.servlet-api
3.1.0
provided
javax.servlet.jsp
javax.servlet.jsp-api
2.3.1
provided
org.projectlombok
lombok
1.18.0
provided
jstl
jstl
1.2
taglibs
standard
1.1.2
1.5 其他工具
json 处理工具
org.jetbrains
annotations-java5
RELEASE
compile
org.json
json
20160810
二、项目结构搭建
=======================================================================
2.1 配置文件
使用如下方式创建
-
applicationContext.xml
-
jdbc.properties
-
struts.xml
2.2 包结构
创建如下的基本包结构
三、编写配置文件
=======================================================================
3.1 web.xml 文件配置
Archetype Created Web Application
contextConfigLocation
classpath:applicationContext.xml
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*
org.springframework.web.context.ContextLoaderListener
3.2 编写 jdbc.properties 文件
这里我们需要自己手动修改数据库的信息配置
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/hibernate?characterEncoding=utf-8&autoReconnect=true&useSSL=false
jdbc.user=root
jdbc.password=root
#连接池中保留的最小连接数
jdbc.minPoolSize=1
#连接池中保留的最大连接数
jdbc.maxPoolSize=20
#初始化连接数
jdbc.initialPoolSize=1
3.3 编写 applicationContext.xml 配置文件
这里面也包含了数据库的基本配置
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xmlns:tx=“http://www.springframework.org/schema/tx” xmlns:context=“http://www.springframework.org/schema/context” xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> context:annotation-config/ org.hibernate.dialect.MySQLDialect update thread true true false 我们还没有编写的具体的 action 服务,所以这里先跳过 四、使用 hibernate 逆向生成工具生成实体 ======================================================================================== 使用 idea 自带的数据库连接的工具 完善基本配置信息 生成好后可以看到和数据库对应的实体类,我的表很简单,一个简单的用户表,只有 id, username, password 字段 但是我们发现里面的部分内容会爆红,这是因为我们没有指定数据源 选择我们刚才连接的数据库 然后就没问题了。 五、JavaBean 编写 ============================================================================ 看到包结构,大家应该可以猜出来,我是使用的典型的 MVC 三层架构来编写的 创建 UserDao 以及 它的实现类 UserDaoImpl UserDao 编写 package dao; import entity.User; public interface UserDao { // 用户登录验证 public User selectByUsernameAndPassword(String username, String password); } UserDaoImpl package dao.Impl; import dao.UserDao; import entity.User; import org.hibernate.Session; import org.hibernate.query.Query; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.hibernate5.HibernateTemplate; import org.springframework.stereotype.Repository; import javax.annotation.Resource; // 使用 Spring 来接管持久层的所有操作 @Repository public class UserDaoImpl implements UserDao { // 使用 Hibernate 提供的模板 @Autowired @Resource private HibernateTemplate hibernateTemplate; // 生成对应的 get 和 set 方法 public HibernateTemplate getHibernateTemplate() { return hibernateTemplate; } public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; } @Override public User selectByUsernameAndPassword(String username, String password) { // 登录的逻辑不算难,就是使用 sql 语句查询,username 和 password 两个字段是否存在即可,我们使用的是 hibernate 框架,所以要写 hql 语句 Session session = hibernateTemplate.getSessionFactory().openSession(); Query q = session.createQuery(“from User u where u.username = ? and u.password = ?”); q.setParameter(0,username); q.setParameter(1,password); User u = (User) q.uniqueResult(); return u; } } 我们写好了 dao 层,这时候发现出现了爆红的问题,这里我们需要手动添加项目的依赖信息 点击 project structure 添加这个就可以了,问题就解决了 显示正常了 同样,我们创建对应的 UserService 和 对应的 UserServiceImpl 类 有的同学可能会问道,不就是一个简单的登录功能嘛,有必要这么麻烦吗?是的,这么做确实没必要,但是随着项目的越来越大,只有把具体的功能全部分开来做,这样才不至于整个项目太过于乱 编写用户的业务层 接口 UserService package service; import entity.User; public interface UserService { // 登录验证 User checklogin(String username, String password); } 编写 业务层对应的实现类 UserServiceImpl package service.Impl; import dao.UserDao; import entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import service.UserService; @Service public class UserServiceImpl implements UserService { // 这里业务层调用持久层的方法 @Autowired private UserDao ud; @Override public User checklogin(String username, String password) { return ud.selectByUsernameAndPassword(username,password); } } 这里的逻辑思路,是 controller 层 调用 service 的方法,service 层调用 dao 层的方法 package action; import com.opensymphony.xwork2.ActionContext; import entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import service.UserService; import java.util.Map; // 使用 Controller 表示这是控制层,使用 ua 表示这个类被 Spring 所管理 @Controller(“ua”) public class UserAction { // 编写两个属性,使用 struts2 的 ognl 表达式可以直接接收到前端穿过来的数据,不再需要 request.getParameter(“xxxx”) 接收数据了 private String username; private String password; // 调用业务层的方法 @Autowired private UserService us; // get 方法可以不要, set 方法必须有,不然前端的数据就无法注入进来 public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } // 编写登录逇控制层方法 public String login() { System.out.println(username + " " + password); // 打印穿过来的数据 ActionContext ac = ActionContext.getContext(); // 得到 servlet 中的三大域的 session 域,在这里我们要将数据保存至 session,并在前端展示 Map User user = us.checklogin(username,password); // 登录验证 if ( user!=null ) { session.put(“user”,username); return “success”; } else { return “error”; } } } 记得在 Project Structure 添加如下配置 stucts action 配置 自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。 深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。 既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化! 由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新! 如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取) 我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。实际上,作为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的。 《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取! 技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!** 因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-C1M1t1tm-1713384424162)] [外链图片转存中…(img-VMFfQBTB-1713384424162)] [外链图片转存中…(img-AN1CZh1T-1713384424163)] 既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化! 由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新! 如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取) 我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。实际上,作为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的。 [外链图片转存中…(img-7W9TCuse-1713384424163)] [外链图片转存中…(img-mJri2T8N-1713384424163)] 《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!3.4 struts 配置文件
4.1 配置数据库连接信息
4.2 逆向生成实体类
4.3 实体类配置
5.1 编写 dao 层
5.2 编写 Service 层
5.3 编写 Controller 层 (UserAction)
5.4 编写 struts 路由映射
总结
Mybatis源码解析
总结
Mybatis源码解析
还没有评论,来说两句吧...