Struts2考试题分析_第1页
Struts2考试题分析_第2页
Struts2考试题分析_第3页
Struts2考试题分析_第4页
Struts2考试题分析_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、题目 1 以下不属于Struts2中result的type属性( )Aaction Bredirect重定向到另外一个页面CredirectAction 重定向到另外一个动作action,可以是同包下的,也可以跨包访问。Ddispatcher 转发至一个页面,struts2中的默认值。 题目 2 下列有关拦截器说法错误的是?A.struts通过拦截器完成执行action请求处理方法前一系列操作。例如:数据封装、文件上传、数据校验等B.在struts中,直接访问jsp页面,Jsp页面是是由servlet容器维护的,与struts2默认拦截器没有关系,struts2中

2、如果想拦截jsp页面,可以配置过滤器,拦截路径*.jsp。struts将使用默认拦截器栈处理当前请求。C.在执行action时,struts将执行若干拦截器1、2、3,执行action完成后,将继续执行拦截器3、2、1D. 默认情况,在一个action没有配置拦截器的引用,说明当前action将不使用拦截器 如果不配置拦截器,struts2会有默认执行的拦截器。在struts.xml文件中的package标签extends属性配置struts-default,它里面会很多默认配置的拦截器。比如:servletConfig(在动作类中访问servlet的API时使用该拦截器完成)、staticP

3、aram(在动作类中注入静态参数时会调用)、params(给动作类封装动态参数)、modelDriven(模型驱动数据封装时调用)等。 题目 3 以下哪些是Action接口提供的返回值SUCCESS:对应字符串"success".成功时使用NONE:对应字符串"none"。不转向任何视图时使用。等同于null。ERROR:对应字符串"error".转向错误页面INPUT:对应字符串"input"。回显时使用LOGIN:对应字符串"login"。转向登陆页面。? A.

4、successB.noneC.errorD.input  题目 4 如果要实现struts2的数据检验功能 A普通的Action类可以实现B继承自Action应继承ActionSupport类,因为他实现了Validateable接口,需要重写validate方法,在validate方法中书写具体的验证操作。接口的可以实现C继承自ActionSupport类可以实现D继承自ActionValidate类可以实现  题目 5 struts2默认的处理结果类型dispatcher:动作执行完毕后,使用转发技术转发到指定的页面。也是默认的。redirect:动

5、作执行完毕后,使用重定向到指定的页面。chain:动作执行完毕后,使用转发技术转发到另外的一个action。redirectAction:动作执行完毕后,使用重定向到指定的另外的一个action。stream:动作执行完毕后,转向一个输出流。是:A.dispatcherB.redirectC.chainD.forward 题目 6 在值栈的上下文Context中,存在一些固定的key表示不同的对象,以下描述正确的是?A.request,表示request作用域的数据B.session,表示session作用域的数据C.application,表示application作用域

6、的数据D.parameters,表示请求参数的所有数据  题目 7 以下属于struts2配置文件中的配置元素是:()多选) A.<packageStruts2配置文件中可以有多个package包,但名称不能相同。> B.<action一个package中可以有多个action,名称不能相同。> C.<form-beans> D.<action-mappings>  题目 8 有关值栈 context Map栈数据操作描述正确的是?A.ActionContext.getContext().put(

7、key,value)Key就是类似request域对象的key值 直接对context进行操作B.使用<s:property value="#key"/>获得context中指定key的内容C.ActionContext.getContext().getSession().put(key,value); 将数据放置context 固定key为session对应的map中D.ActionContext.getContext().getApplication主要是生命周期不一样,返回值都是map,所以取值一样,都是通过key取value。().put(key,val

8、ue); 将数据放置context固定key为application对应的map中  题目 9 有关<s:iterator/>描述正确的是?A.value属性的值对应值栈中的相关的数据B.默认情况,将遍历的每一个数据都临时压入到root的栈顶想想for的例子,遍历一次少一次的数据,相当于是临时存储数据的容器。,遍历结束时再将数据移除C.如果使用var属性,在值栈的context中存放一个键值对D.如果使用status属性,可以获得当前遍历的状态。例如:遍历的索引,是否为奇偶等  题目 10 token令牌机制,下面说法正确的是?A.如果要使t

