各大框架运行原理

各框架运行原理

Struts 在启动时通过前端总控制器ActionServlet加载struts-config.xml并进行解析,当用户在jsp页面发送请求被struts1的核心控制器ActionServlet接收,ActionServlet在用户请求时将请求参数放到对应的ActionForm对象中的成员变量中,然后ActionServlet则会根据struts-config.xml中的映射关系找到相应的Action中的方法,将对应的ActionForm一并传给这个Action中的方法里,然后执行相应的业务逻辑操作,最后就根据ActionMapping的findforward方法返回一个ActionForward,之后在struts-config.xml中找到与之对应的forward标签,根据它的配置路径找到对应的jsp页面

Struts2 当Servlet容器(Tomcat)启动的时候加载web.xml文件,web.xml里配置着Struts2的核心控制器FilterDispatcher/StrutsPreparedAndExecuteFilter。核心控制器被加载。当用户向服务器发送请求时,核心控制器会根据请求的后缀名进行拦截,根据struts.xml配置文件获取需要访问哪个Action中的某个方法。然后正常处理业务,业务处理完成后向核心控制器发送一个字符串,根据字符串的值到Struts.xml中寻找相对应的标签中的标签,根据name属性匹配字符串,进行转发或者重定向。最终跳转到指定的JSP页面。

接收值的方式:属性驱动、模型驱动
将需要接收的数据定义为成员变量,并提供set/get方法,Struts2中的拦截器帮助我们去接收数据和传递数据。

Spring IOC:控制反转(DI依赖注入),将以前由我们自己手动创建对象的过程交给了Spring,Spring帮助我们生产对象、管理对象、管理对象和对象之间的依赖关系。降低了代码的耦合度,方便我们后期对项目做维护。

三种注入方式:
1.setter注入
2.构造器注入
3.属性注入(注解)
@Autowired:默认根据类型进行匹配
@Resource:首先根据名称进行匹配,再根据类型进行匹配

自动装配autowire属性

AOP:面向切面(方便)编程,可以为某一类对象 进行监督和控制,也就是在调用这类对象的具体方法的前后去调用你指定的功能模块,从而达到对一个模块扩充的功能。可以通过注解或者XML文档进行实现。

开发切面,切面里面写的功能模块,叫做通知。
前置通知@Before、后置通知@AfterReturning、最终通知@After、异常通知@AfterThrowing、环绕通知@Around

后置通知和最终通知的区别:
后置通知只有在方法正常执行后才会被调用,如果方法执行过程中报错,则不会执行后置通知,而是执行异常通知。
无论方法执行有没有报错,都会执行最终通知

AOP最重要的一个应用:Spring的事务管理器。

Spring的事务管理器就是一个切面,切面中的功能不再是计算时间、输出日志,而是管理事务。因为Spring的事务管理器要对一组数据库操作做事务控制。所以事务管理器需要切入到一个可以包含所有Dao操作的方法中,即Service方法。

Spring事务管理器的特点:所有的事务,要么同时提交,要么同时回滚。只要有一次失误失败,所有事务一起回滚。
JDBC事务的特点:每执行完一次数据库操作就提交一次事务。
SpringMVC SpringMVC是Spring在Web层的延伸,是由Spring延伸出的一个优秀的控制层框架。首先,Tomcat启动时加载SpringMVC的核心控制器DispatcherServlet。当用户向服务器发送请求时,核心控制器将请求交给HandlerMapping做解析,HandlerMapper将要访问的Controller返回给核心控制器。核心控制器将用户的请求发送给指定的Controller做业务处理。当业务处理完成后,SpringMVC将需要传递的数据和跳转的视图名称封装为一个ModelAndView,将ModelAndView对象发送给核心控制器。核心控制器从ModelAndView对象中取出视图名称,交给视图解析器做解析,视图解析器中配置着页面路径的前缀和后缀,解析之后将要跳转的页面反馈给核心控制器。最终核心控制器将数据发送给页面通过Response对象响应给用户。

接收值的方式:属性驱动、模型驱动
接收:将需要接受的数据定义在参数列表中
传值:获取HttpServletRequest作用域,将值使用setAttribute方法存入作用域
Mybatis MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis在运行时,首先加载配置文件,获取一个输入流,SqlSessionFactoryBuilder(类)根据获取到的输入流来创建SqlSessionFactory(接口),再根据SqlSessionFactory来创建SqlSession(接口),使用SqlSession执行SQL语句。

为什么SSM框架可以通过Dao的接口调用到Mapper映射文件中的SQL语句?
1.Dao接口中的抽象方法的方法名必须和映射文件中SQL语句的id相等
2.Mapper映射文件的namespace的值必须等于Dao接口的全限定名

Hibernate 首先,由Configuration使用Dom4j去加载主配置文件hibernate.cfg.xml。根据配置文件信息创建SessionFactory对象,SessionFactory是线程安全的。再由SessionFactory去创建Session对象,Session对象相当于JDBC中的Connection对象,session对象是线程不安全的。再由Session对象去执行各种数据库的操作。

Hibernate中的三种状态:
临时状态、持久化状态、游离状态

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

战神丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值