1)Struts2如何启动
Struts2是通过web.xml中的过滤器StrutsPrepareAndExecuteFilter启动的,Tomcat服务器启动的时候,会执行一次StrutsPrepareAndExecuteFilter里面的init方法,加载struts.xml配置文件,将配置文件的内容封装为javabean存放在内存中,以后用户请求将会读取内存,读取数据,而不用每次都在struts.xml中读取。
2)Struts2的核心控制器StrutsPrepareAndExecuteFilter的作用
StrutsPrepareAndExecuteFilter 主要负责拦截 url请求,可以在web.xml中配置拦截的url,
3)struts2配置文件的加载顺序?
struts.xml ——> struts.properties常量可以在struts.xml或struts.properties中配置,如果在多个文件中配置了同一个常量,则后一个文件中配置的常量值会覆盖前面文件中配置的常量值. struts.xml文件的作用:通知Struts2框架加载对应的Action资源
4)struts2是如何管理action的?这种管理方式有什么好处?
struts2框架中使用包来管理Action,包的作用和java中的类包是非常类似的。 主要用于管理一组业务功能相关的action。在实际应用中,我们应该把一组业务功能相关的Action放在同一个包下。
5)struts2中的默认包struts-default有什么作用?
1.struts-default包是由struts内置的,它定义了struts2内部的众多拦截器和Result类型,而Struts2很多核心的功能都是通过这些内置的拦截器实现,如:从请求中 把请求参数封装到action、文件上传和数据验证等等都是通过拦截器实现的。当包继承了struts-default包才能使用struts2为我们提供的这些功能。
2.struts-default包是在struts-default.xml中定义,struts-default.xml也是Struts2默认配置文件。 Struts2每次都会自动加载 struts-default.xml文件。
3.通常每个包都应该继承struts-default包。
6)struts2的action的URL访问路径由什么构成?
由两部分组成:包的命名空间+action的名称 [ + action的后缀 ],/crud1/userAdd.action,crud1是命名空间,userAdd是struts.xml中配置的action的名称。
7)在struts.xml中可以不为action指定class属性吗?struts2中有哪些默认的属性?
可以,如果没有为action指定class,默认是com.opensymphony.xwork2.ActionSupport
默认属性:
如果没有为action指定class ActionSupport
如果没有为action指定method execute() 注意:ActionSupport的execute方法里面就一句话return "success";
如果没有指定result的name success
如果没有指定result的type dispatcher
action中默认都有一个拦截器的引用,即:
注意:
1.一旦我们为该包中的某个action显式指定了某个拦截器,则默认拦截器不会起作用,所以此时要显式的引进默认的拦截器;
2.每个包只能指定一个默认拦截器,每个默认拦截器只针对当前包下有效。
1.validate()方法会校验action中所有与execute方法签名相同的方法;
2.要校验指定的方法通过重写validateXxx()方法实现, validateXxx()只会校验action中方法名为Xxx的方法。其中Xxx的第一个字母要大写;
3.当某个数据校验失败时,调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport),如果系统 的fieldErrors包含失败信息,struts2会将请求转发到名为input的result;
4.在input视图中可以通过
5.先执行validateXxxx()->validate()->如果出错了,会转发
9)拦截器的作用?拦截器与过滤器的区别?
1)拦截器是对调用的Action起作用,它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码。拦截器只能拦截Action,说明白点拦截器其实是Action的功能块,只在Action前后执行。拦截器可以抽象出一部分代码可以用来完善原来的action。同时可以减轻代码冗余,提高重用率。
2) 过滤器是拦截用户请求的,范围明显比拦截器大的多。
10)struts2如何完成从html表单到action的类型转换?
1.在 struts2 中, 把请求参数映射到 action 属性的工作由 Params拦截器负责, 它是默认的 defaultStack 拦截器中的一员. Params拦截器可以自动完成字符串和基本数据类型之间转换.
2.在web应用中,提交的数据基本都是字符串。
3. 对于引用类型的数据(除String、Collection)转换,需要自定义类型转换器;
4.自定义类型转化器必须实现TypeConverter 接口或对这个接口的某种具体实现做扩展,如:StrutsTypeConverter,重写convertToString和convertFromString方法;
5.两种自定义类型的转换器:
>> 局部:
创建一个属性文件: ActionClassName-conversion.properties, 该文件需和相对应的动作类(Action)放在同一个目录下, ActionClassName是Action的类名,后面的-conversion.properties 是固定写法。在properties文件中的内容为: 属性名称=类型转换器的全类名
>> 全局:
在 WEB-INF/classes/ 目录下创建 xwork-conversion.properties 文件. 在properties文件中的内容为: 待转换的类型=类型转换器的全类名
注意:对于转换的是属性,只需要写属性名,如果是对应的是类型,则需要写全类名
11).struts2如何防止用户表单重复提交?
第一步:在表单中加入
第二步,使用token栏截器,定义invalid.token结果集
要使用
当然还可以使用tokenSession
12).struts2如何完成文件的上传?
1、JSP页面:
JSP页面的上传文件的组件:
2. 必须把表单的enctype属性设置为:multipart/form-data;
3.表单的方法必须为post,因为post提交的数据在消息体中,而无大小限制。
对应的action:
4.在 Action 中新添加 3 个和文件上传相关的属性
5.如果是上传单个文件, uploadImage属性的类型就是 java.io.File, 它代表被上传的文件, 第二个和第三个属性的类型是 String, 它们分别代表上传文件的文件名和文件类型,定义方式是分别是:jsp页面file组件的名称+ContentType, jsp页面file组件的名称+FileName
6如果上上传多个文件, 可以使用数组或 List