9、oken可用,必须在jsp表单中提供<s:token />,struts.xml使用token拦截器B.在struts2默认的拦截器栈中包含token拦截器Struts2默认拦截器defaultStack中不包含token的拦截器。C.<s:token>标签的作用在jsp页面生成一个隐藏域数据D.token拦截器可以通过includeMethods属性设置需要进行拦截的方法  题目 11 下列有关ValueStack内部结构描述正确的是?A.ValueStack内部有两个逻辑部分:root 和 contextRoot数据是个list集合,contex

10、t数据是个大的map集合。B.ValueStack的上下文context中存放了request、session、application的引用C.ValueStack的root部分,可以用于存放对象。在jsp页面中通过struts标签,可以使用对象的属性,直接获得需要的数据。D.ValueStack的context部分,struts将使用key=value的形式存放数据,在jsp页面中通过struts标签,可以使用”#key”方式获指定的数据  题目 12 在struts2配置中用( )元素配置常量A.<action>B.<package>C.<

11、constant>D.<include当Struts2配置文件比较多,需要模块化划分或分开成为多个配置文件时,则需要使用include标签,在struts.xml中包含其他配置文件。 >  题目 13 下列有关访问struts2的action,说法错误的是?A.action的访问路径,需要使用<package>标签的namespace属性的值和<action>标签的name属性的值B.如果访问路径是”/primer/helloWorldAction”,并在页面中成功显示,<package>标签的namespace属性值可

12、以是”/primer”C.在配置<action>时,其中class属性是用来请求访问的Action类。D.在struts.xml文件中必须配置拦截器 在Struts中配置拦截器,如果是自定义拦截器,用到时在配置,这个不是必须的 题目 14 在Struts2中,可以在哪些配置文件中配置常量优先级是:web.xml>pertieis>struts.xmlni()多选D.server.xml Tomat中的配置文件。 题目 15 下面有关struts2配置文件说法正确的是?A.perties文件

13、,struts2提供的默认常量配置文件B.struts-default.xml文件,struts2提供默认功能实现配置文件。此文件中提供大量的拦截器,结果集类型等C.struts.xml文件,是struts2预留给框架使用者,编写自定义配置信息的D.struts-default.xml,struts-plugin.xml和struts.xml文件加载是没有顺序的  题目 16 在<action>元素中,那个属性可以指定Action中要执行的方法的名称( )A.methodB.namename为要访问的路径。如果有namespace的话,访问路径是:/namesp

14、ace/nameC.classaction类的全路径。D.methodName  题目 17 以下配置文件,哪些是struts2的? A.perties提供常量的文件。D.struts.xml struts.xml是默认的配置文件,我们是可以进行修改的。 题目 18 有关值栈 root对象栈数据操作描述正确的是?A.valueStack.push(obj) 将指定的对象压入到栈顶B.在jsp页面,可以使用<s:property/> 获得栈顶的数据C.valueStack.getRoot()不能获取对象栈D.在j

15、sp页面,可以使用<s:property value="name"/> 获得对象栈中name属性的值  题目 19 下列哪个校验器可以校验“两次密码输入不一致”()A.required 必须输入,判断是否为null,允许有空格。B. requiredstring 必须输入,不允许有空格。验证的只能是字符串的。C.stringlength 控制长度的。D.fieldexpression  题目 20 关于struts2哪些api是正确的?A.ServletActionContext.getRequest() 可以获得Http

16、ServletRequestB.ServletActionContext.getResponse() 可以获得HttpServletResponseC.ServletActionContext.getServletContext() 可以获得ServletContextD.ServletActionContext.getRequest().getSession() 可以获得HttpSession  题目 21 struts2 action类的编写,下列说法正确的是?A.action类可以不继承任何类,不实现任何接口B.action类可以实现struts提供的接口Action

17、C.action类可以继承ActionSupportActionsupport这个工具类在实现了Action接口的基础上还定义了一个validate()方法,重写该方法,它会在execute()方法之前执行,如校验失败,会转入input处,必须在配置该Action时配置input属性。 另外,Actionsupport还提供了一个getText(String key)方法还实现国际化,该方法从资源文件上获取国际化信息D.action类中请求处理方法,必须是共有的,方法名称自定义,且没有参数。 有参数的话,会报找不到方法异常。返回值类型必须是String。 题目 22 str

18、uts2动态方法调用的格式为:A.ActionName?methodName.action B.ActionName!methodName.action 使用动态调用的话还需要打开一个常量C.ActionName*methodName.action D.ActionNamemathodName.action  题目 23 下列哪个结果类型用来转发到Action()单选A.dispatcher转发到一个页面,默认值。B.chainC.redirectAction重定向到一个动作类。D.stream  题目 24 .在Action接口中提供的5个逻辑视图代表

