一条线 理解SSH登录前因后果

admin7个月前笔记59

SSH流程图

根据流程图我们可以相应的看出我们的程序从最初的浏览器到最后的页面回显的过程。
image.png

Hibernate层

主要负责映射文件和Action和Service的注入,负责后台服务3层之间调用**

JSP

相当于我们asp.net 中的html页面是一样,如果跟我们html页面大同一样的话,那么他也是可以可以写ajax的,并且可以触发我们的事件,通过他触发事件是通过action属性来触发,在这个属性里面会有一个地址,是专门用于与我们后台建立连接

<form id="loginForm" action="${ pageContext.request.contextPath }/user_login.action"  method="post" novalidate="novalidate">
Struts配置

根据Strust的配置我们可以找到我们要到方法,前台界面找后台提供的方法,根据name=login,User_*表示我们所有以user开头的地址都放到了userAction类里面。

result的意思是返回的结果,我们既然可以找到userAction类,那么当执行完userAction等一些列的功能之后我们肯定要返回结果给我的前台页面,为什么result后面会有一个name的属性呢??大家都写过3层的代码我们通过想要后台给我传过来一个参数,都是方法给予的,没有是类的把,我们只能说类里面包含了方法
所以在我们userAction类中我们有很多的方法,而name=login的方法结果我们可以跳转到/WEB-INF/jsp/login.jsp这个路径下面

<action name="user_*" class="userAction" method="{1}">
<result name="login">/WEB-INF/jsp/login.jsp</result>
Action

Action是我们行动层,这个是我跟他起的名字,为什么这么说呢。因为jsp触发事件之后跑到后台的第一个地方就是Action。来执行相应的方法,他一般是用ActionSupport,并且引入ModelDriven。来使用模型驱动对象,其实就是我们的实体,其实Action可以看做是我们3层中的u层,然后Action调用service

根据我们的Struts我们可以找到我们的存放在userAction类中的login方法,在方法中可以看出来有一个是return,他就是通过这个返回到了我们Struts中的result属性中,然后找到了我们的jsp页面显示

public String login(){
      User existUser = userService.login(user);      //      判断返回会来的数据是否为空
      if(existUser == null){          this.addActionError("登录失败:用户名或者密码或用户没有激活");          return LOGIN;
      }else{        //保存到共享变量中  
         ServletActionContext.getRequest().getSession().setAttribute("existUser", existUser);        // 页面跳转
         return "loginSuccess";
      }   
  }
Service

主要实现的事物还有就是调用Dao,其实在这里实现了解耦合的作用,也减轻了Action的工作量,根据代码看出只是简单的调用了dao持久层的方法

/**
    *  登录功能
    */ 

    //用户登录的方法
    public User login(User user) {        return userDao.login(user);
}
Dao

这个是持久化层,其实就是与进行数据库语句,进行增删改查,一般都使用的是getHibernateTemplate.XX来实现,实现过程是传入执行mysql的语句和参数就可以了,根究代码看出我们实现的查找方法,并且改变我们的状态值,如果成功则返回我们的用户名

 /**
 *  登录功能
 */ 
   public  User login(User user) {
      String hql = "from User where username = ? and password = ? and state = ?";
      List<User> list = this.getHibernateTemplate().find(hql,user.getUsername(),user.getPassword(),1);        if(list != null && list.size() > 0){            return list.get(0);
        }        return null;
   }
Vo

vo他就是实体层,其实与我们MVC中EF映射是一样的,其实在vo里面我们有一个是实体层,有一个xml,我们通过xml来进行实体的映射

<hibernate-mapping>--表示根元素,包含一些属性 <!-- 找到我们的包User,然后映射的表是user表 -->
    <class name="cn.itcast.shop.user.vo.User" table="user">
   <!--id主键,用native  -->
     <id name="uid">
         <generator class="native"/>
     </id>
     <!-- 字段属性进行映射,实体与数据库的字段要保持一直性,否则报错 -->
     <property name="username"/>
     <property name="password"/>
     <property name="name"/>
     <property name="email"/>
     <property name="phone"/>
     <property name="addr"/>
     <property name="state"/>
     <property name="code"/>
    </class>   
 </hibernate-mapping>


相关文章

前后端分离的好处有哪些?

前后端分离的好处有哪些?

前后端分离是目前一种非常流行的开发模式,它使项目的分工更加明确,后端负责处理、存储数据;前端负责显示数据.前端和后端开发人员通过接口进行数据的交换。一、什么是前后端分离?前后端分离实质上是前后端代码分...

简单介绍Redis中HyperLogLog的使用详情

前言HyperLogLog ,基数统计;那什么是基数?比如有两个数组数组A = [1,2,3,4,5];数组B = [3,4,5,6,7];这时候基数就是 [1,2,3,4,5,6,7],总共有7个数...

AI 绘画基础 - 细数 Stable Diffusion 中的各种常用模型

AI 绘画基础 - 细数 Stable Diffusion 中的各种常用模型

AI 绘画新手魔导士在刚开始玩 Stable Diffusion 时总会遇到各种新的概念,让人困惑,其中就包括各种模型和他们之间的关系。safetensors在了解各种模型之前,有必须先了解下 saf...

mysql/mariadb:数据库用户管理语句

mysql/mariadb:数据库用户管理语句

在了解mysql的用户管理语句之前,先来了解一下mysql的用户账号格式,如下:username@host上述格式表示,username对应的用户能够通过哪个host登录mysql。host:此mys...

Token、CAS、JWT和OAuth 2.0认证系统认证中心系统设计对比与实践总结

Token、CAS、JWT和OAuth 2.0认证系统认证中心系统设计对比与实践总结

在现代应用开发中,身份认证是一个关键的问题。为了解决身份认证的需求,开发人员可以选择不同的认证系统,如Token、CAS(Central Authentication Service)和JWT(JSO...

uptime 命令介绍

uptime 命令介绍

Linux uptime 命令望名生义,uptime 命令告诉你系统启动up了(运行了)多长时间。这是语法:uptime [options]这个工具的 man 页是这么说的:uptime会在...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。