SSH对比SSM优劣分析

部分内容源于他人帖子,因为都是以前收集的,现在懒得去找原文链接了,望见谅!

Struts2框架执行步骤(Struts2使用Filter嵌入):

工作原理:

1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求

2、这个请求经过过滤器(Filter)后调用FilterDispatcher,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action

4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy

5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类

6、ActionProxy创建一个ActionInvocation的实例。

7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。

9、将处理结果返回给客户端

 

工作流程:

1、客户端浏览器发出HTTP请求.

2、根据web.xml配置,该请求被FilterDispatcher接收

3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton

4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。

5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面

6、返回HTTP响应到客户端浏览器

 

优点:

  1. 项目开源,使用及扩展方便 - 天生优势;
  2. 提供Exception处理机制;
  3. Result 方式的页面导航,通过 Result 标签很方便的实现重定向和页面跳转;
  4. 通过简单、集中的配置来调度业务类,使得配置和修改都非常容易;
  5. 提供简单、统一的表达式语言来访问所有可供访问的数据;
  6. 提供标准、强大的验证框架和国际化框架;
  7. 提供强大的、可以有效减少页面代码的标签;
  8. 提供良好的Ajax支持;
  9. 拥有简单的插件,只需要放入响应的 jar 包,任何人都可以扩展 Struts2 框架,比如自定义拦截器、自定义结果类型、自定义标签等,为 Struts2 定制需要的功能,不需要什么特殊的配置,并且可以发布给其他人使用。

  10. 拥有智能的默认设置,不需要另外进行繁琐的设置。使用默认设置就可以完成大多数项目程序开发所需的功能

 

SpringMVC优点

    1.它是基于组件技术的全部的应用对象,无论控制器和视图,还是业务对象之类的都是java组件,并且和Spring提供的其他基础结构紧密集成

    2.不依赖于Servlet API(目标虽是如此,但是在实现的时候确实是依赖于Servlet的)

    3.可以任意使用各种视图技术,而不仅仅局限于JSP

    4.支持各种请求资源的映射策略

    5.易于扩展

 

SpringMVC框架执行步骤(SpringMVC使用Servlet嵌入):

简单描述SpringMVC,不含各种名词,适合回答的时候对实际原理不清晰和英语差的iphone xr 64G穷人版:

(1)客户端通过url发送请求

(2-3)核心控制器Dispatcher Servlet接收到请求,通过系统或自定义的映射器配置找到对应的handler,并将url映射的控制器controller返回给核心控制器。

(4)通过核心控制器找到系统或默认的适配器

(5-7)由找到的适配器,调用实现对应接口的处理器,并将结果返回给适配器,结果中包含数据模型和视图对象,再由适配器返回给核心控制器

(8-9)核心控制器将获取的数据和视图结合的对象传递给视图解析器,获取解析得到的结果,并由视图解析器响应给核心控制器

(10)核心控制器将结果返回给客户端

 

下面这个是iphone xs max 256G版土豪版,有实力的可以回答这个:

1、客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交给DispatcherServlet.

2、DipatcherServlet接收到这个请求之后将根据请求的信息(包括URL、Http方法、请求报文头和请求参数Cookie等)以及HandlerMapping的配置找到处理请求的处理器(Handler)。

3-4、DispatcherServlet根据HandlerMapping找到对应的Handler,将处理权交给Handler(Handler将具体的处理进行封装),再由具体的HandlerAdapter对Handler进行具体的调用。

5、Handler对数据处理完成以后将返回一个ModelAndView()对象给DispatcherServlet。

6、Handler返回的ModelAndView()只是一个逻辑视图并不是一个正式的视图,DispatcherSevlet通过ViewResolver将逻辑视图转化为真正的视图View。

7、Dispatcher通过model解析出ModelAndView()中的参数进行解析最终展现出完整的view并返回给客户端。

组件名词解释:

1.DispatcherServlet:前端控制器,等同于以前的Controller, 是整个流程的中心, 负责调用其他组件

2.HandlerMapping: 处理器映射器,负责根据请求找到Handler(处理器),springMVC中可以根据不同的映射器实现不同映射,比如 xml配置方式,注解方式,接口方式等

3.Handler:后端控制器,在前端控制器的控制下对具体的用户请求进行处理,所以一般情况下都需要开发者进行根据需求进行开发。

4.HandlerAdapter:处理器适配器,处理Handler,可以对多种类型的处理器进行执行,这是对适配器模式的应用体现。

5.ViewResolver : 视图解析器,负责将处理结果生成view视图、开发者可以根据需要开发view

 

Hibernate 和 MyBatis 两种ORM框架对比(jpa、druid也是ORM框架

1)MyBatis可以进行更为细致的SQL优化,可以减少查询字段。

2)MyBatis容易掌握,而Hibernate门槛较高。

3)Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。

4)Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。

5)Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。

6)Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳,更新操作不能指定刷新指定记录,会清空整个表,但是也可以使用第三方缓存。

7)Hibernate 封装性好,屏蔽了数据库差异,自动生成SQL语句,应对数据库变化能力较弱,SQL语句优化困难。

8)MyBatis仅实现了SQL语句和对象的映射,需要针对具体的数据库写SQL语句,应对数据库变化能力较强,SQL语句优化较为方便。

 

总结SSH对比SSM

SSM和SSH不同主要在MVC实现方式,以及ORM持久化方面不同(Hibernate与Mybatis)。

SSM越来越轻量级配置,将注解开发发挥到极致,且ORM实现更加灵活,SQL优化更简便;

而SSH较注重配置开发,其中的Hibernate对JDBC的完整封装更面向对象,对增删改查的数据维护更自动化,但SQL优化方面较弱,且入门门槛稍高。

 

你可能感兴趣的:(java面试必懂)