Struts2考试题分析

发布时间:2018-06-29 21:26:53   来源:文档文库   
字号:

题目 1

以下不属于Struts2resulttype属性( )



Aaction

Bredirect

CredirectAction

Ddispatcher

 题目 2

下列有关拦截器说法错误的是?



A.struts通过拦截器完成执行action请求处理方法前一系列操作。例如:数据封装、文件上传、数据校验等

B.struts中,直接访问jsp页面,struts将使用默认拦截器栈处理当前请求。

C.在执行action时,struts将执行若干拦截器123,执行action完成后,将继续执行拦截器321

D. 默认情况,在一个action没有配置拦截器的引用,说明当前action将不使用拦截器

 题目 3

以下哪些是Action接口提供的返回值 



A.success

B.none

C.error

D.input

 题目 4

如果要实现struts2的数据检验功能



A普通的Action类可以实现

B继承自Action接口的可以实现

C继承自ActionSupport类可以实现

D继承自ActionValidate类可以实现

 题目 5

struts2默认的处理结果类型是:



A.dispatcher

B.redirect

C.chain

D.forward

 题目 6

在值栈的上下文Context中,存在一些固定的key表示不同的对象,以下描述正确的是?



A.request,表示request作用域的数据

B.session,表示session作用域的数据

C.application,表示application作用域的数据

D.parameters,表示请求参数的所有数据

 题目 7

以下属于struts2配置文件中的配置元素是:()多选



A.<package>

B.<action>

C.

D.

 题目 8

有关值栈 context Map栈数据操作描述正确的是?



A.ActionContext.getContext().put(key,value) 直接对context进行操作

B.使用获得context中指定key的内容

C.ActionContext.getContext().getSession().put(key,value); 将数据放置context 固定keysession对应的map

D.ActionContext.getContext().getApplication().put(key,value); 将数据放置context固定keyapplication对应的map

 题目 9

有关iterator/>描述正确的是?



A.value属性的值对应值栈中的相关的数据

B.默认情况,将遍历的每一个数据都临时压入到root的栈顶,遍历结束时再将数据移除

C.如果使用var属性,在值栈的context中存放一个键值对

D.如果使用status属性,可以获得当前遍历的状态。例如:遍历的索引,是否为奇偶等

 题目 10

token令牌机制,下面说法正确的是?



A.如果要使token可用,必须在jsp表单中提供struts.xml使用token拦截器

B.struts2默认的拦截器栈中包含token拦截器

C.标签的作用在jsp页面生成一个隐藏域数据

D.token拦截器可以通过includeMethods属性设置需要进行拦截的方法

 题目 11

下列有关ValueStack内部结构描述正确的是?



A.ValueStack内部有两个逻辑部分:root context

B.ValueStack的上下文context中存放了requestsessionapplication的引用

C.ValueStackroot部分,可以用于存放对象。在jsp页面中通过struts标签,可以使用对象的属性,直接获得需要的数据。

D.ValueStackcontext部分,struts将使用key=value的形式存放数据,在jsp页面中通过struts标签,可以使用”#key”方式获指定的数据

 题目 12

struts2配置中用( )元素配置常量



A.<action>

B.

C.<constant>

D.<include>

 题目 13

下列有关访问struts2action,说法错误的是?



A.action的访问路径,需要使用标签的namespace属性的值和标签的name属性的值

B.如果访问路径是”/primer/helloWorldAction”,并在页面中成功显示,标签的namespace属性值可以是”/primer”

C.在配置<action>时,其中class属性是用来请求访问的Action类。

D.struts.xml文件中必须配置拦截器

 题目 14

Struts2中,可以在哪些配置文件中配置常量()多选



A.struts.xml

B.struts.properties

C.web.xml

D.server.xml

 题目 15

下面有关struts2配置文件说法正确的是?



A.default.properties文件,struts2提供的默认常量配置文件

B.struts-default.xml文件,struts2提供默认功能实现配置文件。此文件中提供大量的拦截器,结果集类型等

C.struts.xml文件,是struts2预留给框架使用者,编写自定义配置信息的

D.struts-default.xmlstruts-plugin.xmlstruts.xml文件加载是没有顺序的

 题目 16

元素中,那个属性可以指定Action中要执行的方法的名称( )



A.method

B.name

C.class

D.methodName

 题目 17

以下配置文件,哪些是struts2的? 



A.default.properties

B.action.xml

C.struts2.xml

D.struts.xml

 题目 18

有关值栈 root对象栈数据操作描述正确的是?



A.valueStack.push(obj) 将指定的对象压入到栈顶

B.jsp页面,可以使用 获得栈顶的数据

C.valueStack.getRoot()不能获取对象栈

D.jsp页面,可以使用 获得对象栈中name属性的值

 题目 19

下列哪个校验器可以校验两次密码输入不一致()



A.required

B. requiredstring

C.stringlength

D.fieldexpression

 题目 20

关于struts2哪些api是正确的?



A.ServletActionContext.getRequest() 可以获得HttpServletRequest

B.ServletActionContext.getResponse() 可以获得HttpServletResponse

C.ServletActionContext.getServletContext() 可以获得ServletContext

D.ServletActionContext.getRequest().getSession() 可以获得HttpSession

 题目 21

struts2 action类的编写,下列说法正确的是?



A.action类可以不继承任何类,不实现任何接口

B.action类可以实现struts提供的接口Action

C.action类可以继承ActionSupport

D.action类中请求处理方法,必须是共有的,方法名称自定义,且没有参数。

 题目 22

struts2动态方法调用的格式为:



A.ActionName?methodName.action

B.ActionName!methodName.action

C.ActionName*methodName.action

D.ActionName@mathodName.action

 题目 23

下列哪个结果类型用来转发Action()单选



A.dispatcher

B.chain

C.redirectAction

D.stream

 题目 24

.Action接口中提供的5个逻辑视图代表表单输入错误会跳转的视图名称( )



A.SUCCESS

B.ERROR

C.INPUT

D.LOGIN

 题目 25

下列有关,表单回显正确的是?



A.只要将数据放置到request作用域,struts表单标签可以根据name属性进行回显

B.只要将数据放置到session作用域,struts表单标签可以根据name属性进行回显

C.只要将数据放置到application作用域,struts表单标签可以根据name属性进行回显

D.只要将数据放置到对象栈root中,struts表单标签可以根据name属性进行回显

 题目 26

struts2在控制器类中一般需要添加相应属性的



A.setter方法

B. as方法

C.getter方法

D.is方法

 题目 27

当类型转换失败时,Struts会自动跳转到()结果 单选



A.error

B.success

C.login

D.input

 题目 28

下列哪个常量用来配置Action的扩展名()单选



A.struts.i18n.encoding

B.struts.action.extension

C.struts.serve.static.browserCache

D.struts.devMode

 题目 29

请看代码

form.jsp



用户名:


密码:name=”password” />


提交”/>



struts.xml







User.java

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;

}

}

MyAction.java

package cn.itcast.web.action;

public class MyAction extends ActionSupport implements ModelDriven{

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 this.user;

}

public String execute() {

System.out.println(username + “, “ + password);

return null;

}

}

当在form.jsp表单中,向用户名中输入zhangSan,向密码中输入123后提交,控制台会有什么样的输出结果()单选



A.null, null

B.zhangSan, 123

C.没有输出

D.抛出异常

 题目 30

下列对stringlength校验器描述正确的是()



A.可以配置minLengthmaxLength参数

B.可以配置minmax参数

C.没有参数

D.可以配置minLengthmaxLength,以及minmax参数

 题目 31

下列有关值栈描述错误的是?



A.valueStack是单例的,用于存放struts需要存放的数据

B.值栈被保存在HttpServletRequest作用域中

C.可以通过ActionContext.getValueStack()获得值栈

D.可以通过ActionContext.getContext().getValueStack()获得值栈

 题目 32

下列对局部xml配置校验说法正确的是()多选



A.配置文件必须放到当前Action同包下

B.配置文件名称必须是当前Action类名-当前name名称-validation.xml”

C.Action类中无需编写任何与参数校验相关的代码

D.可以使用@InputConfig注解来自定义校验失败后跳转的结果

 题目 33

以下有关struts.xml文件描述正确的是?

A.struts.xml文件必须放置在src下面

B.struts.xml文件中只能配置一个package

C.struts.xml文件可以放置在WEB-INF目录下

D.struts.xml文件名称可以自定义,只要以struts开头就可以

 题目 34

以下结果类型描述正确的是?



A. redirect,将请求重定向到另一个资源,一般重定向到jsp页面。

B. redirectAction,将请求重定向到另一个action

C. dispatcherstruts框架默认结果类型,将请求转发到另一个资源

D.stream确定result将从action获得流并发送到浏览器。

 题目 35(了解)

