面试汇总(三)--SSH框架整理

                        SSH的整理

 1.Struts2

   a.struts2的工作原理

      1.所有的请求发给前端控制器(web.xmlStruts2的核心控制器)

      2.前端控制器维护一个配置文件(Struts2.xml,配置文件中指明了不同的请求和某个Action的对应关系

      3.前端控制器可以根据不同的请求调用不同的Action

      4.Action调用Model(模型层:实体或数据访问),实现业务功能

      5.请求转发给view层(jsp

      6.jsp显示数据

   b.实现机制(AOP

      struts2中有拦截器的概念,通过它的拦截器可以拦截Actionstruts2的拦截器是通过AOP机制来实现的

   c.拦截器相关

      1.拦截器的工作原理

          采用AOP编程思想,将struts2对于请求处理的某些方面,抽取出来,利用反射加动态,在运行时织入Action的前后

      2.如何配置

          自定义拦截器:

    struts-*.xml

    <!-- 项目基础包 -->

<package name="base" extends="struts-default">

<interceptors>

<!-- 定义mylog拦截器 -->

<interceptor name="mylog1" class="com.it.intercp.MyLogger1"></interceptor>

<interceptor name="mylog2" class="com.it.intercp.MyLogger2"></interceptor>

<!-- 定义 mylog拦截器栈-->

<interceptor-stack name="mylogz1">

<interceptor-ref name="defaultStack"></interceptor-ref>

<interceptor-ref name="mylog1"></interceptor-ref>

</interceptor-stack>

<interceptor-stack name="mylogz2">

<interceptor-ref name="defaultStack"></interceptor-ref>(引用原来默认的拦截器)

<interceptor-ref name="mylog2"></interceptor-ref>(引用自己定义的拦截器)

</interceptor-stack>

<interceptor-stack name="mylogz3">

<interceptor-ref name="defaultStack"></interceptor-ref>

<interceptor-ref name="mylog1"></interceptor-ref>

<interceptor-ref name="mylog2"></interceptor-ref>

</interceptor-stack>

</interceptors>

</package>

      

  <package name="usersLogic" namespace="/users" extends="base">

  <default-interceptor-ref name="mylogz3"></default-interceptor-ref>

  <!-- 添加action -->

<action name="add" class="com.it.action.OptUserAction" method="addUser">

<result name="ok" type="redirectAction">show</result>

</action>

   </package>

  如果这个拦截器放到了package下面那么所有的action会被作用

  如果放到了某个action下面那就只作用那一个action

    3.如何创建

   d.struts2的配置文件

   Struts.xml:

       先在web.xml中配置struts2的核心控制器,然后在struts.xml中配置不同的请求对应不同的action,通过result返回页面显示

   e.比较Struts1的优点

        1.Action的实现方面:struts1action需要继承Action类,struts2action可以不继承任何类;

        2.线程模型方面:Struts1Action工作在单例模式,一个Action的实例处理所有的请求,线程不安全。Struts2Action是一个请           求对应一个实例,线程安全。

        3.封装请求参数:Struts1中强制使用ActionForm对象封装请求的参数。Struts2可以选择使用POJO类来封装请求的参数,或者直接         使用Action的属性。

        4.表达式语言方面:Struts1中整合了EL,但是EL对集合和索引的支持不强,Struts2整合了OGNLObject Graph                NavigationLanguage)。

      5.绑定值到视图技术:Struts1使用标准的JSPStruts2使用“ValueStack”技术。 

      类型转换:Struts1中的ActionForm基本使用String类型的属性。Struts2中使用OGNL进行转换,可以更方便的使用。 

     6.数据校验:Struts1中支持覆盖validate方法或者使用Validator框架。Struts2支持重写validate方法或者使用XWork的验证框架。  

      7.Action执行控制的对比:Struts1支持每一个模块对应一个请求处理,但是模块中的所有Action必须共享相同的生命周期。Struts2        支持通过拦截器堆栈为每一个Action创建不同的生命周期

 

 

 

 

  2.hibernate

   a.orm----Object Relational Mapping,即对象关系映射,通过对象模型操作数据库模型

            (将关系数据库中的表的数据映射成为对象,以对象的形式展现,这样可以把对这些对数据库的操作转为对这些对象的操作)

   b.核心组件(sessionsessionFactory

       session---对数据库的一次业务操作---轻量级操作

       sessionFactory----整个数据库的操作---重量级的操作

   c.pojo的三中状态

        瞬时态:session域中无,数据库中无

        持久态:session域中有,数据库中有

        游离态:session域中无,数据库中有

   d.一级缓存、二级缓存(使用场合)

        1.一级缓存(也叫session缓存)

          一级缓存是基于session 的缓存,利用hiberate执行查询的时候,

         hibernate会首先从session缓存去找,如果存在,则直接返回,如果不存在,

        则利用orm执行查询  将得到的对象保存至session缓存。

 

      优点:提高hibernate查询效率。

      缺点:可能会因并发,产生数据不一致。(发生的概率极低)

 

      注意:一级缓存,自动开启着的。

      可以使用session.evict(obj);objsession缓存移除。

 

     2.二级缓存(也叫 sessionFactory缓存)

       二级缓存是基于sessionFactory的缓存,利用hiberate执行查询的时候,

       hibernate会首先从session缓存去找,如果存在,则直接返回,如果不存在,

         则去二级缓存找,存在则返回,不存利用orm执行查询  将得到的对象保存至session缓存,可以存至二级缓存。

          一个事物一个session,所有的session来自sessionFactory,说明可以跨事物共享

 

    注意:二级缓存需要在sessionFactory配置文件中,进行两处配置。

  (a.配置启用二级缓存)

   (b.配置二级缓存实现类)

    需要对缓存本身进行专门配置。(xxx.xml--配置缓存)

 

    适用场合:频繁查询,极少修改的对象。   

 

   e.关联映射的配置(使用场合)

        关联映射--将对象模型之间的关系映射至数据库关系模型

 

   f.hql相关

        hqlhibernate  query  language)是一种 除了 orm  操作对象的另一种 操作对象的技术(基于orm)

        主要用于查询(支持增删改)

   g.Query接口,关键方法---.list/.uniqueRequest

  

   h.常见的错误(映射,主键生成策略)

       orm忘记关联

     (映射文件配错了)

   i.hbm.xml配置{主键生成策略(序列)}

       

 3.Spring相关

  a.IOC原理---scope配置,集成Struts2

      springIOC:控制反转---将操作对象的管理权限交给外部管理,在编码阶段,既没有实例化对象,也没有

      设置依赖关系,而是把它交给spring,spring在运行阶段实例化,组装对象,这种做法颠覆了传统的写代码

      实例化,组装对象,然后一步步执行的做法,因此称为控制反转。

      IOC的优点:

     低耦合,效率高,提高了模块的可重用性

     热拔插特性

  b.AOP体现(声明事务管理)

     AOP是面向切面编程,Aop将于程序业务无关的内容分离提取,应用对象只实现它们应该做的,完成业务逻辑,仅此而已,

        它们并不负责任它的系统关注点,例如日志或事物的支持。

4.SpringMVC工作原理

5.myibatis相关

     MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。

     MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。

     MyBatis 使用简单的 XML 或注解用于配置和原始映射,

     将接口和 Java POJOs(Plan Old Java Objects,普通的 Java 对象)映射成数据库中的记录。

--------扩展----------------------------------------

1.Linux常见命令

   a.Linux系统与windows的不同

      Linux严格区分大小写,Linux系统中的所有内容以文件的形式保存,包括硬件

      Linux不靠扩展名区分文件类型(压缩包:.gz/.bz2/.tar.bz2/.tgz

       Linux靠权限区分文件(windows下的程序不能直接在Linux中安装和运行)

   b.常见的操作命令:

     切换用户:su -s 切换到root用户,su luwendi 切换到luwendi用户

     所有目录:ls (查当前用户下的所有文件)ls -a 显示所有文件,包括隐藏的文件。

               ls -l 显示详细信息

      建立目录: mkdir +目录的名字(ko)

                   在建的目录下建文件:先cd ko (到此目录下)----touch +文件名(xmz

 

                   cd ~ 返回目录

                   cd..进入上一级目录(到家目录)

                   cd.进入当前目录

       删除空目录:rmdir +目录名

       删除文件或目录:rm-rf

      cd/:根目录----home-----用户

      cd ~:到用户目录(家目录homecd..返回上一级目录---用户目录的上一级目录就是home目录

      home的目录下(可以有多个用户,也可创建用户)---cd luwendi/:找到luwendi这个用户的目录下

 

      ~ls 查所有目录  ls -lh(ll):查详细信息

 

       ~ :下touch + 文件,在用户目录下建文件

         ~cd qq/ ----进入qq目录 再 touch + 文件(在qq目录下创建文件)

       rm : 删除

       rm-rf:强制删除文件

      复制: cp qq Music  复制qqMusic

 压缩和解压文件:(zip gz 格式)

  1.zip格式

     a.压缩:zip 文件.zip 文件

     b.解压:unzip 文件.zip

  2.gz格式

     a.压缩:gzip 文件

     b.解压:gzip 文件.gz

 

  打包命令:.tar.gz格式(表示先打包,再压缩成 .gz文件)

       打包:tar-zcvf  文件.tar.gz  文件(要打包压缩的文件)

       解压:tar-zxvf  文件.tar.gz

              tar.xf    文件.tar.gz

 

 

 

    

2.webService是什么?在什么场合用?基于什么协议?有J2EE

 

  webService是一种服务导向架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务

  可以互操作。

 

 

 

.hibernate 的核心思想是什么?并简述其工作原理

hibernate核心思想:

是利用ORMobject relation/mapping)机制将表与表之间的操作,映射为对象与对象之间的操作,简化了持久层的代码,使用更加方便

工作原理:

1.读取并解析hibernate.cfg.xml文件

2.读取并解析映射信息

3.创建sessionFactory

4.打开session

5.创建并启动事务Tansation

6.操作数据,持久化操作

7.提交事务

8.关闭session

9.关闭sessionFactory

.struts的好处

struts 框架MVC实现低耦合,便于程序的维护

配置文件控制流程的转向很清晰,主要负债具体业务的实现和页面的转向

.IOC容器的概念

IOC容器就是具有依赖注入功能的容器,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。应用程序无需直接在代码中new相关的对象,应用程序由IOC容器进行组装

IOC的优点:

低耦合,效率高,提高了模块的可重用性

热拔插特性

四:动态include与静态include区别

动态includejsp:include动作实现<jsp:include page="included.jsp" flush="true" />他总是会检查所含文件的变化,适用于包含动态页面,并且可以带参数,静态includeinclude伪码实现定不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm"%>

.java中实现分页有哪几种方法

1.是根据查询出来的结果集进行分页查询

2.就是用数据库查询语句进行查询,如果是oracle数据库就用rownum这个关键字,如果是SQL Server 就用top这个关键进行查询;

3.还有就是在数据库里写存储过程

.什么是springmvc

springMVCspring框架的一个模块,分为

前端控制器,处理器映射器,处理器适配器,视图解析器

第一步:发起请求到前端控制器(DispatcherServlet

第二步:前端控制器请求HandlerMapping查找handler

可以根据xml配置进行查找

第三步:处理器映射器HandlerMapping向前端返回Handler

第四步:前端控制器调用处理器适配器去执行Handler

第五步:处理器适配器去执行Handler

第六步:Handler执行完给适配器返回ModelAndView

第七步:处理器适配器向前端控制器还回ModelAndView

ModelAndViewspringMVC框架的一个底层对象,包括modelview

第八步:前端控制器请求视图解析器去进行视图解析根据

逻辑视图名解析成真正的视图(jsp

第九步:视图解析器向前端控制器返回view

第十步:前端控制器进行视图渲染将模型数据(在ModelAndView对象中)填充到request

第十一步:前端控制器向用户响应结果

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值