Java面试分享(题目+答案)

作者:微信小助手

发布时间:2018-11-25T10:43:41

1.说下Struts的设计模式

MVC模式: 
web应用程序启动时
就会加载并初始化ActionServler。
用户提交表单时,
一个配置好的ActionForm对象被创建,
并被填入表单相应的数据,
ActionServler根据Struts-config.xml文件
配置好的设置决定是否需要表单验证,
如果需要就调用ActionForm的Validate()
验证后选择将请求发送到哪个Action,
如果Action不存在,
ActionServlet会先创建这个对象,
然后调用Action的execute()方法。
Execute()从ActionForm对象中获取数据,
完成业务逻辑,
返回一个ActionForward对象,
ActionServlet再把客户请求 
转发给ActionForward对象指定的jsp组件,
ActionForward对象指定的jsp生
成动态的网页,返回给客户。

2.拦截器和过滤器的区别?

1、拦截器是基于java反射机制的,
而过滤器是基于函数回调的。

2、过滤器依赖于servlet容器,
而拦截器不依赖于servlet容器。

3、拦截器只能对Action请求起作用,
而过滤器则可以对几乎所有请求起作用。

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

5、在Action的生命周期中,
拦截器可以多次调用,
而过滤器只能在容器初始化时被调用一次。


3.struts2框架的核心控制器是什么?它有什么作用?

1)Struts2框架的核心控制器是
StrutsPrepareAndExecuteFilter。  

2)作用:  

 负责拦截由<url-pattern>/*</url-pattern>
指定的所有用户请求,
当用户请求到达时,
该Filter会过滤用户的请求。
默认情况下,
如果用户请求的路径  

不带后缀或者后缀以.action结尾,
这时请求将被转入struts2框架处理,
否则struts2框架将略过该请求的处理。  

可以通过常量"struts.action.extension"修改action的后缀,
如:  
<constant name="struts.action.extension" value="do"/>  
如果用户需要指定多个请求后缀,
则多个后缀之间以英文逗号(,)隔开。
<constant name="struts.action.extension" value="do,go"/>

4.struts2如何访问HttpServletRequest、HttpSession、ServletContext三个域对象?

方案一:  

HttpServletRequest request =
ServletActionContext.getRequest();  

HttpServletResponse response =
ServletActionContext.getResponse();  

HttpSession  session=   
request.getSession(); 

ServletContext servletContext=
ServletActionContext.getServletContext();  



方案二:  

类 implements ServletRequestAware,ServletResponseAware,SessionAware,ServletContextAware  

注意:框架自动传入对应的域对象

5.ActionContext、ServletContext、pageContext的区别?

1)ActionContext是当前的Action的上下文环境,
通过ActionContext可以
获取到request、session、ServletContext等
与Action有关的对象的引用;  

2)ServletContext是域对象,
一个web应用中只有一个ServletContext,
生命周期伴随整个web应用;  

3)pageContext是JSP中的最重要的一个内置对象,
可以通过pageContext获取其他域对象的应用,
同时它是一个域对象,
作用范围只针对当前页面,
当前页面结束时,
pageContext销毁,  

生命周期是JSP四个域对象中最小的。


6.描述Struts2的工作原理

客户端发送请求--
请求经过一系列过滤器->
FilterDispatcher通过
ActionMapper来决定这个Reques
t需要调用哪个Action ->
FilterDispatcher把请求的处理交给ActionProxy-
通过ConfigurationManager询问
Struts配置文件(Struts.xml
找到需要调用的Action->
ActionProxy创建一个ActionInvocation的实例 ->
调用Action->执行完毕,
返回结果

7.result的type属性中有哪几种结果类型?

一共10种:    

dispatcher          

struts默认的结果类型,
把控制权转发给应用程序里的
某个资源不能把控制权
转发给一个外部资源,
若需要把控制权重定向到
一个外部资源, 应该使用  

redirect结果类型  
redirect   
把响应重定向到另一个资源(包括一个外部资源)  

redirectAction      
把响应重定向到另一个 Action  

freemarker、
velocity、
chain、
httpheader、
xslt、
plainText、
stream

8.拦截器的生命周期与工作过程?

1)每个拦截器都是实现了I
nterceptor接口的 Java 类;  

2)init(): 该方法将在拦截器被创建后立即被调用, 
它在拦截器的生命周期内只被调用一次. 
可以在该方法中对相关资源
进行必要的初始化;  

3)intercept(ActionInvocation invocation): 
每拦截一个动作请求,
 该方法就会被调用一次;  

4)destroy: 
该方法将在拦截器被销毁之前被调用,&n