zoukankan      html  css  js  c++  java
  • 面试框架部分总结

    面试框架部分总结

    Struts2

    工作原理

    <!-- 配置启动struts2框架的 -->

        <filter>

           <filter-name>struts2</filter-name>

           <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

        </filter>

        <filter-mapping>

            <filter-name>struts2</filter-name>

           <url-pattern>/*</url-pattern>

    </filter-mapping>

    只需要将这段代码放在web.xml文件中就会执行Struts2流程,下面慢慢谈

    1、struts2是如何启动的呢?

    Struts2通过我们上述的web.xml我们添加的过滤器里面StrutsPrepareAndExecuteFilter来启动的,在我们打开Tomcat的时候,会执行StrutsPreareAndExecuteFilter中init方法(里面还有 doFilter + destory + postInit三个方法) init 方法会去加载struts.xml文件,并将struts.xml配置文件中内容封装成javabean存放在内存中,之后在请求的时候,就会去这片内存中直接取,而不用每次都去struts文件中了。

    2、Struts核心控制器StrutsPrepareAndExecuteFilter的作用

    StrutsPrepareAndExecuteFilter主要负责拦截URL请求,我们在上面配置了<url-param>/*</url-param>意思就是我们这个struts将会拦截所有的请求,如果在配置文件里你没有设置拦截url这个,那么在strutsPrepareAndExecuteFilter中doFilter方法中就会默认拦截没有后缀名的或者是后缀名是.action的路径,其他就不会被struts2框架处理。


    3、struts2配置文件加载的顺序。

    Struts.xml---->struts.properties常量可以定义在struts.xml文件中。也可以定义在struts.properties文件中,如果多个properties文件总值出现了重复,则后出现的覆盖之前的值

    Struts.xml文件的作用就是通知struts2框架加载与url对应的action资源

    4、struts2是如何管理action 的,好处?

    首先strutss使用包来管理action的,包的作用和java中的包的作用类似的(在配置文件中的package,指定继承struts-default),我理解为给action一个大本营,意思就是所有的action都会放在这个包中统一管理。所以我们应该把一组业务逻辑放在一个包中。

    5、struts2中默认struts-default 包的作用是什么?

    a、Struts-default是struts内置的,他定义了struts2中的众多的拦截器和result类型,实现了很多struts2的核心的功能,

    如:从请求中把参数封装到action中

    文件上传和数据验证等等都是通过内置拦截器实现的

    当包继承了struts-default才能使用struts2为我们提供的这些功能

    b、struts-default是在struts-default.xm文件中定义的,struts-default.xml文件也是struts2中内置的配置文件,不用自己写,struts2会自动的加载这个配置文件的。

    c、通常每个包都是继承struts-default包的

    也就是说上诉不需要我们配置什么。只是一个流程

    6、struts2中的action的url访问路径由什么构成的?

    由两部分组成的:

    包的命名空间+action的名称【.action】

    7、在struts.xml文件中可以不为action制定class属性吗

    可以的,

    但是如果你不指定class,该action的class属性默认是     com.opensymphony.xwork2.ActionSupport

    如果没有给action制定method,默认执行的就是ActionSupport中的execute方法,该方法里就一句话 return “SUCCESS”:

    没有指定result的name  默认success

    没有指定类型Type     默认dispatcher

    在action中都会有一个默认的拦截器的引用:

    <interceptor-ref name="defaultStack">;

    注意: 
           1.一旦我们为该包中的某个action显式指定了某个拦截器,则默认拦截器不会起作用,所以此时要显式的引进默认的拦截器;

           2.每个包只能指定一个默认拦截器,每个默认拦截器只针对当前包下有效。 

    8、struts2拦截器的作用,拦截器与过滤器的区别

    拦截器是针对action的,他提供一种机制可以使开发者可以定义在action执行前后的代码块。也就是说拦截器在action工作前后工作,在前后我们开发者可以自己写进一些功能代码,减少代码冗余

    过滤器是拦截用户的请求的,范围大

    9、常见的拦截器

    alias
           在不同请求之间将请求参数在不同名字件转换,请求内容不变
    chain
    让前一个Action的属性可以被后一个Action访问,现在和chain类型的result(<result type=”chain”>)结合使用。

    checkbox
    添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false,而html默认情况下不提交没有选中的checkbox。

    cookies
    使用配置的name,value来是指cookies

    conversionError
    将错误从ActionContext中添加到Action的属性字段中。

    createSession
    自动的创建HttpSession,用来为需要使用到HttpSession的拦截器服务。

    debugging
    提供不同的调试用的页面来展现内部的数据状况。

    execAndWait
    在后台执行Action,同时将用户带到一个中间的等待页面。

    exception
    将异常定位到一个画面


    fileUpload
    提供文件上传功能

    i18n
    记录用户选择的locale

    logger
    输出Action的名字

    store
    存储或者访问实现ValidationAware接口的Action类出现的消息,错误,字段错误等。

    model-driven
    如果一个类实现了ModelDriven,将getModel得到的结果放在Value Stack中。

    scoped-model-driven
    如果一个Action实现了ScopedModelDriven,则这个拦截器会从相应的Scope中取出model调用Action的setModel方法将其放入Action内部。

    params
    将请求中的参数设置到Action中去。

    prepare
    如果Acton实现了Preparable,则该拦截器调用Action类的prepare方法。

    scope
    将Action状态存入session和application的简单方法。

    servletConfig
    提供访问HttpServletRequest和HttpServletResponse的方法,以Map的方式访问。

    staticParams
    从struts.xml文件中将<action>中的<param>中的内容设置到对应的Action中。

    roles
    确定用户是否具有JAAS指定的Role,否则不予执行。

    timer
    输出Action执行的时间

    token
    通过Token来避免双击

    tokenSession
    和Token Interceptor一样,不过双击的时候把请求的数据存储在Session中

    validation
    使用action-validation.xml文件中定义的内容校验提交的数据。

    workflow
    调用Action的validate方法,一旦有错误返回,重新定位到INPUT画面

    N/A
    从参数列表中删除不必要的参数

    profiling
    通过参数激活profi

    参考网址:http://blog.csdn.net/huxian1234/article/details/17110211


    Hibernate

    1、Hibernate的配置文件:该文件以cfg.xml结尾

    2、配置文件主要存放了:数据的url地址+数据库的用户信息+缓存+mapping文件的配置路径

    3、mapping  该文件的后缀名:.hbm.xml

    class元素:定义一个实体类的映射信息。

    常用属性如下。

    name表示对象实体类的全限定名。

    table表示对应的数据库表名。

     id元素:定义该属性到数据库表主键字段的映射。

    常用属性如下。

    name表示实体类属性的名字。

    type表示实体类属性的类型。

    column 表示数据库表字段的名字,也可在子元素column中指定。

    generator 元素:id元素的子元素用于指定主键的生成策略。

    常用属性及子元素如下。

    class用来指定具体主键生成策略。

    param元素用来传递参数。

    常用主键的生成策略如下

    increment:对类型为long、short 或int 的主键,以自动增长的方式生成主键的值。主键按数值顺序递增,增量为1。

    identity:对如SQL Server、DB2、MySQL等支持标识列的数据库,可使用该主键生成策略生成自动增长主键,但要在数据库中将该主键设置为标识列。

    sequence:对如Oracle、DB2等支持序列的数据库,可使用该主键生成策略生成自动增长主键,通过子元素param传入数据库中序列的名称。

    native:由Hibernate 根据底层数据库自行判断采用何种主键生成策略,意思是由使用的数据库生成主键的值。

    assigned:主键由应用程序负责生成,无需Hibernate参与。

    property 元素:定义实体类中属性和数据库中表的字段的对应关系。

    常用属性如下。

    name表示实体类属性的名字。

    type表示实体类属性的类型。

    column 表示数据库表字段的名字,也可在子元素column中指定。

    column 元素:用于指定其父元素代表的实体类属性所对应的数据库表中的字段。

    常用属性如下。

    name表示字段的名字。

    length表示字段长度。

    not-null设定是否可以为null,值为true 表示不能为null。

    4、加载配置文件

    // 1.加载配置文件 hibernate.cfg.xml

                  StandardServiceRegistryregistry = new StandardServiceRegistryBuilder()

                                .configure()// configures settings from hibernate.cfg.xml

                                .build();

                  try{

                         //2.SessionFactory工厂对象

                         SessionFactorysessionFactory = new MetadataSources(registry)

                                       .buildMetadata().buildSessionFactory();

                        

                         //3.获取工厂中关于session对象

                         Sessionsession = sessionFactory.openSession();

                        

                         //4.session对象

                         Useruser1 = session.get(User.class, 2);

                        

                         //session的缓存

                         Useruser2 = session.get(User.class, 1);

                         System.out.println(user1);

                         System.out.println(user2);

                         //5.释放资源

                         session.close();

                        

                  }catch (Exception e) {

                         e.printStackTrace();

                         //The registry would be destroyed by the SessionFactory, but we had

                         //trouble building the SessionFactory

                         //so destroy it manually.

                         StandardServiceRegistryBuilder.destroy(registry);

                  }

    5、get和load的区别

    Get不支持延时加载 而load支持

    当查询特定的数据库不存在的数据时,get返回null,而load会抛异常

    6、为什么加载主键的时候不需要发出sql语句。

       因为主键ID并不是实体的属性,在用hibernate加载的时候,只会产生该对象的代理对象,代理对象里属性都是默认值,当你真正的调用属性的时候才会从数据库中加载数据

    7、缓存

    缓存介于应用程序和永久性数据存储源之间

    使用缓存,可以降低应用程序直接读写永久性数据的频率,提高运行性能

    8、hibernate提高两个级别的缓存

    a)       Session级别的缓存:属于事物级别的缓存,由hibernate管理,一般情况无需进行干预

    b)       Sessionfactory级别的缓存。属于进程范围的缓存,sessionFactory缓存也可以分为两类

    i.         内置缓存:hibernate自带的,不可卸载。通常在hibernate的初始化阶段,hibernate会把映射元数据和预定义sql语句放到sessionFactory的缓存中,映射元数据是映射文件中的数据的复制,而预定义sql语句是hibernate根据映射元数据推到出来的sql语句

    ii.       外置缓存:一个可配置的缓存插件,默认情况hibernate不会启用


    Spring

    <a href="http://www.php100.com/html/it/focus/2014/0603/6931.html">http://www.php100.com/html/it/focus/2014/0603/6931.html</a>

  • 相关阅读:
    【Python学习】读取Excel文件,并写入Excel
    异步编程
    LINQ入门
    [Leetcode Weekly Contest]207
    [Leetcode Weekly Contest]203
    VsCode插件,自动生成注释koroFileHeader
    vue样式穿透 ::v-deep的具体使用
    springcloud,springboot,springcloud-alibaba 之间版本关系
    sharding-sphere 单库分表实例
    CDN动态加速技术
  • 原文地址:https://www.cnblogs.com/zhangxinhua/p/8319239.html
Copyright © 2011-2022 走看看