ssh常见知识点

 

1.简述Struct2基本流程

    引入问题:

        struts核心过滤器拦截的是*.action请求

        WebRoot

            |-- login.jsp

                .. 用到struts标签

        直接访问:login.jsp,   会不会有问题?

            会有问题; 如果用struts的功能,必须经过核心过滤器!

           

 

    过滤器: init()/doFilter()/destroy()

        在tomcat启动时候实例化,且调用init()方法

        访问时候调用doFilter方法

    

    ----------------

    Struts流程:

        一、 Tomcat服务器启动

            1. 服务器启动,加载自身config/web.xml, 以及webapps下所有项目的web.xml

            2. 创建过滤器对象

                  创建struts核心过滤器实例

            3. 初始化

                  执行过滤器init()方法

                  ---> 加载默认Properties配置文件

                  ---> 加载xml

                    struts-default.xml,     【所有需要创建的bean、默认的包(结果类型、所有拦截器、默认的拦截器栈)】

                    struts-plugin.xml,      【插件配置】

                    struts.xml              【自定义配置】

 

       二、 用户访问

            用户每次访问,执行doFilter()方法:

                1. 每次访问struts,都会创建ActionContext对象    【 prepare.createActionContext(request, response);】

                    1.1 然后,创建ValuStack值栈对象

                       ValueStack 结构

                            |-- root   根元素数据

                            |-- context 非根元素(map)

                    1.2 给ValustStack封装数据, 所有的map数据都放入值栈

                        --> 把代表request/session/application的map、以及HttpServletRequest等对象都放入值栈中

                    1.3 把值栈的map数据,拷贝一份给ActionContext!

                        所以,我们可以通过ActionContext获取struts运行的数据!

               2. ActionMapping

                    struts把请求的参数(路径等信息), 封装为一个ActionMapping对象!

                    判断:

                        ---> 如果请求静态资源(jsp), 就放行

                        ---> 如果请求的是action,才执行Action(的过程)

              

               3. 如果访问的是struts的action,   执行:execute.executeAction(request, response, mapping);

                    (Action创建、拦截器的调用)

 

               4. ConfigurationManager  配置管理器类,管理各配置文件

 

               5. 根据配置管理器对象, 创建Action的代理 , 通过Action的代理,创建Action实例!

 

               6. 再依次默认的18个拦截器

 

              

 

 

 

 

 

2.说一下struct2的Interceptor有什么用?

   

    struts的每一个功能,都是通过一个个拦截器实现!

    (其余自由扩展....)

        拦截器怎么实现? 与过滤器区别?

        总共? 默认?  不够?

 

 

3. 为什么要用Hibernate? 简述工作原理!

 

    hibernate简化繁琐的jdbc操作!大大提升开发效率!

    hibernate实现了对象关系映射,即ORM,

                                    通过hibernate把对象直接通过映射,保存到数据库!

                                    从数据库取出来的就是封装好的对象!

 

    # 创建配置管理对象,Configuration

    # 加载主配置文件:hibernate.cfg.xml

      同时加载所有的映射信息!

    # 加载完主配置文件后,就可以创建SessionFactroy

    # 创建操作数据库的Session对象

    # 操作数据库

    # 最后提交事务、关闭session!

 

 

4. Hibernate是如何延迟加载?  并简述Hibernate缓存机制?

 

    lazy

        true

        false

        extra

 

    通过设置lazy属性,实现延迟加载!

 

    load/集合属性/对象关联的属性,默认都是延迟加载!

 

    基于session的缓存,以及基于sessionFactroy缓存!

    区别:

        session缓存,一级缓存,不能共享缓存数据!

        sessionFactroy缓存,二级缓存,基于应用程序的缓存,缓存数据可以给不同的session共享!

        ...

   

 

 

5. 为什么要用spring?

 

 

6. 简述spring工作原理?

 

    可以简述Spring六大模块!

 

    Spring的核心IOC与AOP!

        IOC, 提供了可以把对象创建交给外部容器! 解耦!

        AOP, 面向切面编程,典型应用: spring声明式事务管理就用到了aop编程!

 

 

    IOC容器创建对象原理:

        反射技术!

 

        Spring创建bean:

            1. 通过加载容器配置文件applicationContext.xml,创建IOC容器对象

            2. 容器中的bean会被创建

                lazy-init=true   (只对单例有效)

                    在第一次从容器中获取对象时候,创建bean

                lazy-init=默认

                    在创建容器对象时候,会创建所有的单例的bean

            3. 多例的bean,在每次从容器获取对象的时候才创建!

 

 

    Aop编程原理:

        jdk动态代理、cglib子类代理!

 

        Aop执行过程:

            1. 先配置切入点表达式,指定拦截哪些方法

                即给哪些类生产代理对象!

            2. 当对象符合切入点表达式规则,

                如果对象有实现接口,用jdk动态代理! (从ioc从其中获取对象时候,必须用接口接收!)

                如果对象没有实现接口,用cglib子类代理!  (目标对象不能为final)

   

 

 

 

7. Spring如何管理事务?

    声明式事务管理,管理事务!

    管理事务过程:

        1. 配置事务管理器类

            jdbc:       DataSourceTransactionManager

            hibernate:  HibernateTransactionManager

        2. 配置事务通知

           

        3. 切面配置

            配置切入点表达式,应用通知!

           

            ...

 

8. 简述SSH整合

    简述:

        SSH, 指Spring与Struts整合; 

               Spring与Hibernate整合;

 

        Spring创建Struts的Action

        Spring创建hibernate的SessionFactory

        SSH,事务管理,交给spring声明式事务管理!

        dao操作,

            1. 注入sessionFactory到dao              【hibernate】

            2. 注入hibernateTemplate到dao           【spring api】

            3. dao继承HibernateDaoSupport工具类     【spring api】

  

你可能感兴趣的:(Java)