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

Crq
Crq
Crq
553
文章
0
评论
2024年9月27日05:06:53
评论
28 2412字阅读8分2秒
SSH流程图

根据流程图我们可以相应的看出我们的程序从最初的浏览器到最后的页面回显的过程,有什么不明白的地方请留言提示。

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>
总结

通过这几天的学习,对于ssh的一条线掌控的差不多了,如果有问题的可以随时跟我联系

weinxin
我的微信
这是我的微信扫一扫
Crq
  • 本文由 发表于 2024年9月27日05:06:53
  • 转载请注明:https://www.cncrq.com/10916.html
运维稳定性问题的关键–可用性 Linux教程

运维稳定性问题的关键–可用性

复盘更多的是基于事后的总结与提升。那么我们如何发现、测量稳定性问题呢?那么我们就需要请出今天的主角了——可用性。 什么是可用性? 可用性作为评价业务稳定性的一个重要指标,它可以通过数据量化、建立基线的...
如何在Linux系统上添加新的磁盘 Linux教程

如何在Linux系统上添加新的磁盘

作为一个系统管理员,我们会有这样的一些需求:作为升级服务器容量的一部分,或者有时出现磁盘故障时更换磁盘,我们需要将新的硬盘配置到现有服务器。 在这篇文章中,我会向你逐步介绍添加新硬...
Ubuntu终端常用快捷键 Linux教程

Ubuntu终端常用快捷键

Ubuntu是一个非常好用的linux开发版系统,本文收集整理了一些Ubuntu常用的一些快捷键,Ubuntu中的许多操作在终端(Terminal)中十分的快捷,记住一些快捷键的操...
详解命令-GCC Linux教程

详解命令-GCC

gcc命令使用GNU推出的基于C/C++的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点。现在很多程序员都应用GCC,怎样才能更好的应用GCC...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: