如果要实现struts2实现增删改查的数据检验功能需要继承或实现哪个类

Struts2复习题;1.以下属于struts2的控制器组件是:;A.ActionB.ActionFormC.Ac;2.以下属于struts2的体系结构的是:(多选;A.struts2控制器组件B.struts2配;3.以下属于struts2配置文件中的配置元素是;A.&package&B.&a;4.关于struts1和struts2对比的
Struts2复习题
1. 以下属于struts2的控制器组件是:
B.ActionForm
C.ActionServlet D.dispatchAction
2. 以下属于struts2的体系结构的是:(多选)
A.struts2控制器组件
B.struts2配置文件 C.FilterDispathcer D.Action
3. 以下属于struts2配置文件中的配置元素是:(多选)
A.&package&
B.&action& C.&form-beans& D.&action-mappings&
4. 关于struts1和struts2对比的说法正确的是:
A.struts1要求Action类继承struts1框架中的Action父类,struts2中则不一定需要继承,可以是POJO类
B.struts1中的Action不是线程安全的,而struts2中的Action是线程安全的
C.struts1和struts2中都使用ActionForm对象封装用户的请求数据
D.struts1使用OGNL表达式语言来支持页面效果,struts2通过ValueStack技术使标签库访问值
5. 以下关于ValueStack说法正确的是:(多选)
A.每个Action对象实例拥有一个ValueStack对象
B.每个Action对象实例拥有多个ValueStack对象
C.Action中封装了需要传入下一个页面的值,这些值封装在ValueStack对象中
D.ValueStack会在请求开始时被创建,请求结束时消亡
6. 关于struts2配置文件说法正确的是:
A.必须在WEB-INF/classes目录下
B.名字必须为struts.xml
C.配置Action时,必须配置包信息 D.使用&forward&元素配置转发
7. 在struts2配置中用()元素来配置常量:
A.&const& B.&constants& C.&constant& D.&constant-mapping&
8. 关于struts2包的说法正确的是:
A.struts2框架使用包来管理常量
B.struts2框架定义包时必须指定name属性
C.struts2框架中配置包时,必须继承自struts-default包,否则会报错
D.struts2框架中使用包来管理Action
9. struts2中获取Servlet API的方法正确的是:(多选)
A.使用ActionContext对象以解耦合的方法访问Servlet API
B.使用ServletActionContext对象以解耦合的方式访问Servlet API
C.使用ActionContext对象以耦合的方式访问Servlet API
D.使用ServletActionContext对象以耦合的方式访问Servlet API
10. struts2动态调用的格式为:
A.ActionName?methodName.action
B.ActionName! methodName.action
C.ActionName*methodName.action
D.ActionName@mathodName.action
11. 如果要实现struts2的数据校验功能
A.普通Action类可以实现
B.继承自Action接口可以实现
C.继承自ActionSupport类可以实现
D.继承自ActionValidate类可以实现
12. 如果要实现自定义处理结果,需继承那个类
A.Dispathcer
B.StrutsResultSupport
13. 实现动态返回结果,在配置&result&元素时使用()指定视图资源
A.${属性名}
B.@{属性名}
C.${'属性名'}
D.${&属性名&}
14. 用于实现国际化的struts2标签是:
A.&s:text&
B.&s:message&
C.&s:textfield&
D.&s:resource&
15. struts2默认的处理结果类型是:
A.dispatcher
B.redirect
16. 自定义转换器继承的抽象类是:
A.Converter
B.TypeConverter
C.StrutsTypeConverter
D.converts
17. 自定义转换器的注册方式有:
A.只有全局注册方式 B.只有局部注册方式
C.只有全局和局部注册方式
D.以上说法都不对
18. 自定义拦截器类的方式有:(多选)
A.实现Interceptor接口
B.实现AbstractInterceptor接口
C.继承Interceptor类
D.继承AbstractInterceptor类
19. 在struts.xml文件中,使用()元素定义拦截器
A.&interceptor-ref&
B.&interceptor&
C.&intercep&
D.&default-interceptor-ref&
20. 在OGNL中?操作符的作用是:
A.取出符合选择逻辑的第一个元素
B.取出符合选择逻辑的最后一个元素
C.取出符合选择逻辑的所有元素
D.以上说法都不对
21. 以下属于struts2标签的是:(多选)
A.Ajax标签
B.数据访问标签
C.logic标签
D.bean标签
22. 以下哪个标签是struts2中的用于循环迭代:
A.&s:property&
B.&s:iterator&
C.&s:logic&
D.&s:foreach&
23. Struts2主要核心功能是由(
c) 类型转换器
d) 配置文件
24. Struts中的ActionServlet属于MVC模式(
25. Struts2框架由(
)框架发展而来的【选择二项】
d) Hibernate Struts Spring WebWork
26. Struts2以(B)为核心,采用( )的机制处理用户请求
b) WebWork
27. struts2中,不属于Action接口中定义的字符串常量的是(
a) SUCCESS
b) FAILURE
28. struts2在控制器类中一般需要添加相应属性的(
)【选择二项】
a) setter方法
c) getter方法
29. struts2控制器需要在(
)配置文件中进行配置
a) web.xml
b) struts.xml
c) application.porperties
d) webwork.xml
30. 不属于struts2标签库的是(
a) &s:textfield&
b) &s:textarea&
c) &s:submit&
d) &select&
31. 在JSP页面中可以通过Struts2提供的(
)标签来输出国际化信息
a) &s:input&
b) &s:messages&
c) &s:submit&
d) &s:text&
32. 资源文件的后缀名为(
c) property
d) properties
33. struts2自定义类型转换器必须实现的接口是(
a) Convert
b) TypeConverter
c) StrutsTypeConverter
d) StrutsConvert
c) 必须提供xwork-conversion.properties文件 注册文件的格式为:复合类型=对应类型转换器 注册文件的格式为:对应类型转换器=复合类型 以上说法都不正确 struts2自定义拦截器中的“return invocation.invoke”代码表示(
)【选择二项】 不执行目标Action的方法,直接返回 执行目标Action的方法,直接返回逻辑视图名称 在自定义拦截器中,该代码是必需的 在自定义拦截器中,该代码是可选的 struts2中,以下配置文件上传拦截器只允许上传bmp图片文件的代码,正确的是( ) &param name=”allowedTypes”&image/bmp&/param& &param name=”allowedTypes”&*.bmp&/param& &param name=”allowedTypes”&bmp&/param& &param name=”allowedTypes”&image/*.bmp&/param& 以下关于OGNL的说法正确的是(
)【选择二项】 ActionContext是OGNL的上下文环境 StackContext是OGNL的上下文环境 ValueStack是OGNL的根 ActionContext是OGNL的根 假设在Session中存在名为uid属性,通过OGNL访问该属性,正确的代码是(
) #uid #session.uid uid ${session.uid} 关于“#session.persions.{? #this.age&20}”OGNL代码所表示的意义说法正确的是(
) 从persons集合中取出第一个年龄>20的Person对象 从persons集合中取出所有年龄>20的Person对象子集 从persons集合中取出最后一个年龄>20的Person对象 该代码不符合OGNL的语法 假设在某JSP页面中存在”&s:property&”代码,则以下说法正确的是(
) 编译JSP页面时会出现错误 编译JSP页面时不会出现错误,但页面不会显示任何内容 该代码用于输出位于ValueStack(值栈)栈顶的对象 以上说法都不正确 struts2默认的处理结果类型是(
) dispatcher redirect chain 以上说法都不正确 下列选项中,关于Struts2配置文件说法正确的是(
) 必须置于WEB-INF/classes目录下 必须为Struts.xml 配置Action时必须配置包信息
下列选项中,关于Struts2的Action说法正确的是(
)【选择二项】 struts2会为每一个请求创建一个对应的Action实例 struts2在请求处理过程中,只有一个Action实例 struts2通过属性来封装用户请求参数 在struts2中定义的属性都用于封装用户请求参数 struts2中动态方法调用的格式为(
) ActionName_methodName.do ActionName!methodName.do ActionName_methodName.action ActionName!methodName.action
问答题:MVC是什么含义?
包含各类专业文献、中学教育、各类资格考试、文学作品欣赏、外语学习资料、应用写作文书、14struts2复习题(含答案)等内容。
 struts2复习模拟题_IT认证_资格考试/认证_教育专区。填空: 1.Struts 2 以__...参考答案:struts.xml 配置文件主要内容: &package name=&default& namespace=&/...  Struts2练习题_计算机软件及应用_IT/计算机_专业资料。Struts 2 作业 1. 简述...STRUTS2模拟(答案) 3页 免费 struts2复习题(含答案) 5页 免费 J2EE测试题 ...  如 ActionCleanUp 和 FiterDispatcher 等 FilterDispatcher 是 Struts2 控制器的...struts2复习题(含答案) 5页 免费
STRUTS2模拟(答案) 3页 1下载券 ...  Struts2最新练习题_计算机软件及应用_IT/计算机_专业资料。Struts2最新练习题Struts 2 作业 1. 简述什么事 MVC? MVC 的全称为 model-view-controller(模型-视图-...  Struts2测试机试题_IT认证_资格考试/认证_教育专区。Struts2测试机试题 阶段测试――机试试题一、功能要求 使用 Struts2 开发基于 WEB 的人员管理系统。具体要求如...  Struts2 面试题 1、struts2 工作流程 Struts 2 框架本身大致可以分为 3 个部分: 核心控制器 FilterDispatcher、业务控制器 Action 和用户实现的企业业务逻辑组件。...  struts2面试题_面试_求职/职场_实用文档。一些面试题 Struts2 题目 1. 谈谈 MVC 设计模式,对我们开发带来了什么好处? 5分 MVC 是三个单词的缩写,分别为: ...  struts2复习考试资料_工学_高等教育_教育专区。struts2复习考试资料------1.Struts2 的工作流程: 【重要】 Struts2 框架是 MVC 框架。 M:Model,...  JavaStruts2面试题_简历_求职/职场_实用文档。Struts2 面试题 1、struts2 工作流程 Struts 2 框架本身大致可以分为 3 个部分: 核心控制器 FilterDispatcher、 ...Struts1与Struts2的区别 - Canrry - ITeye技术网站
博客分类:
Struts2继承了Struts与WebWork的血脉,吸取了两者的精华而成。
不同点主要包括以下几个方面:
在Struts中都是使用抽象类编程而不是接口,因此它要求开发的Action类继承一个抽象基类,如DispatchAction等。
Struts2刚基于接口编程,我们的Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。更强大的是,在Struts2中Action接口不是必需的,任何有execute()函数的POJO对象都可以用做Strut2的Action类来使用。
Struts的Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts Action所能做的事,并且要在开发时特别小心,Action资源必须是线程安全的或同步的
Struts2的Action对象为每一个请求产生一个实例,因此没有线程安全问题。
Servlet依赖
Struts的Action依赖于Servlet API, 当一个Action被调用时,HttpServletRequest和HttpServletResponse被传递给执行的方法,例如:
Public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request,HttpServletResponse response){
Struts2的Action不依赖容器,允许Action脱离容器单独测试。如果需要,Struts2的Action仍然可以访问初始的request和response。例如下面的这个类MyAction.java,它可以通过ActionContext对象取得Session值,也可以通过ServletActionContext对象取得request值。
Public class MyAction{
Protected Object getSession(String key){
Return ActionContext.getContext().getSession(key);
Protected HttpServletRequest getRequest(){
Return (String)ServletActionContext.getRequest();
测试Strtus Action的一个主要问题是,execute()方法暴露了Servlet API,这使得测试要依赖于容器。虽然有第三方的软件Struts TestCase能够使用模拟对象来进行测试,但显然会让我们的测试变得更加复杂。
Struts2 Action的类是POJO类,因此可以直接编写测试类来测试Action类,只需要在测试类中为Action注入属性即可。
Struts使用ActionForm对象捕获用户输入,所有的ActionForm必须继承一个基类ActionForm。因为其他的JavaBean不能用做ActionForm,开发者经常创建多余的类捕获输入。动态表单可以作为创建传统ActionForm的选择,但是,开发者可能是在重新创建已经存在的JavaBean,仍然会导致有冗余的JavaBean。
Struts2直接使用Action属性作为输入属性,消除了对第2个输入对象的需求。输入属性可能是有自己子属性的rich对象类型。Action属性能够通过Web页面上的taglibs访问。同时,Struts2也支持ActionForm模式。
表达式语言
Struts整合了JSTL,这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。
Struts2可以使用JSTL,但是也支持一个形影相随强大和灵活的表达式语言OGNL(Object Graph Notation Language)。
绑定值到页面
Struts使用标准JSP机制把对象绑定到页面中来访问。
Struts2使用ValueStack策略允许通过一系列名称相同,但类型不同的属性重用页面(View)。
Struts的ActionForm属性通常都是String类型,并使用Commons-Beanutils进行类型转换。每个类提供一个转换器,对每一个实例来说是不可配置的。
Struts2使用OGNL进行类型转换,提供了基本和常用对象的转换器。
Struts的ActionForm属性的validate()方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。
Struts2支持通过validate()方法和XWork校验框架来进行校验,XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性。
Action执行的控制
Struts支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。
Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期,堆栈能够根据需要和不同的Action一起使用。
以上描述的都是内部实现机制的不同,从开发者的角度来看,其实主要是Action类不同。
在Struts2中共包含两个配置文件:
Struts.properties:定义了Struts2运行的属性配置,通过修改这些属性可以控制Struts2的行为。
Struts.xml:供开发者添加用户请求的映射列表,通过该列表可以将用户的请求与Action类对应起来。(还可以在struts.xml文件中引用别的XML文件,如user.xml,可以在struts.xml文件中使用&include&来引用)
Struts2的请求是由FilterDispatcher来进行拦截的,当接收到用户的请求时,它会在struts.xml中查找对应的请求映射配置,得到使用哪些拦截器Interceptors、 Action类和返回结果Results的信息,然后依次做如下的操作:
1, 请求通过一系列的拦截器:Interceptors是Struts2中的一种过滤机制,它基于AOP的思想进行设计,通常可以用于日志记录、权限限制等;拦截器和拦截器组可以按照不同级别进行组合配置来处理请求。它们为请求提供各种预处理和切面处理的应用功能,这和Struts的使用Jakarta Commons Chain构件的RequestProcessor类很类似。
2, 调用Action:产生一个新的Action对象实例,并提供请求所调用的处理逻辑的方法,并调用Model层执行业务逻辑的操作,然后返回映射配置中指定的Result页面。
3, 业务处理:业务逻辑通常由JavaBean或EJB组件来实现,以实现文件、数据库、通信等的相关操作。
4, 调用相应的Result:通过匹配处理Action方法之后的返回值获取相应Result类,生成并调用它的实例。处理Result可能产生的结果之一就是对UI模板(但并非只有一个)进行渲染,来产生HTML。如果是这种情况的话,模板中的Struts2 tags可以直接从Action中获取要被渲染的值。
5, 响应被返回给用户:最后一步是将控制权交还给Servlet引擎。最常见的结果是把渲染后的HTML返回给用户,但返回的也可能是指定的HTTP头或者进行HTTP重写向。你应该已经注意到Struts2和Struts的差别了,最明显的就是Struts2是一个pull-MVC架构。这是什么意思呢?从开发者的角度看,就是说需要显示给用户的数据可以直接从Action中获取,也就是说JSP页面可能直接访问Action中的数据了,而不像Struts那样必须把相应的Bean存到Page、Request、或者Session中才能获取。
Com.opensymphony.xwork2.Action是个接口,这个类来自于XWork,它的定义如下:
package com.opensymphony.xwork2;
public interface action{
public static final java.lang.String SUCCESS = “success”;
public static final java.lang.String NONE = “none”;
public static final java.lang.String ERROR = “error”;
public static final java.lang.String INPUT = “input”;
public static final java.lang.String LOGIN = “login”;
public abstract java.lang.String execute() throws java.lang.E
Execute()方法是每个Action的入口方法
Struts.xml文件中,首先是Action的访问地址,它的访问地址由两个部分来决定,一个是package中的namespace定义,一个是action的name.
供其它包引用的包名
继承自其它包并获得其全部行为
参考正文的命名空间介绍
声明包为抽象(包内不需要配置action)
Package元素只需要一个必须的属性:name。extends属性是可选的,它可以让当前包继承一个或者多个以前包——包括所有的拦截器,拦截器栈,以及action配置。只有namespace属性对我们的action的访问路径有影响的,它的默认值是“”,也就是空字符串,它还可以聚会为根目录,也就 是“/”,被称为Root Namespace,它对应着访问web应用根目录的情况。如果当前例子的配置文件的package 为:
重新发布项目后,访问路径将是:
接下来对访问路径有影响的,当然是Action 的 name 属性了,假设这样写
这时候的访问路径将会变成
不赞成在action的name属性中加符号如:“.”,”-“主要是ajax支持会出问题。
&package name=”default” extends=”struts-default”namespace=”/test”&
&action name=”a.HelloWorld” class=”com.login.action.HelloWorld”&
它相当于JSP编程当中的forward,因此,默认的type类型就是dispatcher
可以这样写
&result-types&
&result-type class=”org.apache.struts2.dispatcher.ServletDispatcherResult” default=”true”/&
&/result-types&
Param元素可以省略掉。
还有一种结果类型,那就是重定向,它的写法是:
&result type=”redirect-action”&Menu&/result&
类似于struts1中的GlobalFowards,struts2也支持将某些通用的Result定义成为全局的,即Global Results:
&result name=”success” type=”dispatcher”&
&param name=”location”&/HelloWorld.jsp&/param&
强烈建议能用EL表达式和JSTL表达式的时候就用它,而抛弃框架自带的那些非标准和容易变动的自定义标签库。这就是一直提倡的面向标准和尽量独立于框架编程的好处,可维护性和移植性是远远好于绑定某个特定标签库的,开发不能只看眼前,要尽量多考虑以后的扩展和维护。
· Struts2的国际化问题:
比如说在SRC的com.login.action包上右击新建一个文件名为package.properties,接着在打开的编辑器中键入以下内容
HelloWorld.message = Struts 2 is up and running…
Package.properties是默认的,一般情况下得有,如果想在中文浏览器里面显示的话,就需要建立一个package_zh_CN.properties文件了,这个properties文件就像struts1那样差不多,在native2ascii里面先转换然后,再粘贴就OK。
Struts2对开发人员提供了很大的方便,既不用关心Struts2自身的接口和类,也不用关心方法到底应该如何命名,还可以将功能相似的方法合并到一个Action中,例如,将用户管理的功能都写到一个UserAction中, 里面带有login,logout,add,delete等处个模块的方法,而配置的时候只要按需要根据method参数即可配置出对应的5个访问地址,分别对应这些方法的调用。5个页面都对应着结果页面success.jsp。
映射还可以使用通配符的方式如:
&global-results&
&result name=”error”&/Error.jsp&/result&
&result name=”invalid.token”&/Error.jsp&/result&
&/global-results&
当访问地址”saveUser”的时候,将会调用com.login.action.ActionMethod Action类的某个实例上的save方法,后面的method=”{1}”这个定义的值{1}等于用户输入的*,即{1}=*
Struts2的验证机制:
和struts1相比,这里的验证工作相当的简单,首先,是表单提交的action后台所对应的类必须继承自ActionSupport类,只有这样才能使用Struts2自带的验证机制。其次,必须使用Struts2里面的form标签来定义表单。再次,action定义中必须有名为input的result来指定表单的来源页面,便于出错后返回表单输入页面显示相关的信息,如:
&result name=”input”&/login.jsp&/result&
最后是需要编写一份针对表单域的验证说明文件,并放在和action类相同的包下。配置文件有两种命名约定方式:
1. Action类名-validation.xml,不是Action名字_validation.xml,放在和Acton类相同的包下。例如在这里我们的验证文件名可以为:Login-validation.xml。
2. Action类名-Action别名-validation.xml,如Login-Login-validation.xml。
Interceprors(拦截器)
Struts2 中提供的很多特性都是通过拦截器实现的,例如异常处理,文件上传,生命周期回调与验证。拦截器从概念上来讲和Servlet过滤器或者JDK的Proxy类是一样的。它提供了一种对Action进行预处理和事后处理的功能。
依赖注入可以有多种不同的实现方式:
Spring框架——ActionAutowiringInterceptor拦截器
请求字符串和表单值——ParametersInterceptor拦截器
基于Servlet的对象——ServletConfigInterceptor拦截器
如果要想在Action中激活依赖注入功能,就必须要对Action进行配置。
&action name=”*User” class=”com.login.action.ActionMethod” method=”{1}”
&result&/hello.jsp&/result&
在action配置 中就应该这样来写,把它配置上
&interceptors&
&interceptor name=”autowiring” class=
”…xwork2.spring.interceptor.ActionAutowiringInterceptor”/&
&/interceptors&
也可以直接放在package中
&default-interceptor-ref name=”autowiring”/&
由于Struts2的很多功能是基于拦截器完成的,所以一个Action对应有7,8个拦截器也并不稀奇,因此我们一般都用拦截器栈(interceptor stack)来管理拦截器。
OGNL的全称是Object Graph Navigational Language(对象图导航语言),提供了访问值栈中对象的统一方式。
值栈中的对象构成及基排列顺序
1. 临时对象——在执行过程中,临时对象被创建出来并放到了值栈中。
2. 模型对象——如果模型对象正在使用,那么会放在值栈中action的上面
3. Action对象——正在被执行的action
4. 固定名称的对象(Named Objects)——这些对象包括有#application,#session,#request,#attr和#parameters,以及相应的servlet作用域
在OGNL里面,可以用“.”来遍历对象图(比如说,使用”person.address”而不是“
getPerson().getAddress()”),还有类型转换,方法调用,集合的操作与生成,集合间的映射,表达式运算和lambda表达式。
&!--EndFragment--&
浏览: 85603 次
来自: 上海
zxh 写道有个bug String输入数字 ...
楼主说的很好 评论补充的也好 像是解决了多音字的问题 可是还需 ...
请问org.rut.util.algorithm.SortUt ...
有个bug String输入数字 报错
修改一下> Struts2用户输入证验(1)
Struts2用户输入证验(1)
noblest & &
发布时间: & &
浏览:33 & &
回复:0 & &
悬赏:0.0希赛币
Struts2用户输入验证(1)10.1用户输入验证介绍
  我们每天上网时常会遇到当需要用户输入或者选择一些信息时,你所填写或选择的内容与系统预期不同,此时系统会提示你错误信息。常见的如“用户名不能为空”,“密码长度不正确”等信息,我们把这类校验称之为用户输入验证。这类错误校验十分必要,如果没有进行用户输入验证将给系统造成极大的隐患,造成系统异常甚至系统崩溃。
  用户输入校验具体在编码完成时分为客户端验证和服务器端验证两类。客户端验证,即该校验代码是在客户端完成,该请求并没有提交到服务器,如果出现错误立刻响应给客户。服务器端验证,即客户将请求提交到服务器端,由服务器端代码进行校验,如果出现错误将错误信息返回给客户。客户端验证的优势在于执行效率高,能够有效地降低服务器端负载。但是,熟悉编程人都知道用户完全可以绕过客户端验证直接提交到服务器端。因此,用户输入验证仅仅通过客户端验证安全性无法得到保证。服务器端验证的优势在于安全性高,该代码是部署到服务器端,能够有效地阻止与系统预期不一致的输入。但是,所有的请求都提交到服务器端,服务器的负载过重,效率低下,影响用户感受。因此正确的用户输入验证应该兼有客户端验证和服务器端验证。
  基于MVC模式下编程时,客户端验证在代码实现上位于视图层,大多数是通过Javascript语言来实现。服务器端验证在代码实现上,应在进行业务处理之前进行验证。这类验证在代码中的控制器(C)层进行。
  基于Struts2框架编写的代码时,用户输入验证服务器端验证的代码是在Action中完成,Struts2框架除了提供编码方式实现用户输入验证,还提供了配置方式,即基于校验框架完成用户输入验证。本章就是通过编码方式和配置方式两方面对用户输入验证进行讲解。该框架同时兼顾了客户端验证,这类代码可以由框架基于配置信息直接生成。
10.2编程方式下实现用户输入验证
10.2.1 最简单的用户输入验证实现方式
  如果在编写用户登陆功能时,添加用户输入验证。该验证内容包含:用户名不能为空;密码不能为空;密码长度必须在6到12位之间。如果用户输入验证错误,则在原页面上显示错误信息,如果用户输入验证正确,则跳转到登陆成功页面,并显示“xxx,您好”的信息,其中xxx为用户输入的用户名。
  该功能执行图示:
  (1)当用户名和密码都没有输入时
  图10-2 用户登陆功非空验证错误&&
  (2)当用户名和密码输入11和22时
  图10-2 用户登陆功密码长度验证错误&
  (3)当用户名和密码输入唐琳和1234567时
  图10-2 用户登陆功验证正确
  该功能在代码实现上代码结构跟以前是以一样的。则在前面所学知识基础上仅仅需要修改Action类,无须增加其它的文件。以下为实现的代码结构:
  图10-1 用户登陆功能代码结构
  编写该功能时用户需要编写和创建的文件:
  文件名
  Login.jsp
  用户登陆页面
  LoginSuccess.jsp
  用户登陆成功页面
  LoginAction
  Action类
  控制器
  struts.xml
  Struts2框架的配置文件
  配置文件
  web.xml
  项目的部署描述文件
  配置文件
  由于篇幅的关系,以下仅列出LoginAction类,Login.jsp和struts.xml文件的部分代码。其它代码参考光盘中Unit10文件夹下01的项目代码。
  在完成该功能时最重要的就是Action类的编写,本功能基于读者以前的编程习惯编写实现,因此将输入验证部分的代码编写到execute方法内。代码如下所示:
  package com.study.erp.
  import com.opensymphony.xwork2.ActionS
  public class LoginAction extends ActionSupport{
  privateS
  privateS
  //此处省略属性对应的get和set方法
  publicString execute(){
  //用户输入验证
  &&&&&&& if(username== null || username.trim().equals(&&)){
  &&&&&&&&&&& addFieldError(&username&,&用户名不能为空.&);
  &&&&&&& }
  &&&&&&& if(password== null || password.trim().equals(&&)){
  &&&&&&&&&&& addFieldError(&password&,&密码不能为空.&);&&&&&&&&&
  &&&&&&& }elseif(password.length()&6 || password.length()&12){
  &&&&&&&&&&& addFieldError(&password&,&密码长度应在6到12位之间.&);&&
  &&&&&&& }
  &&&&&&& //如果用户输入验证包含错误信息,则跳转到input视图,否则转向“success”视图
  &&&&&&& if(hasFieldErrors()){
  &&&&&&&&&&& return&input&;
  &&&&&&& }else{&&&&&
  return&success&;
  代码10-1 用户登陆功能LoginAction
  由于LoginAction继承了ActionSupport类,因此上述代码中直接调用了两个方法分别是addFieldError和hasFieldErrors。
  addFieldError方法: public void addFieldError(String fieldName,StringerrorMessage)
  该方法将错误信息添加到框架的FieldError中,与页面的Struts2表单标记紧密结合使用。方法包含两个参数:1. String fieldname参数用于指定该错误信息对应到页面中哪个表单组件,该属性值必须与页面中表单组件的name属性值一致。2.
String errorMessage参数用于指定显示到页面上的错误信息的具体内容。
  hasFieldErrors方法:public boolean hasFieldErrors ()
  该方法用来判断框架的FieldError中是否包含错误信息。如果包含错误信息则返回值为true,否则为false.
  上面代码加粗的部分为用户输入验证的相关代码,根据预先的计划分别判断了用户名是否为空,密码是否为空,密码长度是否与预期一致三项。在验证过程发现错误时,则调用addFieldError方法将错误信息添加到框架中的FieldError中,编码时务必注意该方法的第一个参数值必须于表单组件的名字相同,名字的大小写也是敏感的。而Action中的属性也必须与表单组件的名字相同。因此,编程时可以参照属性进行检查。例如:addFieldError(&username&,
&用户名不能为空.&);中的username与本类中的属性username必须一致。当完成所有的用户输入验证时,判断框架中的FieldError中是否包含错误信息。如果包含错误信息则跳转到“input”对应的视图中,否则跳转到“success”对应的视图中。
  用户登陆页面显示包括两种情况:1.用户初次访问登陆页面时,该页面需要显示登陆的组件信息。2.当用户输入校验出现错误时,显示登陆页面。该页面除了正常显示登陆的组件信息外还需要显示用户输入校验的错误信息。读者在编码时不必担心如果显示校验的错误信息,在Struts2的标记中已经封装了该功能。用户在编写登陆页面代码时,只需要使用框架标记进行编码实现即可。登陆页面的代码如下所示:
  &%@ page language=&java&contentType=&text/ charset=utf-8&&&&pageEncoding=&utf-8&%&
  &%@ taglib uri=&/struts-tags&prefix=&s& %&
  &!DOCTYPE html PUBLIC&-//W3C//DTD HTML 4.01 Transitional//EN&&;&
  &html&
  &head&
  &title&用户登陆页面&/title&
  &/head&
  &body&
  &h1&用户登陆&/h1&
  &s:form action=&login.action&&
  &&&&&&&&s:textfield name=&username& label=&用户名&$>$/s:textfield&
  &&&&&&&&s:password name=&password& label=&密码&$>$/s:password&
  &&&&&&&&s:submit& name=&login&value=&登陆&/&
  &/body&
  &/html&
  代码10-2 用户登陆页面Login.jsp
  struts.xml文件对于该功能的配置,需要配置两个结果信息,分别是name为input和success的两个视图结果。具体配置代码如下所示:
  & xml version=&1.0&encoding=&UTF-8&
  &!DOCTYPE struts PUBLIC
  &-//Apache Software Foundation//DTDStruts Configuration 2.0//EN&
  &struts&
  &&&&&package name=&default&namespace=&/& extends=&struts-default&&
  &&&&&&&&action name=&login&class=&com.study.erp.action.LoginAction&&
  &&&&&&&&&&&&result name=&input&&/Login.jsp&/result&
&&&&&&&&&&&result name=&success&&/LoginSuccess.jsp&/result&
  &&&&&&&&/action&
&/package&
  &/struts&
  代码10-3 用户登陆功能struts.xml文件
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&}

我要回帖

更多关于 struts2 package 继承 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信