Java面试(struts2部分)

1、Struts2框架在三层架构中哪部分进行的再优化?

表现层进行的再优化。

三层架构:

表现层 MVC

业务层 service

持久层 dao(data access object)

 

2、Struts1和Struts2的一个显著区别是什么?

Struts1的核心控制器是一个servlet。

Struts2的核心控制器是一个过滤器。

 

3、Struts2的编写步骤?

1.导入相关jar包

2.配置web.xml中的过滤器

3.编写struts.xml

4.开发action。

 

4、Struts2的执行过程?

tomcat启动的时候加载应用的web.xml,实例化并初始化过滤器,过滤器的初始化方法加载struts.xml。客户端发送请求,请求到达过滤器,截取请求的动作名称(没有或以action结尾),并从struts.xml中找,找到后,实例化动作类。调用对应的动作方法,方法有返回值,根据返回值,找到name取值对应的结果视图,找到jsp页面。 

 

5、Struts2的配置文件加载时机和加载顺序?

当应用被tomcat加载的时候,struts2的配置文件就已经被加载过了。加载顺序:default.propertiesstruts-default.xmlstruts-plugin.xmlstruts.xmlweb.xml

 

 

6、常量中struts.devMode是什么意思,如何配置?

开发模式。修改了struts.xml中的配置,你不必每次都重启服务器。

<constant name="struts.devMode" value="true" />

 

7、struts.xml配置文件中package的四个属性分别什么意思?

name:包名

extends:一般是继承struts-default包,但不是必须的。不过如果不继承的话,将无法使用struts2提供的核心功能。

abstract:把包声明为抽象包,抽象包就是用来被继承的。只要是没有<action>元素的包,就可以声明为抽象包。

namespace:名称空间。

 

8、访问带有名称空间的动作时,是如何查找的? /user/abc/action1.action

先找user/abc,有action1就执行,没有再找user下面的action1,有就执行,最后找根目录。

 

9、action元素的三个属性什么意思

name:动作名称

class:动作类全名。默认的动作类是:com.opensymphony.xwork2.ActionSupport是在struts-default.xml中定义的。

method:动作类中的方法名称。默认是public String execute(){}

要求:

1.public

2.返回值必须是String

3.没有参数

 

10、result元素的两个属性分别指的是什么?

name:逻辑视图的名称,对应着动作方法的返回值。默认值是success。 

type:结果类型,指的就是用什么方式转到定义的页面。默认是dispatcher。

 

11、4个常用结果类型分别是什么?

dispatcher:(默认值)使用请求转发,转向一个页面。

redirect:使用重定向,转向一个页面。

redirectAction:注意:使用的是重定向。

a.重定向到另一个相同名称空间的动作。b.重定向到不同名称空间的动作

chain:注意:使用的是请求转发。

a.转发到另一个相同名称空间的动作。b.请求转发到不同名称空间的动作

 

12、访问ServletAPI的两种方式?

第一种方式:使用ServletActionContext

