一、 前后端数据交互
通过前端页面提交数据并指定处理数据的controller,后端在controller层中编写处理前端提交的数据的方法。
(1)创建一个UserController.java,里面包含一个处理前端页面提交的用户名和密码的方法dealLogin(),在此方法中,数据通过HttpServletRequest对象传入方法,方法对数据处理完后返回State类型信息即返回用户的状态。其中@RequestBody注解作用是将返回的State类型的状态转换成Json数据类型。
(2)通过request.getParameter()获取前端页面传入的用户名和密码,并创建一个新的User对象,将用户名和密码赋值给新对象。
(3)判断请求登录的用户是否存在即是否已经注册
通过调用service层的dealLogin()方法来判断用户是否已存在
其中service层的dealLogin方法是借助一个Dao层通过传回的用户名到数据库中查找其对应的密码,并与前端页面传回的密码比较,若相同则此用户已存在,返回true。
(4)记录此次登录用户的状态
创建一个State对象state,设置其代号为1,并记录“exit”字符串,表示当前登录的用户已存在。
二、 SSM框架
1、 ssm框架中各层级间的作用关系
View层(springMVC):
View层 此层与控制层结合比较紧密,需要二者结合起来协同工发。View层主要负责前台jsp页面的表示
Controller层(Handler层):
(1)负责具体的业务模块流程的控制
(2)Controller层通过要调用Service层的接口来控制业务流程,控制的配置也在pring配置文件里面。
业务层(Spring):Service层
(1)负责业务模块的逻辑应用设计
(2)通过对Spring配置文件中配置其实现的关联,完成此步工作,我们就可以通过调用Service的接口来进行业务处理
(3)最后通过调用DAO层已定义的接口,去实现Service具体的实现类
以UserServiceImpl为例,通过UserDao的对象调用DAO层的findByUserName()方法。
持久层(Mybatis):Dao层
(1) mybatis是对jdbc的封装,它让数据库底层操作变的透明。
(2) mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。
(1) 负责与数据库进行交互设计,用来处理数据的持久化操作
(2) DAO层的实际首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,就可在其他模块中调用此接口来进行数据业务的处理,而不用关心接口的具体实现类是哪个类。有关数据库连接的参数都在spring的配置文件中进行配置。
以UserDao为例,首先创建接口如下:
在UserMapper.xml配置文件中定义接口的实现类,解决user表的基本增删改查
视图层:
(1) 负责前台html页面的展示
2、 各层间的联系:
(1)本来Controller层与View层是可以放在.jsp文件里一起开发的,但是为了降低代码的复杂度,提高其可维护性,将其分为了这两层,这也体现了MVC框架的特性,即结构清晰,耦合度低。
(2)Service层是建立在DAO层之上的,建立了DAO层后才可以建立Service层,而Service层又是在Controller层之下的,因而Service层应该既调用DAO层的接口,又要提供接口给Controller层的类来进行调用,它刚好处于一个中间层的位置。每个模型都有一个Service接口,每个接口分别封装各自的业务处理方法。
3、 SSM架构运行流程
(1)jsp(view)发送请求
(2)通过核心控制器DispatcherServlet调用请求解析器:HandlerMapping对请求进行解析,通过映射关系匹配到Controller层
(3)在控制层调用业务逻辑层(service),数据持久层(DAO)返回控制层,请求完成获取一个结果,设置一个要跳转的视图,(ModelAndView装载并传输数据,设置视图)
(4)核心控制器调用视图解析器:ViewResolver解析视图,匹配相应的页面实现页面跳转
以学生综合评价系统中用户登录为例:
(1)Login.html发送请求
(2)通过核心控制器DispatcherServlet调用请求解析器:HandlerMapping对请求进行解析,通过映射关系匹配到Controller层,即UserContorller
(3)UserController中的dealLogin()方法中,通过request.getParameter()获取数据后,通过UserService对象调用service层的dealLogin()方法,在service层中通过UserDao对象调用DAO层的findByUserName(user)方法,然后在数据库中通过用户名查找用户,获得用户的密码,若从数据库中获得的用户密码与前台传入的密码相同则返回true。