学习Spring springmvc hibernate Struts遇到的一些知识点归纳

1.    谈一下MVC设计模式

       Model(模型):数据模型,提供要展示的数据,包含数据和行为,可以认为是领域模型或者是JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据)和服务层(行为),也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。

       View(视图):负责进行模型的展示,一般就是我们见到的用户界面,客户想要看到的东西。

       Controllor(控制层):接收用户请求,委托给模型进行处理(状态进行改变),处理完毕后把返回的模型数据返回给视图,由视图负责演示,也就是说控制器做了个调度员的工作。

2.    请简述Struts2框架下的开发流程(从客户端请求发起到最后返回结果页面,这期间分别经历哪些阶段,这些阶段分别做什么工作)。

       

      Struts2的核心是拦截器,客户端发出请求后会交给Struts2的拦截器进行处理,它的内部定义了许多拦截器依次拦截信息;通 过拦截器栈后将封装好的参数信息按照struts.xml的配置调用对应Action类的Set方法;

       Action类执行指定的方法,返回字符串类型,与struts.xml文件中的指定action标签中的result标签进行比对,找到对应的视图:

           

3.简述Struts,它有什么优点?

         Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点。使开发者能更深入的了解其内部实现机制。
除此之外,Struts的优点主要集中体现在两个方面:Taglib和页面导航。Taglib是Struts的标记库,灵活动用,能大大提高开发效率。另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。
关于页面导航,我认为那将是今后的一个发展方向,事实上,这样做,使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处,尤其是当另一批开发者接手这个项目时这种优势体现的更加明显。

4.springMVC的工作原理?(从客户端发起请求到最后返回结果页面,这期间分别经历哪些阶段,这些阶段分别做什么工作)。

           

           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()只是一个逻辑视图并不是一个正式的视图,DispatcherServlet通过ViewResolver将逻辑视图转化为真正的视图view

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

5.    SpringMVC的优点?
   (1)Spring MVC拥有强大的灵活性、非入侵性和可配置性。 
   (2)Spring MVC 提供了一个前端控制器DispatcherServlet,开发者无须额外开发控制器对象。 
   (3)Spring MVC分工明确,包含控制器、验证器、命令对象、模型对象、处理程序映射视图解析器,等等,每一个功能实现由一个专门的对象负责完成。 
   (4)Spring MVC可以自动绑定用户输入,并正确地转换数据类型。例如:Spring MVC能自动解析字符串,并将其设置为模型的int或float类型的属性。 
   (5)Spring MVC使用一个名称/值的Map对象实现更加灵活的模型数据传输。 
   (6)Spring MVC内置了常见的校验器,可以校验用户输入,如果校验不通过,则重定向回输入表单。输入校验是可选的,并且支持编程方式及声明方式。 
   (7)Spring MVC支持国际化,支持根据用户区域显示多国语言,并且国际化的配置非常简单。 
   (8)Spring MVC支持多种视图技术,最常见的有JSP技术以及其他技术,包括Velocity和FreeMarker。

   (9)Spring 提供了一个简单而强大的JSP标签库,支持数据绑定功能,使得编写jsp页面更加容易。

6.    Hibernate的工作原理是什么?为什么要使用Hibernate?

Hibernate工作原理

    ①读取并解析hibernate.cfg.xml配置文件;

    ②由hibernate.cfg.xml中的<mapping resource="com/xx/user.hbm.xml">读取并解析映射信息;

    ③.通过SessionFactory sf = config.buildSessionFactory();创建SessionFactory

    ④Session session = sf.openSession();//打开Sesssion

    ⑤Transaction tx = session.beginTransaction();//创建并启动事务Transaction

    ⑥persistent operate操作数据,持久化操作

    ⑦tx.commit();//提交事务

    ⑧关闭Session

    ⑨关闭sessionFactory

使用Hibernate的原因如下:

   ① 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

   ②HIbernate是基于JDBC的主流持久化框架,是一个优秀的对象关系映射实现,它在很大程度上简化了DAO层的编码工作;

   ③Hibernate使用java反射机制,而不是字节码增强程序来实现透明性;

   ④Hibernate性能非常好,因为它是一个轻量级框架,映射的灵活性很出色,它支持各种关系数据库,从一对一到多对多的各种复杂关系

7.    Hibernate关联关系、CASCADE,LAZY加载,简述它们的使用场景?

         延迟加载:当Hibernate从数据库中加载某个对象时,不加载关联的对象,而只是生成了代理对象,获取使用session中的load的方法(在没有改变lazy属性为false的情况下)获取到的也是代理对象,所以在上面这几种场景下就是延迟加载。

          lazy加载使用场景:程序加载一个持久化对象的目的仅仅是为了获得他的引用,可以采用延迟加载。

         Cascade,译为“级联”,表明对象的级联关系,如TUser 的Cascade设为all,就表明如果发生对user对象的操作,需要对user所关联的对象也进行同样的操作。如对user对象执行save操作,则必须对user对象相关联的address也执行save操作。

           关联关系映射:一对多 多对一 多对多。

8.    说说你对Hibernate及JDBC的看法?

  Hibernate的底层还是jdbc,只不过额外封装了很多东西而已。

   1、内存消耗:JDBC的架构省内存的,Hibernate的架构次之
   2、运行效率:
         如果JDBC的代码写的非常优化,那么JDBC架构运行效率最高,但是实际项目中,这一点几乎做不到,这需要程序员非常精通JDBC,运用Batch语
句,调整PreapredStatement的Batch Size和Fetch
Size等参数,以及在必要的情况下采用结果集cache等等。而一般情况下程序员是做不到这一点的。因此Hibernate架构表现出最快的运行效率。

    3、开发效率:在有JBuilder的支持下以及简单的项目JDBC比Hibernate高。但是在大的项目,特别是持久层关系映射很复杂的情况下,Hibernate效率高的惊人,JDBC次之

9.    Hibernate中的save update和saveOrUpdate的区别?

      save()执行保存操作,对一个新的刚new出来的对象进行保存,数据库中没有这个对象。

      update()对一个已经存在的托管对象进行更新,数据中有这个对象。

      saveOrUpdate()这个方法是更新或者插入,有主键就执行更新,如果没有主键就执行插入。

                  区别:对于一个从托管状态到瞬态的对象(对于一个从数据库中取出来又被删除的对象),这个对象本身是有主键的,但是因为被删除了,所以这个时候因为数据库中已经没有了这条记录了。不过它还有主键存在,所以这个时候不可以使用update()或者是saveOrUpdate(),因为update()方法是认为数据库中肯定有这条记录的,而saveOrUpdate的执行过程就是先查看这个对象是不是有主键,有主键那么就执行update()方法,没有主键就执行save()方法,因此结果跟调用了update()方法的效果是一样的,结果就会出错,因为这个对象已经被删除了,数据库中已经没有这条记录了,只是它还有主键而已(仅仅是存在于内存中),因此这个时候要执行的是save()方法。

10.    Hibernate中有哪几种查询数据的方式。

              hql  sql  条件查询

Hql: 具体分类 1、 属性查询 2、 参数查询、命名参数查询 3、 关联查询 4、 分页查询 5、 统计函数

HQL和SQL的区别: HQL是面向对象查询操作的,SQL是结构化查询语言 是面向数据库表结构的

11.     Spring有哪些特点?为什么要使用Spring?

概念:

1. spring是开源的轻量级框架

2 spring核心主要两部分:
(1)aop:面向切面编程,扩展功能不是修改源代码实现
(2)ioc:控制反转,
- 比如有一个类,在类里面有方法(不是静态的方法),调用类里面的方法,创建类的对象,使用对象调用方法,创建类对象的过程,需要new出来对象
- 把对象的创建不是通过new方式实现,而是交给spring配置创建类对象

好处:

(1)Spring能有效地组织你的中间层对象。
(2)Spring能消除在许多工程中常见的对Singleton的过多使用。
(3)Spring能消除各种各样自定义格式的属性文件的需要,使配置信息一元化。
(4)Spring能够帮助我们真正意义上实现针对接口编程。
(5)在Spring应用中的大多数业务对象没有依赖于Spring。
(6)使用Spring构建的应用程序易于单元测试
(7)Spring支持JDBC和O/R Mapping产品(Hibernate)
(8)MVC Web框架,提供一种清晰,无侵略性的MVC实现方式。
(9)JNDI抽象层,便于改变实现细节,可以方便地在远程服务和本地服务间切换。
(10)简化访问数据库时的例外处理。
(11)Spring能使用AOP提供声明性事务管理,可以不直接操作JTA也能够对事务进行管理。
(12)提供了JavaMail或其他邮件系统的支持。

12.     Spring依赖的注入有哪几种方式?

        三种:构造方法注入,setter注入,基于注解的注入。

13.     SPRING IOC的主要作用是什么?主要应用场景?

           spring IOC (反转控制),正常情况下我们使用一个对象时都是需要new Object() 的。而ioc是把需要使用的对象提前创建好,放到spring的容器里面。需要使用的时候直接使用就行,而且可以设置单例或多例,非常灵活。例如我们在service层想调用另外一个service的方法,不需要去new了,直接把它交给spring管理,然后用注解的方式引入就能使用.

 本回答由提问者推荐

14.     SPRING AOP  主要作用?主要应用场景?说说对他们的看法?

     AOP:aspect oriented programming 被称为面向方面编程,面向方面编程主要关注的是共通部分的处理,把共通部分的逻辑封装成一个方面组件,该组件根据自己的需要可以切入到某一批目标对象方法中,从而达到方面组件和目标对象之间的解耦。这是一个独立的概念,spring只是运用了了这个概念而已,你当然也可以运用这个概念实现其他的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值