struts2在mvc中的体现。css
struts2的经常使用标签有哪些: html
ui:form,textfiled,textarea,password,select,radio, checkbox...
非ui标签: if,elseif, else, iterator, text, i18n, property....前端
action获取请求传递的数据的方式:
一、经过request获取
二、每一个属性set、get获取
三、别名.属性,在action中对属性bean进行set、get
四、实现ModelDrive接口;
struts2获取servlet-api的方式:
一、ioc方式,实现接口;
二、非ioc方式, 使用类ServletActionContext类进行获取; ??
struts2验证:
一、js前端校验;
二、业务方法中直接校验;
三、validate方法或validateXXx方法进行校验;
四、validation外部xml框架校验;
struts2 国际化;
struts2文件上传;java
struts2 拦截器, 自定义拦截器;web
总结:ajax
struts2
1.Struts2跟Struts1的区别?
action层对比: struts1必须继承, struts2能够继承也能够不继承
线程方面对比: struts1单例模式(全部的请求共享同一个类的实例), struts2是原型模式(对每个的请求都建立一个新的实例)
依赖方面对比: struts1依赖servlet-api; struts2不依赖servlet-api;
测试方面对比: struts1的action单元测试很困难; strtus2单元测试很是容易;
封装方面对比: strtus1使用ActionForm对象获取jsp传递的参数; struts2有多种方式获取请求的数据;
表达式的对比: struts1使用jstl表达式; struts2使用jstl,ognl等表达式;
类型转换对比: struts1使用commons-beanutils进行类型转换; struts2使用OGNL表达式进行类型转换;apache
2.Struts2的运行原理(执行流程)?api
一、客户端浏览器发出HTTP请求。浏览器
二、根据web.xml配置,该请求被FilterDispatcher接收。服务器
三、根据struts.xml配置,找到须要调用的Action类和方法, 并经过IoC方式,将值注入给Aciton。
四、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
五、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。
六、返回HTTP响应到客户端浏览器。
3.浅谈struts2拦截器, 你使用过哪些内置拦截器?
拦截器的做用:每个Action请求都包装在一系列的拦截器的内部。拦截器能够在Action执行前作类似的操做也能够在Action执行直后作回收操做。
1、params拦截器
params 拦截器提供了框架必不可少的功能,将请求中的数据设置到Action中的属性上。
2、staticParams拦截器
staticParams拦截器是将配置文件经过action元素的子元素params设置的参数设置到对应的Action的属性中。
3、servletConfig拦截器
servletConfig拦截器提供了一种将源于servlet API的各类对象注入Action当中的简洁方法。Action必须实现相对应的接口,servletConfig拦截器才能将对应的servlet对象注入Action中。
4、fileUpload拦截器
ileUpload拦截器将文件和元数据从多重请求(multipart/from-data)转换为常规的请求数据,以便将他们设置在对应的Action属性中。
5、validation拦截器
validation拦截器用于执行数据效验。
6、workflow拦截器
workflow拦截器提供当数据效验错误时终止执行流程的功能。
7、exception拦截器
exception拦截器捕获异常,而且可以根据类型将捕获的异常映射到用户自定义的错误页面。该拦截器应该位于所定义的全部拦截器中的一个。
struts2框架定义了许多有用的拦截器,这里我就介绍了这七种,若是在实际开发中有须要,咱们就能够查看struts-default.xml文件。去了解更多struts2自带对的拦截器。
4.如何使用struts2中的validate方法验证数据;
validate()方法是对全部的请求都执行
validateAdd()只对add()请求的方法执行.
5.struts2中validate的执行过程是怎么样的?
1.类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性
2.若是在执行类型转换的过程当中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息添加到fieldErrors里。无论类型转换是否出现异常,都将进入第三步。
3.系统经过反射技术先调用action中的validateXxx()方法
4.再调用action中的validate()方法
5.通过上面4步,若是系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发到名称为input的视图。若是系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法
注:如发送请求后进入input视图,并不必定是验证失败,若是类型转换出现异常,也将进入input视图
fieldError 有值的问题, input指明的页面
6.如何在Action中使用request,response,session等对象? 有哪些方式? (2种方式)
方法一:使用import org.apache.struts2.interceptor包下的ServletResponseAware和ServletRequestAware方法,须要Action类实现该方法!
public class TestAction implements ServletRequestAware,ServletResponseAware { private HttpServletRequest request; private HttpServletResponse response; @Override public void setServletResponse(HttpServletResponse response) { this.response=response; } @Override public void setServletRequest(HttpServletRequest request) { this.request=request; } }
方法二:使用org.apache.struts2.ActionContext类的get方法获得request和response还有session对象
import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.opensymphony.xwork2.ActionContext; public class TestAction { public String getObject() { HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_REQUEST); HttpServletResponse response = (HttpServletResponse) ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_RESPONSE); Map<String, Object> session = ActionContext.getContext().getSession(); return null; } }
方法三:Struts2为咱们提供了最简单的方式,使用org.apache.struts2.ServletActionContext类,能够直接获得request,response和session方法
public class TestAction { public String getObject() { HttpServletRequest request = ServletActionContext.getRequest(); HttpServletResponse response = ServletActionContext.getResponse(); HttpSession session = ServletActionContext.getRequest().getSession(); return null; } }
7.Struts2上传文件,如何设置上传文件格式和上传文件大小? 如何修改Struts默认的上传文件大小?
<action name="fileupload" class="uploasAction"> <interceptor-ref name="defaultStack"> <param name="fileUpload.allowedTypes"> image/png,image/gif,image/jpeg,image/jpg,image/x-png </param> <param name="fileUpload.maximumSize">102400000</param>
</interceptor-ref>
</action>
原来上网查了一下,还要加入这个东西
在struts.xml中加入 <constant name="struts.multipart.maxSize" value="10000000"/> ,大约10M
才能使拦截器起到做用
struts.multipart.maxSize掌控整个项目所上传文件的最大的Size
struts.multipart.maxSize和fileUpload拦截器的maximumSize属性分工不一样,总结以下:
1.struts.multipart.maxSize掌控整个项目所上传文件的最大的Size。超过了这个size,后台报错,程序处理不了如此大的文件。fielderror里面会有以下的提示:
the request was rejected because its size (16272982) exceeds the configured maximum (9000000)
2.fileUpload拦截器的maximumSize属性必须小于struts.multipart.maxSize的值。
struts.multipart.maxSize默认2M,当maximumSize大于2M时,必须设置struts.multipart.maxSize的值大于maximumSize。
3.当上传的文件大于struts.multipart.maxSize时,系统报错
当上传的文件在struts.multipart.maxSize和maximumSize之间时,系统提示:
File too large: file "MSF的概念.ppt" "upload__5133e516_129ce85285f__7ffa_00000005.tmp" 6007104
当上传的文件小于maximumSize,上传成功。
8.如何实现Struts2自定义拦截器;
1.实现Interceptor 接口, 实现接口里面的方法
2.继承AbstractInterceptor 抽象类, 重写里面的方法
须要在struts.xml文件中配置interceptor 标签及 interceptor-stack拦截器链(栈)标签;
而后在每一个action标签中引用便可.
9.Struts2 如何实现国际化
须要struts.xml文件中定义<constant name="struts.custom.i18n.resources" value="message" />
须要给不一样的语言地区配置不一样的资源文件; message_zh_CN.properties, message_en_US.properties, zh_TW, zh_HK, en_UK,
在jsp页面使用s:text标签实现获取国际化中的数据;
在action中使用getText方法实现获取国际化中的数据(前提是action必须继承ActionSupport);
在jsp页面中使用i18n标签获取国际化中的数据。
10.struts-default.xml 文件的做用
struts-default.xml文件是struts2框架默认加载的配置文件。它定义struts2一些核心的bean和拦截器。
这些拦截器是以 key-value 对的形式配置在struts-default.xml中,
其中 name 是拦截器名字,就是后面使用该拦截器的引用点,value则指定拦截器的实现类。
11.Struts 有哪些标签; 你使用过哪些?
12.Struts支持哪些表达式? OGNL有什么特色?
el、jstl表达式
OGNL有什么特色:
13.OGNL表达式中’#’, ‘%’, ’$’ 三个符号有哪些做用?
1)访问非根对象属性,例如示例中的#session.msg表达式,因为Struts 2中值栈被视为根对象,因此访问其余非根对象时,须要加#前缀。实际上,#至关于ActionContext. getContext();#session.msg表达式至关于ActionContext.getContext().getSession(). getAttribute(”msg”) 。
2)用于过滤和投影(projecting)集合,如示例中的persons.{?#this.age>20}。
3)用来构造Map,例如示例中的#{’foo1′:’bar1′, ’foo2′:’bar2′}。
2.%符号%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。以下面的代码所示: 构造Map <s:set name=”foobar” value=”#{’foo1′:’bar1′, ‘foo2′:’bar2′}” />
The value of key “foo1″ is <s:property value=”#foobar['foo1']” />
不使用%:<s:url value=”#foobar['foo1']” />
使用%:<s:url value=”%{#foobar['foo1']}” />
3.$符号$符号主要有两个方面的用途。
在国际化资源文件中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间。
在Struts 2框架的配置文件中引用OGNL表达式,例以下面的代码片段所示:
<validators>
<field name=”intb”>
<field-validator type=”int”>
<param name=”min”>10</param>
<param name=”max”>100</param>
<message>BAction-test校验:数字必须为${min}为${max}之间!</message>
</field-validator>
</field>
</validators>
14.Struts2中返回结果类型(struts-default.xml)中的dispatcher, redirect,stream 和redirect-action的区别?
dispatcher | org.apache.struts2.dispatcher. ServletDispatcherResult |
默认结果类型,用来呈现JSP页面 |
chain | com.opensymphony.xwork2. ActionChainResult |
将action和另一个action连接起来 |
freemarker | org.apache.struts2.views.freemarker. FreemarkerResult |
呈现Freemarker模板 |
httpheader | org.apache.struts2.dispatcher. HttpHeaderResult |
返回一个已配置好的HTTP头信息响应 |
redirect | org.apache.struts2.dispatcher. ServletRedirectResult |
将用户重定向到一个已配置好的URL |
redirectAction | org.apache.struts2.dispatcher. ServletActionRedirectResult |
将用户重定向到一个已定义好的action |
stream | org.apache.struts2.dispatcher. StreamResult |
将原始数据做为流传递回浏览器端, 该结果类型对下载的内容和图片很是有用 |
velocity | org.apache.struts2.dispatcher. VelocityResult |
呈现Velocity模板 |
xslt | org.apache.struts2.views.xslt. XSLTResult |
呈现XML到浏览器, 该XML能够经过XSL模板进行转换 |
plaintext | org.apache.struts2.dispatcher. PlainTextResult |
返回普通文本类容 |
15.ActionSupport类的做用?
验证, 获取资源文件的数据, action
16.Struts2 拦截器有哪些用处? 你在项目中是如何使用的?
在调用action方法前执行,通常用在权限控制
拦截器(interceptor)是Struts2最强大的特性之一,也能够说是struts2的核心,拦截器可让你在Action和result被执行以前或以后进行一些处理。同时,拦截器也可让你将通用的代码模块化并做为可重用的类。
Struts2中的不少特性都是由拦截器来完成的。拦截是AOP的一种实现策略。拦截器是动态拦截Action调用的对象。它提供了一种机制可使开发者能够定义在一个action执行的先后执行的代码,也能够在一个action执行前阻止其执行。同时也是提供了一种能够提取action中可重用的部分的方式。
20.Struts2中解决重复提交的token 思想是什么?
须要在jsp的页面使用s:token标签;
须要在struts.xml文件的action中配置<interceptor-ref name="token" />
须要配置一个返回invalid.token结果对应的页面 <result name="invalid.token">/reg.jsp</result>
22.struts2的四个主题simple,xhtml(默认主题),css_xhtml和ajax的区别?
23.FilterDispatcher(StrutsPrepareAndExecuteFilter)核心控制器的做用?