19、表单输入错误会跳转的视图名称是( )A.SUCCESSB.ERRORC.INPUTD.LOGIN  题目 25 下列有关,表单回显正确的是?A.只要将数据放置到request作用域,struts表单标签可以根据name属性进行回显B.只要将数据放置到session作用域,struts表单标签可以根据name属性进行回显C.只要将数据放置到application作用域,struts表单标签可以根据name属性进行回显D.只要将数据放置到对象栈root中,struts表单标签可以根据name属性进行回显  题目 26 struts2在控制器类中一般需要添加相

20、应属性的A.setter方法 B. as方法 C.getter方法 D.is方法  题目 27 当类型转换失败时,Struts会自动这个前提是需要在struts.xml文件中配置input属性。跳转到()结果单选A.errorB.successC.loginD.input  题目 28 下列哪个常量用来配置Action的扩展名()单选A.应用中使用的编码。配置位置决定作用范围。B.能进入Struts2框架内部的url地址后缀名。多个值用逗号分隔。C.该属性设置浏览器是否缓存静态内容。当应用处于开发阶段时,我们希望每次请求都获到服务器的最新响应,则可设置该

21、属性为false。D.struts.devMode该属性:是否是开发模式。开发模式:改了配置文件,不需要重启,会输出更多的错误信息,开发阶段建议为true。  题目 29 请看代码form.jsp<s:form action=”myAction” namespace=”/” theme=”simple”>用户名:<s:textfield name=”username” /><br/>密码:<s:password name=”password” /><br/><s:submit value=”提交”/>&

22、lt;/s:form>struts.xml<package name=”xxx” namespace=”/” extends=”struts-default”><action name=”myAction” class=”cn.itcast.web.action.MyAction”/></package>User.javapublic class User private String username;private String password;public void setUsername(String username) this. user

23、name = username;public void setPassword(String password) this. password = password;MyAction.javapackage cn.itcast.web.action;public class MyAction extends ActionSupport implements ModelDriven<User>private User user = new User();private String username;private String password;public void setUse

