撩课-Java面试宝典-第十七篇

本文深入解析了Struts框架的设计模式,包括MVC模式的工作流程,Struts2框架的核心控制器StrutsPrepareAndExecuteFilter的作用,以及如何在Struts2中访问HttpServletRequest、HttpSession、ServletContext等域对象。同时,对比了拦截器与过滤器的区别,阐述了它们在不同场景下的应用。

116.说下Struts的设计模式

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

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

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

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

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

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

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

118.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"/>   
复制代码

119.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  

注意:框架自动传入对应的域对象 
复制代码

120.ActionContext、ServletContext、pageContext的区别?

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

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

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

生命周期是JSP四个域对象中最小的。   
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值