下列对全局类型转换器配置描述正确的是()多选



A.配置文件名称必须为xwork-conversion.properties

B.配置文件必须放到/WEB-INF/classes目录下

C.配置信息中属性名为目标类型名称

D.配置信息中属性值为目标类型的类型转换器类名

 题目 36(了解)

下列有关自定义类型转换器说法正确的是?



A.编写自定义转换器实现类,需要实现TypeConverter接口或继承默认实现类DefaultTypeConverter

B.转换器的转换方法,将有可能执行两次。一次是表单提交数据字符串数组,转换成指定对象;一次是标签回显指定对象,转换成字符串。

C.自定义转换可以被配置成全局转换,使用的固定的名称:xwork-conversion.properties,此转换器将覆盖struts默认实现的转换(如果有)

D.自定义转换可以被配置成局部转换器,此类转换器只对当前action有效。进行注册时,需要使用一定格式的文件名称:action类名-conversion.properties

 题目 37

OGNL表达式中符合的使用,下面说话错误的是?



A.”#key”表示可以获得值栈 context中的指定key的数据

B.”${ognl}表示在配置文件中执行ognl表达式

C.”%{‘#request.username’}”,输出的内容是从request域中读取username的值

D. ” %{‘#request.username’}”,输出的内容是”#request.username”这个字符串

 题目 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”>#

#

#



A.传智播客###

B.传智播客#传智播客##

C.传智播客#传智播客#传智播客#

D.###

 题目 40

.下列有关struts2说法正确的是?



A.struts2 依赖Servlet api,所有我们必须使用ServletActionContext工具类提供的方法操作servlet的作用域

B.struts2action是多实例的

C.struts2中的action是需要依赖servlet容器

D.struts2中可以利用ognl表达式展现数据

struts token令牌机制

利用Struts同步令牌(Token)机制来解决Web应用中的重复提交问题。该方法的基本原理是:服务器端在处理到达的request之前,会将request中的Token值与保存在当前用户session中的令牌值进行比较,看是否匹配。在处理完该request后,且在response发送给客户端之前,将会产生一个新的 Token,该Token除传给客户端以外,也会将用户session中保存的旧的Token进行替换。这样,如果用户会退到刚才的提交页面并再次提交的话,客户端传过来的Token值和服务器端的不一致,从而有效地防止了重复提交地发生。

  strutsToken机制实际上就是通过用户提交表单时,比较request中的请求参数“org.apache.struts.taglib.html.TOKEN”的值与当前会话中的属"org.apache.struts.action.TOKEN"的值是否相等,相等则是正常提交,不等则为重复提交。

   下面我们看下一个完整的操作流程,这样便于理解:

   首先我们要明白,重复提交是发生在什么情况下的,什么情况下需要处理重复提交。我们所要解决的重复提交一般是考虑用户新插入一条记录的情形,对于修改记录的重复提交一般不考虑,因为修改记录本身记录就存在ID,重复提交也只不过是重复更新数据库同一记录而已,对数据的正确性不会有影响。如果新插入一条记录不对重复提交进行处理的话,那么就会在数据库中重复插入同一记录,这样会在数据库产生冗余的重复记录。当我们要插入一条记录时,会分二步走。第一步我们要打开新增记录的页面。第二步,我们会在打开的页面中填写相关信息,然后提交,这个时候提交才算完成。

第一步:假如我们打开新增记录这个操作由add方法完成,代码如下:

public ActionForward add(ActionMapping mapping, ActionForm form,

   HttpServletRequest request, HttpServletResponse response) { 

  this.saveToken(request);//这个方法就是产生令牌值,struts已有的方法 

  return mapping.findForward("add");//返回新增页面

}

通过调用saveToken(request),产生一个token值。(注:每次调用saveToken方法产生的token值都不同)然后在记录新增页面中的内部增加一个隐含表单字段,形式如下:

value="8b2d950f23b02c527988a14171254025">



然后再把token"8b2d950f23b02c527988a14171254025"保存到当前会话中,也就是 session.setAttribute( "org.apache.struts.action.TOKEN","8b2d950f23b02c527988a14171254025");

第二步:假如我们提交这个页面数据由save方法完成,代码如下:

public ActionForward save(ActionMapping mapping, ActionForm form,

   HttpServletRequest request, HttpServletResponse response) { 

  if (this.isTokenValid(request)) {//正常提交    this.resetToken(request);//清空当前会话中的token

   return mapping.findForward("success");//返回保存成功页面

  } else {//重复提交   

   this.saveToken(request);//注:此方法在这里可要也可不要。  

   return mapping.findForward("fail");//返回重复提交提示信息页面

  }

}

判断是不是重复提交关键是isTokenValid(request)这个方法,这个方法由struts提供,如果返回结果为true则表示正常提交,false则为重复提交。isTokenValid(request)这个方法实际上主要做了三件事,

1.判断当前会话是否过期,如果过期,直接返回false

  HttpSession session = request.getSession(false);

        if (session == null) {

            return false;

        }

2.然后再判断当前会话中是否存在令牌属性"org.apache.struts.action.TOKEN",如果不存在,返回false

  String saved =(String) session.getAttribute("org.apache.struts.action.TOKEN");

        if (saved == null) {

            return false; 为什么令牌属性"org.apache.struts.action.TOKEN"会不存在呢,那是因为当用户正常提交后,会调用this.resetToken(request);//清空当前会话中的token值。也就是说resetToken(request)方法中调用了 session.removeAttribute("org.apache.struts.action.TOKEN");

当用户重复提交时,我说了"this.saveToken(request);//此方法在这里可要也可不要。",下面我们分

析下,如果不调用这个方法,会话中就不会再重新保存token值,那么再刷新的时候,session中的token

值总是为null,isTokenValid(request)直接返回false,如果调用this.saveToken(request)的话,

session中会重新添加token属性值。这个时候isTokenValid(request)会进行下面第三步的判断。

3.从当前会话中取得token的值与当前request中得到的token值比较,相同返回true,不同返回false

  String token = request.getParameter("org.apache.struts.taglib.html.TOKEN");

        if (token == null) {

            return false;         return saved.equals(token);

如果是重复刷新,那么每次request中的令牌值都是一样的,但每次刷新当前会话中的令牌值都被重新替换了,所以会返回false

注:使用struts的表单提交Token机制时,提交的表单一定要写成<html:form>这种形式,如果写成

这种形式的话,尽管调用saveToken(request)方法也不会在当前的
里面生成隐含表单,最终的结果都是"重复提交".

动态方法调用

Struts2中动态方法调用有三种方式,动态方法调用就是为了解决一个Action对应多个请求的处理,以免Action太多

第一种方式:指定method属性

这种方式我们前面已经用到过,类似下面的配置就可以实现



method="chainAction">

redirect

  




method="plainText">

/WEB-INF/JspPage/chapter2/plaintext.jsp

第二种方式:感叹号方式(需要开启),官网不推荐使用这种方式,建议大家不要使用.

用这种方式需要先开启一个开关



将此常量设置为true,这种方式才能使用,使用见示例

Action

package chapter3.action;

public class Chapter3Action {

public String result1(){

   return "result1";

}



public String result2(){

   return "result2";

}

}

Jsp中访问方式



    result1a><br><ahref="

{basePath}/chapter3/chapter3Action!result2">result2



如果配置了后缀,必须这样写:

/chapter4/chapter4Action!create.action

XML中配置方式



  

    "result1">/WEB-INF/JspPage/chapter3/result1.jsp

    /WEB-INF/JspPage/chapter3/result2.jsp

    /WEB-INF/JspPage/chapter3/chapter3.jsp

  

第三种方式:通配符方式(官网推荐使用)

首先得关闭开关



这一种方式是由第一种转变过来的,我们可以看到,第一种方式有很多重复的代码,那么我们可以进行变形,看下面的代码



method="{1}">

/…/test.jsp

on>

chapter3_*这里的*就是你呆会要匹配的字符串,即你在后面的请求中得这样写

http://...../ chapter3_create http://...../ chapter3_update

注意,这时你action中必须有createupdate方法与之匹配,甚至还可以这样匹配



method="{1}">

/…/{1}.jsp



但是这时一定要有对应的JSP页面存在,并且相应的路径不能错,这就对我们的命名进行了强制性的规定,一定要规范.

课堂示例:

Action

public class Chapter4Action extends ActionSupport {

public String list(){

   return "list";

}



public String create(){

   return "create";

}



public String index(){

   return "index";

}

}

XML:



    /WEB-INF/JspPage/chapter4/chapter4_{1}.jsp



访问Servlet API

有时我们需要用到Request, Response, S

本文来源:https://www.2haoxitong.net/k/doc/e83f96cfa300a6c30d229f2e.html

《Struts2考试题分析.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式