第二种方式:使用实现接口的方式(ServletRequestAwareServletResponseAware

 

1、如何封装静态请求参数?

struts.xml配置文件中,给动作类注入值。调用的是setter方法。

 

2、动作类和模型分开的动态封装请求参数,setget方法是怎么调用的?

get出来,判断存不存在,存在直接get第二次(给这个对象赋值),不存在(把这个对象创建出来,set回去,然后再get出来)

 

3、使用模型驱动动态封装请求参数的要求是什么?

实现ModelDriven接口,动作类和实体模型分开,创建模型对象并将其实例化,重写getModel方法,返回一个引用。

 

4、实际开发中类型转换的两种情况是什么?

转字符串,转其他类型。

写的时候,发送请求,经过过滤器,最后到数据库,字符串转其他类型。

读的时候,到页面,其他类型转成字符串

 

5、Struts2中提供的常用类型转换分几类?

      a.基本数据类型自动转换。

b.日期类型:默认按照本地日期格式转换(yyyy-MM-dd)。

c.字符串数组:默认用逗号+空格,连接成一个字符串

 

6、自定义类型转换器是如何注册的?(两种情况)

局部类型转换器:只能指定javabean中的属性用

      按照属性来注册。在属性所属的javabean的包下建立一个.properties文件。文件名称:javabean名称-conversion.properties

全局类型转换器:(推荐)

按照要转换的数据类型来注册。at the top op classpath,建立一个固定名称xwork-conversion.properties的属性文件。

 

7、如何解决编程式验证动作类中的全部动作方法都验证?

在动作类中覆盖public void validate()方法。

 

8、声明式验证的分别可以基于什么?

基于字段和验证器。


9、命名声明式验证xml文件名的两种方式,有什么不同?

a.针对动作类中的所有动作进行验证:在动作类所在的包中,建立一个ActionClassName-validation.xml的文件

   b、针对动作类中的某个动作进行验证:在动作类所在的包中建立一个xml文件,名称为ActionClassName-ActionName-validation.xml

 

1、国际化的消息资源文件如何命名?

一个资源包由多个文件组成,这些文件名都有命名规范:主要文件名_语言代码_国家代码.properties

语言代码:由iso规定的。国家代码:有iso规定的当文件只有主要文件名.properties时,表明它是默认资源包。浏览器会根据不同的语言环境找对应语言环境的资源包,当没有时,找默认的。

每个资源包的内容都由相同的key和对应语言环境的value组成。

比如:

message_zh_CN.properties   message_zh_HK.properties message_en_US.properties

 

   2、 Struts2中全局,动作范围和包范围,哪个加载优先级高?页面上如何读取指定的消息资源包?

动作范围。

 

3、Struts2中拦截器的执行时机?

拦截动作方法之前,正序执行;拦截动作方法之后,倒序执行。

 

4、自定义拦截器的步骤是什么?

a、编写一个类,继承AbstractInterceptor类或者实现Interceptor接口。重写intercept方法。

b配置拦截器:注意拦截器必须先声明再使用

 

5、多个拦截器如何确定执行顺序?

使用顺序。

 

6、自定义拦截器除了继承AbstractInterceptor还可以继承哪个?另一个有什么好处?

可以继承MethodFilterInterceptor并且重写doIntercept方法。

通过参数注入的方式,哪个拦截和不拦截。

 

7、文件上传是哪个拦截器为我们做的?如何限定上传文件的大小和类型?

fileupload拦截器

   在struts.xml中改变default.properties文件中的常量。

fileUpload拦截器注入参,数通过限制上传文件的MIME类型

 

8、struts2中文件下载是由哪个结果类型完成的?需要我们提供什么参数?

stream类型。输入流的字段名称(inputname)、文件类型(contentType)、响应消息头(contentDisposition


 

9、OGNL是什么?使用它能否访问普通方法?能否直接访问静态方法?

OGNLObject Graphic Navigation Language(对象图导航语言)的缩写,它是一个单独的开源项目。 Struts2框架使用OGNL作为默认的表达式语言。

可以直接访问普通方法。不能直接访问静态方法。需要在struts.xml中启用。

 

10、ActionContextValueStack什么时候创建?是否是线程安全的?

明确:动作类是多例的,每次动作访问,动作类都会实例化。所以是线程安全的。Struts1的区别是,struts1的动作类是单例的。

在每次动作执行前,核心控制器StrutsPrepareAndExecuteFilter都会创建一个ActionContextValueStack对象。且每次动作访问都会创建。

      这两个对象存储了整个动作访问期间用到的数据。并且把数据绑定到了线程局部变量(ThreadLocal)上了。所以是线程安全的。

 

 

11、ContextMap中的结构是什么样的?

除了value stack之外,全是map,而contextMap也是一个map。其实就是Map中又封装的Map。(很像dbutilsKeyedHandler封装数据的结构,只是封装数据的结构)

 

 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值