24、rname(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

25、.null, null在struts的默认拦截器栈中,已经使用了modelDriven拦截器,此拦截器将当前action提供的javabean对象压入到栈顶,在通过其他拦截器从而完成整个数据的封装。 B.zhangSan, 123C.没有输出D.抛出异常  题目 30 下列对stringlength校验器描述正确的是()A.可以配置minLength和maxLength参数B.可以配置min和max参数C.没有参数D.可以配置minLength和maxLength,以及min和max参数  题目 31 下列有关值栈struts2把值栈对象保存到reque

26、st域中,值栈保存名称struts.valueStackRequest.setAttribute(“struts.valueStack”,valueStack)从request里面获取值栈对象 Request.getAttribute(“struts.valueStack”);描述错误的是?A.valueStack是单例的,用于存放struts需要存放的数据B.值栈被保存在HttpServletRequest作用域中值栈是多例的,每次请求都会初始化来保存当前的数据。C.可以通过ActionContext.getValueStack()获得值栈D.可以通过ActionContext.getCon

27、text().getValueStack()获得值栈  题目 32 下列对局部xml配置校验说法正确的是()多选A.配置文件必须放到当前Action同包下B.配置文件名称必须是“当前Action类名-当前<action>的name名称-validation.xml”C.在Action类中无需编写任何与参数校验相关的代码D.可以使用InputConfig比input视图扩展性好,可以跳转到多个InputConfig(methodName="Tqtest",resultName="resultTest")methodName是

28、要作用于哪个方法,resultName是返回值,如果方法没有返回值则默认使用该属性值。注解来自定义校验失败后跳转的结果  题目 33 以下有关struts.xml文件描述正确的是?A.struts.xml文件必须放置在src下面B.struts.xml文件中只能配置一个packageC.struts.xml文件可以放置在WEB-INF目录下D.struts.xml文件名称可以自定义,只要以struts开头就可以  题目 34 以下结果类型描述正确的是?A. redirect,将请求重定向到另一个资源,一般重定向到jsp页面。B. redirectActi

29、on,将请求重定向到另一个actionC. dispatcher,struts框架默认结果类型,将请求转发到另一个资源D.stream确定result将从action获得流并发送到浏览器。  题目 35 (了解)下列对全局类型转换器配置描述正确的是()多选A.配置文件名称必须为pertiesB.配置文件必须放到/WEB-INF/classes目录下C.配置信息中属性名为目标类型名称D.配置信息中属性值为目标类型的类型转换器类名  题目 36 (了解)下列有关自定义类型转换器说法正确的是?A.编写自定义转换器实现类,

30、需要实现TypeConverter接口或继承默认实现类DefaultTypeConverterB.转换器的转换方法,将有可能执行两次。一次是表单提交数据字符串数组,转换成指定对象;一次是标签回显指定对象,转换成字符串。C.自定义转换可以被配置成全局转换,使用的固定的名称:perties,此转换器将覆盖struts默认实现的转换(如果有)D.自定义转换可以被配置成局部转换器,此类转换器只对当前action有效。进行注册时,需要使用一定格式的文件名称:action类名-perties  题目 37 OGNL表达

31、式Ognl表达式的写法和注意事项。中符合的使用,下面说话错误的是?A.”#key”表示可以获得值栈 context中的指定key的数据B.”$ognl”表示在配置文件中执行ognl表达式C.” %百分号是强制认为括号中的内容是一个表达式或者字符串。内容加上单引号是字符串。使用在struts2的表单标签中,如果直接写ognl表达式,不会把当做ognl,只是作为字符串输出,使用 %ognl#request.username”,输出的内容是从request域中读取username的值D. ” %#request.username”,输出的内容是”#request.username”这个字符串 

32、60;题目 38 下面有关modelDriven机制,分析正确的是?A.必须实现接口ModelDriven,通过在实现接口时,提供javabean类型作为泛型参数。B.需要实现接口的方法getModel()C.编写一个成员变量,可以不实例化是必须要实例化,不然会报空指针异常。D.在struts的默认拦截器栈中,已经使用了modelDriven拦截器,此拦截器将当前action提供的javabean对象压入到栈顶,在通过其他拦截器从而完成整个数据的封装。  题目 39 下面代码执行结果?在action中进行如下操作:ActionContext().getContex

33、t().put(“itcast”,”传智播客”);重定向到jsp注意这里是重定向,action是多例的,每创建一个action,都有一个context,重定向的话是跨域的,数据不能共享,所以值栈的内容是取不出来。页面后,在jsp页面使用标签<s:property value=”#itcast”>#<s:property value=”itcast”>#<s:property value=”#request.itcast”>#A.传智播客#B.传智播客#传智播客#C.传智播客#传智播客#传智播客#D.#  题目 40 .下列有关struts

34、2说法正确的是?A.struts2 依赖Struts2是与servlet解耦合的,可用可不用,而不是依赖。于Servlet api,所有我们必须使用ServletActionContext工具类提供的方法操作servlet的作用域B.struts2的action是多实例的C.在struts2中的action是需要依赖servlet容器是依赖于Web容器,主要是需要依赖web容器运行。而不是依赖servlet容器。的D.在struts2中可以利用ognl表达式展现数据struts token令牌机制 利用Struts同步令牌(Token)机制来解决Web应用中的重复提交问题。该方法的基本原理是:

35、服务器端在处理到达的request之前,会将request中的Token值与保存在当前用户session中的令牌值进行比较,看是否匹配。在处理完该request后,且在response发送给客户端之前,将会产生一个新的 Token,该Token除传给客户端以外,也会将用户session中保存的旧的Token进行替换。这样,如果用户会退到刚才的提交页面并再次提交的话,客户端传过来的Token值和服务器端的不一致,从而有效地防止了重复提交地发生。  struts的Token机制实际上就是通过用户提交表单时,比较request中的请求参数“org.apache.stru

36、ts.taglib.html.TOKEN”的值与当前会话中的属"org.apache.struts.action.TOKEN"的值是否相等,相等则是正常提交,不等则为重复提交。    下面我们看下一个完整的操作流程,这样便于理解:   首先我们要明白,重复提交是发生在什么情况下的,什么情况下需要处理重复提交。我们所要解决的重复提交一般是考虑用户新插入一条记录的情形,对于修改记录的重复提交一般不考虑,因为修改记录本身记录就存在ID,重复提交也只不过是重复更新数据库同一记录而已,对数据的正确性不会有影响。如果新插入一条记录不对重复提交进行

37、处理的话,那么就会在数据库中重复插入同一记录,这样会在数据库产生冗余的重复记录。当我们要插入一条记录时,会分二步走。第一步我们要打开新增记录的页面。第二步,我们会在打开的页面中填写相关信息,然后提交,这个时候提交才算完成。第一步:假如我们打开新增记录这个操作由add方法完成,代码如下:public ActionForward add(ActionMapping mapping, ActionForm form,   HttpServletRequest request, HttpServletResponse response)    

38、;this.saveToken(request);/这个方法就是产生令牌值,struts已有的方法   return mapping.findForward("add");/返回新增页面通过调用saveToken(request),产生一个token值。(注:每次调用saveToken方法产生的token值都不同)然后在记录新增页面中的<html:form>内部增加一个隐含表单字段,形式如下:<div><input type="hidden" name="org.apache.stru

39、ts.taglib.html.TOKEN"</div>第二步:假如我们提交这个页面数据由save方法完成,代码如下:public ActionForward save(ActionMapping mapping, ActionForm form,   HttpServletRequest request, HttpServletResponse response)    if (this.isTokenValid(request) /正常提交    this.resetToken(r

40、equest);/清空当前会话中的token值   return mapping.findForward("success");/返回保存成功页面   else /重复提交      this.saveToken(request);/注:此方法在这里可要也可不要。     return mapping.findForward("fail");/返回重复提交提示信息页面  判断是

