1、描述Struts2的工作原理
答:客户端发送请求--》请求经过一系列过滤器--》FilterDispatcher通过ActionMapper来决定这个Request需要调用哪个Action --》FilterDispatcher把请求的处理交给ActionProxy--》通过ConfigurationManager询问Struts配置文件(Struts.xml),找到需要调用的Action类--》ActionProxy创建一个ActionInvocation的实例 --》调用Action--》执行完毕,返回结果
2、Struts2中的拦截器有什么用?列举框架提供的拦截器名称?(至少3种,可用中文名)
答: 1)拦截器是struts2核心组成部分,它提供了一种机制,使得开发者可以定义一个特定的功能模块,这个模块会在Action执行之前或者之后执行,也可以在Action执行之前阻止Action执行。
2)常用的拦截器有:
chain:在不同请求之间将请求参数在不同名字件转换,请求内容不变
fileUpload:提供文件上传。
i18n:记录用户选择的区域环境
logger:输出Action的名字
params:将请求中的参数设置到Action中去。
3、Struts2有哪些优点?
答:
1)在软件设计上Struts2的应用可以不依赖于Servlet API和struts API。 Struts2的这种设计属于无侵入式设计;
2)拦截器,实现如参数拦截注入等功能;
3)类型转换器,可以把特殊的请求参数转换成需要的类型;
4)多种表现层技术,如:JSP、freeMarker、Velocity等;
5)Struts2的输入校验可以对指定某个方法进行校验;
6)提供了全局范围、包范围和Action范围的国际化资源文件管理实现
7) 实现MVC模式,结构清晰,使开发者只关注业务逻辑的实现。有丰富的tag可以用,大大提高了开发效率。(简要)
4、什么是OGNL,有什么用途?如何访问存放在session中叫user的对象的username属性
答:OGNL是Object-Graph Navigation Language的缩写,也叫对象导航语言。它是Struts的一种功能强大的表达式语言列如:访问session中的user对象的username属性:注意的是:使用前需要在页面头部导入taglib prefix="s" uri="/struts-tags"
5、什么是国际化,struts2实现国际化的原理?
答:国际化是根据不同的国家和地区的语言文化的不同,所设计的适用于不同地区的编码格式。
实现方法:
1)首先在src目录下新建message_en.properties(英文);
2)页面获取国际化信息或者使用
原理:程序得到当前运行环境的国际/区域,语言环境并存放于Locale,ResourceBundle根据Locale中信息自动搜索对应的国际化资源文件并加载。
6、AJAX是什么? 描述ajax的原理
答:Ajax又叫异步刷新,(JavaScript和xml)原理:使用HttpRequest向服务器发送异步请求,服务器返回处理结果
7、什么是反射?请用反射动态创建一个类的对象(写关键代码,其它可省略)
答:反射,程序运行时动态获取类型信息,完成对象创建,方法调用等。
例如:
Class myclass=Class.forNama("包名.类名");
Student stu=Factory.createInstance("stu1");
8、在struts2中如何实现转发和重定向?
答:在struts.xml中配置type="redirect"(重定向);type="redirectAction"(转发)
9、Struts2中的type类型有哪些?至少写4种
答:chain,redirect,redirectAction,json,dispatcher
10、struts2默认能解决get和post提交方式的乱码问题吗?
答:不能。struts.i18n.encoding=UTF-8属性值只能解析POST提交下的乱码问题。
11、说下Struts的设计模式
答:MVC模式:
1)web应用程序启动时就会加载并初始化ActionServler。
2)用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用Action的execute()方法.
3)Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生成动态的网页,返回给客户。
12、拦截器和过滤器的区别
答:
1)拦截器是基于java反射机制的,而过滤器是基于函数回调的。
2)过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。
3)拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。
4)拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。
5)在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。
13、请你写出struts2中至少5个的默认拦截器?
答:
fileUpload 提供文件上传功能
i18n 记录用户选择的locale
cookies 使用配置的name,value来是指cookies
checkbox 添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false,而html默认情况下不提交没有选中的 checkbox。
chain 让前一个Action的属性可以被后一个Action访问,现在和chain类型的result()结合使用。
alias 在不同请求之间将请求参数在不同名字件转换,请求内容不变
14、ActionContext、ServletContext、pageContext的区别?
答:
1)ActionContext是当前的Action的上下文环境,通过ActionContext可以获取到request、session、ServletContext等与Action有关的对象的引用;
2)ServletContext是域对象,一个web应用中只有一个ServletContext,生命周期伴随整个web应用;
3)pageContext是JSP中的最重要的一个内置对象,可以通过pageContext获取其他域对象的应用,同时它是一个域对象,作用范围只针对当前页面,当前页面结束时,pageContext销毁, 生命周期是JSP四个域对象中最小的。
15、拦截器的生命周期与工作过程?
答:
1)每个拦截器都是实现了Interceptor接口的 Java 类;
2)init(): 该方法将在拦截器被创建后立即被调用, 它在拦截器的生命周期内只被调用一次. 可以在该方法中对相关资源进行必要的初始化;
3)intercept(ActionInvocation invocation): 每拦截一个动作请求, 该方法就会被调用一次;
4)destroy: 该方法将在拦截器被销毁之前被调用, 它在拦截器的生命周期内也只被调用一次;
5)struts2中有内置了18个拦截器。
16、用自己的话简要阐述struts2的执行流程。
答: Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。
1)核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。
2)业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。
Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2是WebWork的升级版本。
基本简要流程如下:
1)客户端浏览器发出HTTP请求。
2)根据web.xml配置,该请求被FilterDispatcher接收。
3)根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton。
4)Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
5)Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。
6)返回HTTP响应到客户端浏览器。
更多struts2详细教程请访问struts2教程