java实现登陆ssm框架_SSM框架搭建web服务器实现登录功能(Spring+SpringMVC+Mybatis)
初学java EE,虽然知道使用框架会使开发更加便捷高效,但是对于初学者来说,感到使用框架比较迷惑,尤其是各种jar包的引用、各种框架的配置、注解的使用等等。
最好的学习方法就是实践,于是下载了一个现成的DEMO,通过简单的修改先成功在自己电脑上跑起来,然后再逐个文件进行分析学习,最终才能从总体的高度上掌握框架的运行机制和配置方法,这样才能在实际运用中灵活配置,不会再局限于示例框架中。
SSM框架搭建流程
上面链接总结的流程很好,但是该流程没有加入DAO这一层,经过分析本项目源码,流程应该是这样的:
database–>Entity.java–>mapper.xml–>Mapper.java–>Dao.java–>DaoImpl.java–>Service.java–>ServiceImpl.java–>Controller.java–>login.jsp
根据需要建立数据库、数据表、字段;
根据表中字段建立实体类;
在Mapper中实现对数据库的增删改查操作;
设计DAO(data access object)数据操作对象接口;
设计Service,通过DAO获取对象,然后进行业务逻辑实现;
设计控制层Controller,用于从页面获取请求,调用Service处理并将处理结果返回给页面。
根据上面所列,下面就按照这个流程进行设计。
数据库设计
使用MySQL数据库:
建立数据库 DB_TEST
CREATE DATABASE DB_TEST;
1
建立用户表 T_USER
CREATE TABLE T_USER (
ID INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
USERNAME VARCHAR(16) NOT NULL,
PASSWORD VARCHAR(16) NOT NULL
);
1
2
3
4
5
插入一条用户信息
INSERT INTO T_USER (USERNAME,PASSWORD) VALUES ("admin","123");
1
建立USER实体类
public class User {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Mapper实现增删改查
UserMapper接口,定义通过用户名获取用户对象的方法
public interface UserMapper {
public User getUserByName(String username);
}
1
2
3
4
usermapper.xml,用于操作数据库,实现接口中的方法
select * from T_USER where username = #{username}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DAO 数据操作对象
DAO接口 UserDao.java
public interface UserDao {
//接口方法,通过用户名得到User对象
public User findUserByName(String username);
}
1
2
3
4
DAO接口实现 UserDaoImpl.java
@Repository对应数据访问层Bean
@Repository(value=”userDao”)注解是告诉Spring,让Spring创建一个名字叫“userDao”的UserDaoImpl实例。
当Service需要使用Spring创建的名为“userDao”的UserDaoImpl实例时, 就可以使用@Resource(name =”userDao”)注解告诉Spring,Spring把创建好的userDao注入给Service即可。
@Repository("userDao")
public class UserDaoImpl implements UserDao {
//注解引用Mapper类资源
@Resource(name = "userMapper")
private UserMapper userMapper;
/* 根据用户名查找用户对象 */
public User findUserByName(String username) {
//调用Mapper类从数据库中得到User对象
return userMapper.getUserByName(username);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
业务层 Service
业务层接口 UserService.java
public interface UserService {
// 通过用户名及密码核查用户登录
public User checkLogin(String username, String password);
}
1
2
3
4
业务层接口实现类 UserServiceImpl.java
@Service对应的是业务层Bean
这样当Action需要使用UserServiceImpl的的实例时,就可以由Spring创建好的”userService”注入给Action:在Action只需要声明一个名字叫“userService”的变量来接收由Spring注入的”userService”即可
@Service("userService")
public class UserServiceImpl implements UserService {
@Resource
private UserDao userDao;
/* 登陆验证 */
public User checkLogin(String username, String password) {
//根据用户名实例化用户对象
User user = userDao.findUserByName(username);
if (user != null && user.getPassword().equals(password)) {
return user;
}
return null;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
控制层 Controller
@Controller对应表现层的Bean,也就是Action
注意:如果@Controller不指定其value【@Controller】,则默认的bean名字为这个类的类名首字母小写,如果指定value【@Controller(value=”UserAction”)】或者【@Controller(“UserAction”)】,则使用value作为bean的名字。
@Scope(“prototype”)表示将Action的范围声明为原型
可以利用容器的scope=”prototype”来保证每一个请求有一个单独的Action来处理,避免struts中Action的线程安全问题。
spring 默认scope 是单例模式(scope=”singleton”),这样只会创建一个Action对象,每次访问都是同一Action对象,数据不安全。
struts2 是要求每次次访问都对应不同的Action,scope=”prototype” 可以保证当有请求的时候都创建一个Action对象
@RequestMapping(“/user”)
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
本项目中,该Controller类RequestMapping(”user”) 该Controller类的login方法RequestMapping(”login”) 所以登录页面中用户登录的 action=”/ssm/user/login”
@Controller
@Scope(value="prototype")
@RequestMapping("/user")
public class UserController {
@Resource
private UserService userService;
@RequestMapping(value="/login",method=RequestMethod.POST)
public String login(User user,Model model) throws Exception {
user=userService.checkLogin(user.getUsername(), user.getPassword());
if(user!=null){
model.addAttribute(user);
return "welcome";// 路径 WEB-INF/pages/welcome.jsp
}
return "fail";
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
页面 JSP
用户登录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DEMO工程中的所有配置文件
applicationContext.xml
这个文件是Spring公共配置文件,下面分块进行解析。
数据库配置文件database.properties的引入
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
classpath:database.properties
1
2
3
4
5
6
7
8
9
数据库连接池的配置
数据库连接池可以让服务器预先与数据库建立部分连接,存入内存中,以减少连接数据库的耗时操作。 此处定义使用C3P0连接池的数据源。
destroy-method="close">
${mysql.driver_class}
${mysql.connection.url}
${mysql.connection.username}
${mysql.connection.password}
30
2
2
10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
自动扫描配置
使用< context:component-scan>标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为bean
1
2
3
4
集成Mybatis
SqlSessionFactoryBean是一个工厂bean,它的作用就是解析配置(数据源、别名等)。
classpath:com/crm/mapper/*.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Mapper扫描配置
dao需要配置,如果数量大不适合一个个配置,需要使用mapper自动扫描来批量进行配置。
1
2
3
Mybatis事务管理配置
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
1
2
3
4
数据库配置文件database.properties
mysql.driver_class=com.mysql.jdbc.Driver
mysql.connection.url=jdbc:mysql://localhost:3306/DB_TEST
mysql.connection.username=root
mysql.connection.password=root
1
2
3
4
5
6
日志管理文件 log4j.properties
此处省略,入门阶段暂不考虑这么高端的日志用法。
Mybatis配置文件
通过使用别名,可以缩短类名的长度,但是只能在配置文件中使用。
1
2
3
4
5
6
web配置文件
此配置文件注释比较清楚,就不单独解析了。
crm
webAppRootKey
crm.root
log4jConfigLocation
classpath:log4j.properties
log4jRefreshInterval
60000
org.springframework.web.util.Log4jConfigListener
contextConfigLocation
classpath*:springContext/*Context.xml
org.springframework.web.context.ContextLoaderListener
org.springframework.web.util.IntrospectorCleanupListener
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/springmvc.xml
1
springmvc
/
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
characterEncodingFilter
/*
login.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
springmvc配置文件
之前扫描专门忽略了Controller,在此处扫描。
例如在Controller类中常有类似return welcome这样的语句
其实完整的应该是return WEB-INF/pages/welcome.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
至此基本内容已经全部完了,项目可以轻松跑起来了。
但是在学习过程中,发现这些框架真的是太强大了,不知道什么时候才能掌握更多,目前仅仅是会用最基本的皮毛而已。
笔耕不缀,必有收获;代码不停,早晚能行。
java实现登陆ssm框架_SSM框架搭建web服务器实现登录功能(Spring+SpringMVC+Mybatis)相关推荐
- java 快速构建ssm项目_SSM快速搭建
基本环境搭建 1. 创建Maven工程 2. 导入项目相关依赖的jar包 spring springmvc mybatis mysql junit spring-test lombok devtool ...
- java red5 点播_树莓派实用RED5搭建流媒体服务器实现点播功能
1,搭建流媒体服务器一直是自己想玩的一个东西,在高中玩workerman框架时有人就做过nginx通过rtmp模块搭建流媒体服务器,nginx的特性就是高并发,轻量级,一般大型企业都会采用这个服务器, ...
- 【Spring+SpringMVC+Mybatis】利用SSM整合,完成用户登录、注册、修改密码系统
近年来,由于Struts2+Hibernate3+Spring3,这套SSH框架,Struts2屡次爆出安全漏洞,Hibernate就只会推行它HQL那套而越来越远离SQL查询关系数据库的本质,所以S ...
- python: 网络编程及fastapi快速搭建web服务器
一.网络编程 1.网络编程三要素 ip地址.端口.TCP协议 ip地址 ip地址作用: 根据ip地址能够找到网络中的具体设备(电脑,打印机) ip地址概念: ip地址是网络设备的唯一标识 ip地址分类 ...
- SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一)
SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一) 1. 前言 最近在写毕设过程中,重新梳理了一遍SSM框架,特此记录一下. 附上源码:https://gitee ...
- Java语言开发在线音乐推荐网 音乐推荐系统 网易云音乐爬虫 基于用户、物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)框架 大数据、人工智能、机器学习项目开发
Java语言开发在线音乐推荐网 音乐推荐系统 网易云音乐爬虫 基于用户.物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)框架 大数据.人工智能.机器学习项目开发Mus ...
- Java语言开发在线美食推荐网 美食推荐系统 基于用户、物品的协同过滤推荐算法实现 SSM(Spring+SpringMVC+Mybatis框架 人工智能、大数据、机器学习项目开发
Java语言开发在线美食推荐网 美食推荐系统 基于用户.物品的协同过滤推荐算法实现 SSM(Spring+SpringMVC+Mybatis框架 人工智能.大数据.机器学习项目开发FoodRecomm ...
- 视频教程-spring+springMVC+mybatis(ssm框架)在线考试系统实战开发教程-Java
spring+springMVC+mybatis(ssm框架)在线考试系统实战开发教程 软件工程硕士毕业,目前就职于上海电信研究院,有三年Java开发经验,五年PHP开发经验. 李礼强 ¥368.00 ...
- 如何部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程
在学习cocos2dx手游开发的过程中,为了实现用户注册.用户登陆和世界排行榜这些模块,需要用到服务器来搭建平台.以前都是 在本地搭建服务器,在本科期间使用过IIS和Tomcat,感觉在本地搭建服务器 ...
最新文章
- FCN-TensorFlow完整代码Github
- Python和OpenCV环境配置
- Q_INIT_RESOURE
- Javascript基础回顾 之(二) 作用域
- 活动预告丨openGauss西安Meetup来啦!本周五见!
- 车标知识学习网页开发,与Flask通过base64展示二进制图片 #华为云·寻找黑马程序员#
- 5G网络什么时候普及,5G手机可以用4G的手机卡吗,5G和4G什么区别
- 【python】小游戏程序——弹跳小球
- 初入算法岗的切身经验之谈:干什么?怎么干?如何学?
- 图像处理-图像边缘处理
- 奥西450的服务器系统,奥西TDS450
- 三目运算符 c语言求最小值,三目运算符
- 【转】ARM GIC中断系列(八):gicv3架构-波形为例、系列总结
- Echarts绘制地图,且可以下钻到省区
- 相机光学(十二)——面阵相机与线阵相机
- Android-蓝牙通信
- dmx计算机,DMX512协议是什么 DMX512数字灯光控制系统介绍
- 增加字段sql,SQL语句增加列、修改列、删除列
- Gulp.js—比Grunt更易用的前端构建工具-前端自动化
- PBOC MAC 计算算法 实现
热门文章
- mimikatz - Golden Ticket
- 餐饮后厨计算机应用,派勤助力智能厨房显示系统(KDS),革新餐饮后厨模式
- 软件测试dg,测试DG环境
- ssb门限_单边带(SSB),single sideband(SSB),音标,读音,翻译,英文例句,英语词典
- BQ40Z50 配置与学习方法
- ospf重要内容整理
- 基于Unity引擎的2D像素风Roguelike地下城游戏模块之————背包系统
- IDEA @Autowired报黄报红解决
- 在寻求正确的项目管理工具时:Jira,Trello,Asana,Redmine
- 【自动控制原理】滞后补偿器_Lag Compensator-笔记