41、不是重复提交关键是isTokenValid(request)这个方法,这个方法由struts提供,如果返回结果为true则表示正常提交,false则为重复提交。isTokenValid(request)这个方法实际上主要做了三件事,1.判断当前会话是否过期,如果过期,直接返回false  HttpSession session = request.getSession(false);        if (session = null)       

42、60;     return false;        2.然后再判断当前会话中是否存在令牌属性"org.apache.struts.action.TOKEN",如果不存在,返回false  String saved =(String) session.getAttribute("org.apache.struts.action.TOKEN");        if

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

44、quot;);当用户重复提交时,我说了"this.saveToken(request);/此方法在这里可要也可不要。",下面我们分析下,如果不调用这个方法,会话中就不会再重新保存token值,那么再刷新的时候,session中的token值总是为null,isTokenValid(request)直接返回false,如果调用this.saveToken(request)的话,session中会重新添加token属性值。这个时候isTokenValid(request)会进行下面第三步的判断。3.从当前会话中取得token的值与当前request中得到的token值比较,相同

45、返回true,不同返回false  String token = request.getParameter("org.apache.struts.taglib.html.TOKEN");        if (token = null)             return false;         return

46、saved.equals(token);如果是重复刷新,那么每次request中的令牌值都是一样的,但每次刷新当前会话中的令牌值都被重新替换了,所以会返回false注:使用struts的表单提交Token机制时,提交的表单一定要写成<html:form></html:form>这种形式,如果写成<form></form>这种形式的话,尽管调用saveToken(request)方法也不会在当前的<form></form>里面生成隐含表单,最终的结果都是"重复提交".动态方法调用在Struts2中动态方法

47、调用有三种方式,动态方法调用就是为了解决一个Action对应多个请求的处理,以免Action太多第一种方式:指定method属性这种方式我们前面已经用到过,类似下面的配置就可以实现<action name="chainAction" class="chapter2.action.Chapter2Action"method="chainAction"><result name="chainAction" type="chain">redirect</result>

48、;</action>  <action name="plainText" class="chapter2.action.Chapter2Action"method="plainText"><result name="plainText" type="plainText">/WEB-INF/JspPage/chapter2/plaintext.jsp</result></action> 第二种方式:感叹号方式(需要开启

49、),官网不推荐使用这种方式,建议大家不要使用.用这种方式需要先开启一个开关<constant name="struts.enable.DynamicMethodInvocation" value="true" /> 将此常量设置为true,这种方式才能使用,使用见示例Actionpackage chapter3.action;public class Chapter3Action public String result1()   return "result1"public String result

50、2()   return "result2" Jsp中访问方式<body>    <a href="basePath/chapter3/chapter3Action!result1">result1</a><br><ahref="basePath/chapter3/chapter3Action!result2">result2</a><br></body> 如果配置了后缀,必须这样写:/chapter4/chapter4Action!create.actionXML中配置方式<package name="chapter3" namespace="/chapter3" extends="struts-default">   <action name="chapter3Action&q

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论