Java Struts框架的一些问答面试题

[问答题]谈一下拦截器和过滤器的区别。

  拦截器和过滤器都可以用来实现横切关注功能,其区别主要在于:

  ①拦截器是基于Java反射机制的,而过滤器是基于接口回调的。

  ②过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容器。

  ③拦截器只能对Action请求起作用,而过滤器可以对所有请求起作用。

  ④拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。

[问答题]Struts2中如何实现I18N?

  首先,为不同语言地区编写不同的资源文件;然后在Struts 2配置文件中配置struts.i18n.custom.resources常量;
  在Action中可以通过调用getText()方法读取资源文件获取国际化资源。


[问答题] 单例模式常见的应用场景分析。


  在23种设计模式中,单例模式排行老大。虽然理解简单,但是对于应用场景。你真正的熟悉么?使用单例,是由于没必要每个请求都新建一个对象,这样既浪

  费CPU又浪费内存;之所以用多例,是为了防止并发问题;即一个请求改变了对象的状态,此时对象又处理另一个请求,而之前请求对对象状态的改变导致了对象

  对另一个请求做了错误的处理。先来说说Java web中的单例应用场景:数据库连接池就是单例模式,有且仅有一个连接池管理者,管理多个连接池对象。我们常

  用的service和dao层的对象通常都是 单例的(由于其所有的请求都用一个对象来处理),而struts2中的action则是多例,由于每个请求是用一个新的对象来处理的

  (因为action本 身含有请求参数的值,即可改变的状态)。 log4j日志记录也是单例模式,因为从始至终都仅维护一个对象。(应用程序的日志应用,一般都何用单

  例模式实现,这一般是由于共享的日志文件一直处于打 开状态,因为只能有一个实例去操作,否则内容不好追加)

[问答题]简述拦截器的工作原理以及你在项目中使用过哪些自定义拦截器。

  Struts 2中定义了拦截器的接口以及默认实现,实现了Interceptor接口或继承了AbstractInterceptor的类可以作为拦截器。接口中的init()方法在拦截器被创建

  后立即被调用,它在拦截器的生命周期内只被调用一次,可以在该方法中对相关资源进行必要的初始化。每拦截一个请求,intercept()方法就会被调用一次。

  destory()方法将在拦截器被销毁之前被调用, 它在拦截器的生命周期内也只被调用一次。 项目中使用过的有权限拦截器、执行时间拦截器、令牌拦截器等。

原文地址:https://www.cnblogs.com/fengqiqi/p/6371022.html