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

Java (53) 2023-10-02 17:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说撩课-Java面试宝典-第十八篇,希望能够帮助你!!!。

121.描述Struts2的工作原理

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

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

一共10种: 
dispatcher 
struts默认的结果类型,
把控制权转发给应用程序里的
某个资源不能把控制权
转发给一个外部资源,
若需要把控制权重定向到
一个外部资源, 应该使用 
redirect结果类型 
redirect 
把响应重定向到另一个资源(包括一个外部资源) 
redirectAction 
把响应重定向到另一个 Action 
freemarker、
velocity、
chain、
httpheader、
xslt、
plainText、
stream 

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

1)每个拦截器都是实现了I
nterceptor接口的 Java 类; 
2)init(): 该方法将在拦截器被创建后立即被调用, 
它在拦截器的生命周期内只被调用一次. 
可以在该方法中对相关资源
进行必要的初始化; 
3)intercept(ActionInvocation invocation): 
每拦截一个动作请求,
 该方法就会被调用一次; 
4)destroy: 
该方法将在拦截器被销毁之前被调用, 
它在拦截器的生命周期内也只被调用一次; 
5)struts2中有内置了18个拦截器。

124.struts2如何完成文件的上传?

1、JSP页面: 
1)JSP页面的上传文件的组件:
<s: file name=”upload” />,
如果需要一次上传多个文件, 
就必须使用多个 file 标签, 
但它们的名字必须是相同的,
即: name=“xxx”的值必须一样; 
2)必须把表单的enctype属性设置为:
multipart/form-data; 
 3)表单的方法必须为post,
因为post提交的数据在消息体中,
而无大小限制。 
2、对应的action: 
 1)在 Action 中新添加 3 个
和文件上传相关的属性; 
2)如果是上传单个文件, 
uploadImage属性的类型就是 
java.io.File, 它代表被上传的文件, 
第二个和第三个属性的类型是 String, 
它们分别代表上传文 件的文件名和文件类型,
定义方式是分别是: 
jsp页面file组件的名称+ContentType, 
jsp页面file组件的名称+FileName 
3)如果上上传多个文件, 
可以使用数组或 List 
 

125.值栈ValueStack的原理与生命周期?

1)ValueStack贯穿整个 Action 的生命周期,
保存在request域中,
所以ValueStack和request的生命周期一样。
当Struts2接受一个请求时,
会迅速创建ActionContext, 
ValueStack,action。
然后把action存放进ValueStack,
所以action的实例变量可以被OGNL访问。
 请求来的时候,
action、ValueStack的生命开始,
请求结束,action、 ValueStack的生命结束; 
2)action是多例的,和Servlet不一样,
Servelt是单例的; 
3)每个action的都有一个对应的值栈,
值栈存放的数据类型是该action的实例,
以及该action中的实例变量,
Action对象默认保存在栈顶; 
4)ValueStack本质上就是一个ArrayList; 
5)关于ContextMap,
Struts 会把下面这些映射压入 ContextMap 中: 
parameters : 
该 Map 中包含当前请求的请求参数 
request : 
该 Map 中包含当前 request 对象中的
所有属性 session 
:该 Map 中包含当前 session 对象中的所有属性 
application 
:该 Map 中包含当前 
application 对象中的所有属性 
attr:该 Map 按如下顺序来检索某个属性: 
request, session, application 
6)使用OGNL访问值栈的内容时,
不需要#号,
而访问request、session、application、attr时,
需要加#号; 
7)注意: Struts2中,
OGNL表达式需要配合Struts标签才可以使用。
如:<s:property value="name"/> 
8)在struts2配置文件中引用ognl表达式 ,
引用值栈的值 ,此时使用的"$",而不是#或者%; 

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

发表回复