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

save_snippets.png

建立用户表 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

save_snippets.png

插入一条用户信息

INSERT INTO T_USER (USERNAME,PASSWORD) VALUES ("admin","123");

1

save_snippets_01.png

建立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

save_snippets.png

Mapper实现增删改查

UserMapper接口,定义通过用户名获取用户对象的方法

public interface UserMapper {

public User getUserByName(String username);

}

1

2

3

4

save_snippets.png

usermapper.xml,用于操作数据库,实现接口中的方法

select * from T_USER where username = #{username}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

save_snippets.png

DAO 数据操作对象

DAO接口  UserDao.java

public interface UserDao {

//接口方法,通过用户名得到User对象

public User findUserByName(String username);

}

1

2

3

4

save_snippets.png

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

save_snippets.png

业务层 Service

业务层接口 UserService.java

public interface UserService {

// 通过用户名及密码核查用户登录

public User checkLogin(String username, String password);

}

1

2

3

4

save_snippets.png

业务层接口实现类 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

save_snippets.png

控制层 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

save_snippets.png

页面 JSP

用户登录

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

save_snippets.png

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

save_snippets.png

数据库连接池的配置

数据库连接池可以让服务器预先与数据库建立部分连接,存入内存中,以减少连接数据库的耗时操作。   此处定义使用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

save_snippets.png

自动扫描配置

使用< context:component-scan>标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为bean

1

2

3

4

save_snippets.png

集成Mybatis

SqlSessionFactoryBean是一个工厂bean,它的作用就是解析配置(数据源、别名等)。

classpath:com/crm/mapper/*.xml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

save_snippets.png

Mapper扫描配置

dao需要配置,如果数量大不适合一个个配置,需要使用mapper自动扫描来批量进行配置。

1

2

3

save_snippets.png

Mybatis事务管理配置

class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

1

2

3

4

save_snippets.png

数据库配置文件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

save_snippets.png

日志管理文件 log4j.properties

此处省略,入门阶段暂不考虑这么高端的日志用法。

Mybatis配置文件

通过使用别名,可以缩短类名的长度,但是只能在配置文件中使用。

1

2

3

4

5

6

save_snippets.png

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

save_snippets.png

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

save_snippets.png

至此基本内容已经全部完了,项目可以轻松跑起来了。

但是在学习过程中,发现这些框架真的是太强大了,不知道什么时候才能掌握更多,目前仅仅是会用最基本的皮毛而已。

笔耕不缀,必有收获;代码不停,早晚能行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值