Struts2考试题分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目1
以下不属于Struts2中result的type属性( )
A.action
B.redirect
C.redirectAction
D.dispatcher
题目2
下列有关拦截器说法错误的是
通过拦截器完成执行action请求处理方法前一系列操作。
例如:数据封装、文件上传、数据校验等
B.在struts中,直接访问jsp页面,struts将使用默认拦截器栈处理当前请求。
C.在执行action时,struts将执行若干拦截器1、2、3,执行action完成后,将继续执行拦截器3、2、1
D. 默认情况,在一个action没有配置拦截器的引用,说明当前action将不使用拦截器
题目3
以下哪些是Action接口提供的返回值
题目4
如果要实现struts2的数据检验功能
A普通的Action类可以实现
B继承自Action接口的可以实现
C继承自ActionSupport类可以实现
D继承自ActionValidate类可以实现
题目5
struts2默认的处理结果类型是:
题目6
在值栈的上下文Context中,存在一些固定的key表示不同的对象,以下描述正确的是
,表示request作用域的数据
,表示session作用域的数据
,表示application作用域的数据
,表示请求参数的所有数据
题目7
以下属于struts2配置文件中的配置元素是:()多选)
A.<package>
B.<action>
C.<form-beans>
D.<action-mappings>
题目8
有关值栈context Map栈数据操作描述正确的是
直接对context进行操作
B.使用<s:property value="#key"/>获得context中指定key的内容
将数据放置context 固定key为session对应的map中
将数据放置context固定key为application对应的map中
题目9
有关<s:iterator/>描述正确的是
属性的值对应值栈中的相关的数据
B.默认情况,将遍历的每一个数据都临时压入到root的栈顶,遍历结束时再将数
据移除
C.如果使用var属性,在值栈的context中存放一个键值对
D.如果使用status属性,可以获得当前遍历的状态。
例如:遍历的索引,是否为奇偶等
题目10
token令牌机制,下面说法正确的是
A.如果要使token可用,必须在jsp表单中提供<s:token />,使用token拦截器
B.在struts2默认的拦截器栈中包含token拦截器
C.<s:token>标签的作用在jsp页面生成一个隐藏域数据
拦截器可以通过includeMethods属性设置需要进行拦截的方法
题目11
下列有关ValueStack内部结构描述正确的是
内部有两个逻辑部分:root 和context
的上下文context中存放了request、session、application的引用
的root部分,可以用于存放对象。
在jsp页面中通过struts标签,可以使用对象的属性,直接获得需要的数据。
的context部分,struts将使用key=value的形式存放数据,在jsp页面中通过struts 标签,可以使用”#key”方式获指定的数据
题目12
在struts2配置中用()元素配置常量
A.<action>
B.<package>
C.<constant>
D.<include>
题目13
下列有关访问struts2的action,说法错误的是
的访问路径,需要使用<package>标签的namespace属性的值和<action>标签的name属性的值
B.如果访问路径是”/primer/helloWorldAction”,并在页面中成功显示,<package>标签的namespace属性值可以是”/primer”
C.在配置<action>时,其中class属性是用来请求访问的Action类。
D.在文件中必须配置拦截器
题目14
在Struts2中,可以在哪些配置文件中配置常量()多选
题目15
下面有关struts2配置文件说法正确的是
文件,struts2提供的默认常量配置文件
文件,struts2提供默认功能实现配置文件。
此文件中提供大量的拦截器,结果集类型等
文件,是struts2预留给框架使用者,编写自定义配置信息的
,和文件加载是没有顺序的
题目16
在<action>元素中,那个属性可以指定Action中要执行的方法的名称( )
题目17
以下配置文件,哪些是struts2的
题目18
有关值栈root对象栈数据操作描述正确的是
将指定的对象压入到栈顶
B.在jsp页面,可以使用<s:property/> 获得栈顶的数据
不能获取对象栈
D.在jsp页面,可以使用<s:property value="name"/> 获得对象栈中name属性的值
题目19
下列哪个校验器可以校验“两次密码输入不一致”()
B. requiredstring
题目20
关于struts2哪些api是正确的
可以获得HttpServletRequest
可以获得HttpServletResponse
可以获得ServletContext
可以获得HttpSession
题目21
struts2 action类的编写,下列说法正确的是
类可以不继承任何类,不实现任何接口
类可以实现struts提供的接口Action
类可以继承ActionSupport
类中请求处理方法,必须是共有的,方法名称自定义,且没有参数。
题目22
struts2动态方法调用的格式为:
!
*
题目23
下列哪个结果类型用来转发到Action()单选
题目24
.在Action接口中提供的5个逻辑视图代表表单输入错误会跳转的视图名称是( )
题目25
下列有关,表单回显正确的是
A.只要将数据放置到request作用域,struts表单标签可以根据name属性进行回显
B.只要将数据放置到session作用域,struts表单标签可以根据name属性进行回显
C.只要将数据放置到application作用域,struts表单标签可以根据name属性进行回显
D.只要将数据放置到对象栈root中,struts表单标签可以根据name属性进行回显
题目26
struts2在控制器类中一般需要添加相应属性的
方法
B. as方法
方法
方法
题目27
当类型转换失败时,Struts会自动跳转到()结果单选
题目28
下列哪个常量用来配置Action的扩展名()单选
题目29
请看代码
<s:form action=”myAction” namespace=”/” theme=”simple”>用户名:<s:textfield name=”username” /><br/>
密码:<s:password name=”password” /><br/>
<s:submit value=”提交”/>
</s:form>
<package name=”xxx” namespace=”/” extends=”struts-default”>
<action name=”myAction” class=”
</package>
public class User {
private String username;
private String password;
public void setUsername(String username) {
this. username = username;
}
public void setPassword(String password) {
this. password = password;
}
}
package class MyAction extends ActionSupport implements ModelDriven<User>{ private User user = new User();
private String username;
private String password;
public void setUsername(String username) {
this. username = username;
}
public void setPassword(String password) {
this. password = password;
}
public User getModel() {
return ;
}
public String execute() {
+ “, “ + password);
return null;
}
}
当在表单中,向用户名中输入zhangSan,向密码中输入123后提交,控制台会有什么样的输出结果()单选
, null
, 123
C.没有输出
D.抛出异常
题目30
下列对stringlength校验器描述正确的是()
A.可以配置minLength和maxLength参数
B.可以配置min和max参数
C.没有参数
D.可以配置minLength和maxLength,以及min和max参数
题目31
下列有关值栈描述错误的是
是单例的,用于存放struts需要存放的数据
B.值栈被保存在HttpServletRequest作用域中
C.可以通过()获得值栈
D.可以通过().getValueStack()获得值栈
题目32
下列对局部xml配置校验说法正确的是()多选
A.配置文件必须放到当前Action同包下
B.配置文件名称必须是“当前Action类名-当前<action>的name名称”
C.在Action类中无需编写任何与参数校验相关的代码
D.可以使用@InputConfig注解来自定义校验失败后跳转的结果
题目33
以下有关文件描述正确的是
文件必须放置在src下面
文件中只能配置一个package
文件可以放置在WEB-INF目录下
文件名称可以自定义,只要以struts开头就可以
题目34
以下结果类型描述正确的是
A. redirect,将请求重定向到另一个资源,一般重定向到jsp页面。
B. redirectAction,将请求重定向到另一个action
C. dispatcher,struts框架默认结果类型,将请求转发到另一个资源确定result将从action获得流并发送到浏览器。
题目35(了解)
下列对全局类型转换器配置描述正确的是()多选
A.配置文件名称必须为
B.配置文件必须放到/WEB-INF/classes目录下
C.配置信息中属性名为目标类型名称
D.配置信息中属性值为目标类型的类型转换器类名
题目36(了解)
下列有关自定义类型转换器说法正确的是
A.编写自定义转换器实现类,需要实现TypeConverter接口或继承默认实现类DefaultTypeConverter
B.转换器的转换方法,将有可能执行两次。
一次是表单提交数据字符串数组,转换成指定对象;一次是标签回显指定对象,转换成字符串。
C.自定义转换可以被配置成全局转换,使用的固定的名称:,此转换器将覆盖struts默认实现的转换(如果有)
D.自定义转换可以被配置成局部转换器,此类转换器只对当前action有效。
进行注册时,需要使用一定格式的文件名称:action类名
题目37
OGNL表达式中符合的使用,下面说话错误的是
A.”#key”表示可以获得值栈context中的指定key的数据
B.”${ognl}”表示在配置文件中执行ognl表达式
C.” %{‘#’}”,输出的内容是从request域中读取username的值
D. ” %{‘#’}”,输出的内容是”#”这个字符串
题目38
下面有关modelDriven机制,分析正确的是
A.必须实现接口ModelDriven,通过在实现接口时,提供javabean类型作为泛型参数。
B.需要实现接口的方法getModel()
C.编写一个成员变量,可以不实例化
D.在struts的默认拦截器栈中,已经使用了modelDriven拦截器,此拦截器将当前action提供的javabean对象压入到栈顶,在通过其他拦截器从而完成整个数
据的封装。
题目39
下面代码执行结果?
在action中进行如下操作:
ActionContext().getContext().put(“itcast”,”传智播客”);
重定向到jsp页面后,在jsp页面使用标签
<s:property value=”#itcast”>#
<s:property value=”itcast”>#
<s:property value=”#”>#
A.传智播客###
B.传智播客#传智播客##
C.传智播客#传智播客#传智播客#
D.###
题目40
.下列有关struts2说法正确的是
依赖于Servlet api,所有我们必须使用ServletActionContext工具类提供的方法操作servlet的作用域
的action是多实例的
C.在struts2中的action是需要依赖servlet容器的
D.在struts2中可以利用ognl表达式展现数据
struts token令牌机制
利用Struts同步令牌(Token)机制来解决Web应用中的重复提交问题。
该方法的基本原理是:服务器端在处理到达的request之前,会将request中的Token值与保存在当前用户session中的令牌值进行比较,看是否匹配。
在处理完该request后,且在response发送给客户端之前,将会产生一个新的Token,该Token除传给客户端以外,也会将用户session中保存的旧的Token进行替换。
这样,如果用户会退到刚才的提交页面并再次提交的话,客户端传过来的Token值和服务器端的不一致,从而有效地防止了重复提交地发生。
struts的Token机制实际上就是通过用户提交表单时,比较request中的请求参数“的值与当前会话中的属""的值是否相等,相等则是正常提交,不等则为重复提交。
下面我们看下一个完整的操作流程,这样便于理解:
首先我们要明白,重复提交是发生在什么情况下的,什么情况下需要处理重复提交。
我们所要解决的重复提交一般是考虑用户新插入一条记录的情形,对于修改记录的重复提交一般不考虑,因为修改记录本身记录就存在ID,重复提交也只不过是重复更新数据库同一记录而已,对数据的正确性不会有影响。
如果新插入一条记录不对重复提交进行处理的话,那么就会在数据库中重复插入同一记录,这样会在数据库产生冗余的重复记录。
当我们要插入一条记录时,会分二步走。
第一步我们要打开新增记录的页面。
第二步,我们会在打开的页面中填写相关信息,然后提交,这个时候提交才算完成。
第一步:假如我们打开新增记录这个操作由add方法完成,代码如下:
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {?
(request);断当前会话是否过期,如果过期,直接返回false
HttpSession session = (false);
if (session == null) {
return false;
}
2.然后再判断当前会话中是否存在令牌属性"",如果不存在,返回false
String saved =(String) ("");
if (saved == null) {
return false; 为什么令牌属性""会不存在呢,那是因为当用户正常提交后,会调用(request);当前会话中取得token的值与当前request中得到的token值比较,相同返回true,不同返回false
String token = ("");
if (token == null) {
return false; return (token);
如果是重复刷新,那么每次request中的令牌值都是一样的,但每次刷新当前会话中的令牌值都被重新替换了,所以会返回false
注:使用struts的表单提交Token机制时,提交的表单一定要写成<html:form></html:form>这种形式,如果写成<form></form>这种形式的话,尽管调用saveToken(request)方法也不会在当前的<form></for m>里面生成隐含表单,最终的结果都是"重复提交".
动态方法调用
在Struts2中动态方法调用有三种方式,动态方法调用就是为了解决一个Action对应多个请求的处理,以免Action太多
第一种方式:指定method属性
这种方式我们前面已经用到过,类似下面的配置就可以实现
<action name="chainAction" class=""
method="chainAction">
<result name="chainAction" type="chain">redirect</result>
</action>?
<action name="plainText" class=""
method="plainText">
<result name="plainText" type="plainText">/WEB-INF/JspPage/chapter2/</result> </action>
第二种方式:感叹号方式(需要开启),官网不推荐使用这种方式,建议大家不要使用.
用这种方式需要先开启一个开关
<constant name="" value="true" />
将此常量设置为true,这种方式才能使用,使用见示例
Action
package ;
public class Chapter3Action {
public String result1(){
return "result1";
}
public String result2(){
return "result2";
}
}
Jsp中访问方式
<body>
<a
href="basePath/chapter3/chapter3Action!result1">result1</a><br>< ahref="
{basePath}/chapter3/chapter3Action!result2">result2</a><br>
</body>
如果配置了后缀,必须这样写:
/chapter4/chapter4Action!
XML中配置方式
<package name="chapter3" namespace="/chapter3" extends="struts-default">
<action name="chapter3Action" class="">
<result name="result1">/WEB-INF/JspPage/chapter3/</result>
<result name="result2">/WEB-INF/JspPage/chapter3/</result>
<result name="chapter3">/WEB-INF/JspPage/chapter3/</result>
</action>
</package>
第三种方式:通配符方式(官网推荐使用)
首先得关闭开关
<constant name="" value="false" />
这一种方式是由第一种转变过来的,我们可以看到,第一种方式有很多重复的代码,那么我们可以进行变形,看下面的代码
<action name="chapter3_*" class=""
method="{1}">
<result name="test">/…/</result>
</action>
chapter3_*这里的*就是你呆会要匹配的字符串,即你在后面的请求中得这样写
chapter3_create 或chapter3_update
注意,这时你action中必须有create和update方法与之匹配,甚至还可以这样匹配
<action name="chapter3_*" class=""
method="{1}">
<result name="test">/…/{1}.jsp</result>
</action>
但是这时一定要有对应的JSP页面存在,并且相应的路径不能错,这就对我们的命名进行了强制性的规定,一定要规范.
课堂示例:
Action
public class Chapter4Action extends ActionSupport {
public String list(){
return "list";
}
public String create(){
return "create";
}
public String index(){
return "index";
}
}
XML:
<action name="chapter4_*" class="" method="{1}">
<result name="{1}">/WEB-INF/JspPage/chapter4/chapter4_{1}.jsp</result>
</action>
访问Servlet API
有时我们需要用到Request, Response, S。