Struts 2作业1.简述什么是MVC?答:MVC 的全称为model-view-controller(模型-视图-控制器)。
MVC 是一种开发应用程序的模式,这个模式已经具有了很好的框架架构,并且十分容易维护。
使用MVC 开发出来的应用程序一般包括以下几块内容:·控制器(Controller):控制器类处理客户端向Web 应用程序发出的请求,获取数据,并指定返回给客户端,用来显示处理结果的视图。
·模型(Model):模型类代表了应用程序的数据,这些数据通常具有一个数据验证逻辑,用来使得这些数据必须符合业务逻辑。
·视图(View):视图类是Web 应用程序中用来生成并显示HTML 格式的服务器端对客户端请求的响应结果的模板文件2.Struts 2以(WebWork)为核心,采用(拦截器)的机制来处理用户的请求。
3.简述一个请求在Struts 2框架中的处理流程,请按自己对框架的理解叙述。
答:1-用户提交自己的请求;2-由web.xml拦截,转发到action进行处理;3- Struts.xml根据相应的action配置,调用相应的方法来处理,并根据结果转发到不同的页面。
4.不属于Action接口中定义的字符串常量是( B )?A)SUCCESSB)FAILUREC)ERRORD)INPUT5.资源文件的后缀名为(D)?A)txtB)docC)propertyD)properties6.在JSP页面中可以通过Struts 2提供的(D)标签来输出国际化信息。
A)<s:input>B)<s:property>C)<s:submit>D)<s:text>7.以文字过滤拦截器为例,简述拦截器的使用步骤。
答:1-用户提交自己的请求;2-由web.xml拦截,转发到action进行处理;3- Struts.xml根据相应的action配置,调用相应的方法来处理,并根据结果转发到不同的页面;8.在同一个系统中配置多个拦截器,试说明它们的执行顺序。
答:一般来说:先配置的拦截器,会先获得执行的机会,但是实际情况不是这样。
execute()方法执行之前,配置在前面的拦截器,会先对用户的请求起作用。
execute()方法执行之后,配置在后面的拦截器,会先对用户的请求起作用。
(两头向中间靠拢的执行)。
9.请简述struts2中输入校验的几种方式。
答:客户端校验:在客户端用过使用javascript脚本对用户输入的数据进行校验;服务器校验:在服务器端对数据进行校验。
10.使用配置方式实现输入校验有哪两种方式?它们的命名规则是?如果同时配置了两种方式,寻找校验文件的顺序是?答:-1 重写validate()方法实现和validateXxx()方法实现;-2 命名规则:必须以validate开头;-3 顺序:当被请求的action方法处理逻辑还有相应的validateXxx()方法。
那么该校验方法将在validate()校验之前进行。
11.校验器配置风格有哪两种?举例解释使用标签的含义。
答:-1 一种是字段优先,称为字段校验器风格;一种是校验器优先,称为非字段校验器风格。
-2 字段校验器:以<field> 指定action中校验的属性<field-validator>指定校验器,message为校验器的失败提示信息 key为国际化资源文件中的key -3 非字段校验器:以<validate>为基本元素。
Type指定该元素的类型, Param 指定传人参数。
12.Struts 2哪些内置校验器支持客户端校验?以及如何通过Struts 2标签自动生成客户端校验代码?答:必填校验器(required)必填字符串校验器(requiredstring)字符串长度校验器(stringlength)整数校验器(int)日期校验器(date)邮件地址格式校验器(email)网址格式校验器(url)转换校验器(conversion)表达式校验器(expression)字段表达式校验器(fieldexpression)正则表达式校验器(regex)13.自定义校验器必须实现哪个接口?注册校验器的配置文件应如何命名?答:实现com.opensymphony.xwork2.validator.Validator;接口;配置文件必须以validate.xml命名;14.按照自己的理解,谈谈自定义类型转换器的方法。
答:1 继承DefaultTypeConverter类;2 注册局部类型转换器方法在Action所在的目录下,创建ActionClassName-conversion.properties文件,文件内容格式syntax: <propertyName> = <converterClassName>;3 注册全局类型转换器方法在classpath的根下创建 xwork-conversion.properties 文件,文件内容语法:syntax: <type> = <converterClassName>15. Struts2中动态调用的格式(CD)A)ActionName?methodName.do。
B)ActionName!methodName.do。
C)ActionName?methodName.action。
D)ActionName!methodName.action。
16什么是国际化?国际化资源文件的命名格式是?答:国际化是(i18n)指的是软件设计阶段,就应该使软件具有支持多种语言和地区的功能、这样,当需要在应用中添加对一种新语言和国家的支持是不需要对已有的软件返工,不需要修改的代码;java资源文件的命名可以有3种格式: basename_language_country.properties basename_language.properties basena me_properties17.在页面中使用(<s:text>)输出国际化信息;在Action类中如何输出国际化信息?表单标签中又当如何?答:在action类中,可以继承actionSupport,使用getText()方法得到国际化信息;在表单标签中,通过key属性指定资源文件的key18.加载国际化资源文件有哪四种方式?答:加载全局范围资源文件,加载包范围资源文件,加载action范围资源文件,加载临时指定范围内的资源文件;19.按照你的理解,谈谈如何实现自由选择语言环境?答:Struts 2提供一个名字为i18n的拦截器,并已把该拦截器添加到默认拦截器中。
i18n拦截器自动查找客户端请求中名字为request_locale的参数,并根据该参数实例化一个Locale对象。
Struts 2会把Locale保存在Session中的一个名字为WW_TRANS_I18N_LOCALE 的属性中,该属性值将会作为浏览器默认的Locale.20.请画出OGNL上下文的结构示意图。
解释如何访问OGNL上下文的对象?常常需要配合哪个Struts标签使用?答:添加值栈,将值存放到值栈里面,在页面访问方式# 配合<s:property>21.Struts 2默认响应请求的后缀名是.action,若要配置Struts 2只处理以.do为后缀名的请求,有哪些方法?若要处理多个后缀又当如何?答:1 .可以修改struts.xml 和struts.properties来修改默认的配置,在struts.xml中<struts>添加子接点<constant name=”struts.action.extension” value=”do” />或者是修改struts.properties文件添加struts.action.extension = do这都是一样的效果注意:struts.xml 和struts.properties的都放在src下发布的时候会自动拷贝到WEB-INF/classes下2. 在web.xml里面的filter中加入<init-param>值为do; 3 处理多个后缀,在步骤1里面用逗号隔开添加即可;22.实现在Action中访问Servlet API有哪几种方法?答:直接访问方式,间接访问方式,ioc和非ioc方式;23.Struts 2文件上传需要用到那两个包?根据你的理解,谈谈实现文件上传的步骤。
答:Comons-fileupload-1.2.1.jar 和 commons-io-1.2.1.jar第一步:在web-inf/lib下面添加必须的jar文件第二步:把form表单的enctype设置为“multipart/form-data”; 第三步:在action 类中;添加必要属性: private File upload;//得到上传文件的类型 private String uploadFIletype;//文件类型 private String uploadFileName;//文件名称24.在strutrs2中数据验证失败时,通过(D)标签显示错误信息。
E)<s:text>F)<s:error>G)<s:faild>H)<s:fielderror>25.以下配置文件上传拦截器只允许bmp图片文件代码,正确的是(D)。
I)<param name="allowedTypes">*.bmp </param>J)<param name="allowedTypes">bmp </param>K)<param name="allowedTypes">image/*.bmp </param>L)<param name="allowedTypes">image/bmp </param>26.如下代码,对DemoAction起作用的拦截器有( B )。
<package name="default" extends="struts-default" ><default-interceptor-ref name="testInterceptor"/><action name="DemoAction" class="action.DemoAction" ><interceptor-ref name="demoInterceptor" /></action></package>M)只有testInterceptor.N)只有demoInterceptor.O)都不起作用。