Struts2练习题说课讲解

合集下载

北京动力节点-Struts2讲义-第1章Struts2入门

北京动力节点-Struts2讲义-第1章Struts2入门

Struts2讲义第1章Struts2入门1.1 Struts2简介1.1.1 框架1.1.2 Struts2简介1.1.3 Struts2下载与版本Struts2官网:版本号的意义:Alpha:内测版,一般不向外部发布,会有很多Bug。

Beta:除错 + 增新内测版,但相对于Alpha版已有了很大的改进,消除了严重错误,但还是存在缺陷,需经更多测试来消除。

这个阶段的版本会加入新的功能。

RC:除错Release Candidate,发行候选版,外测版。

与Beta版最大的区别在于Beta阶段会加入新功能,而RC版一般不会加入新功能,而主要着重于除错。

RC版本是最终发放给用户的最接近正式版的版本,发行后改正bug就是正式版了,是正式版之前的最后一个测试版。

GA:General Availability,普通有效版,稳定版,官方开始推荐广泛使用了。

Release:发行版,即最终版。

在一系列测试版之后的正式发行版本,是最终交付用户使用的一个版本。

该版本也称标准版。

Release会以单词形式出现在软件封面上,有时会使用符号R。

1.1.4 Strut2的优点(1)Struts2是非侵入式设计Struts2的Action类为POJO类,不依赖于Servlet API和Struts API。

(2)Struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能。

(3)Struts2提供了类型转换器,可以将特殊的请求参数转换成需要的类型。

(4)Struts2的输入验证可以对指定方法进行验证。

(5)提供了全局范围、包范围和Action范围的国际化资源文件管理实现。

1.2 Struts2开发环境的搭建1.2.1 Struts2的Jar包Struts2最基本的Jar包,可以从Struts2框架解压目录下的apps中的struts2-blank.war 中获取。

将struts2-blank.war扩展名修改为zip后,解压。

Struts 2 讲义(2)

Struts 2 讲义(2)

Struts2(2) 工作原理一、Struts2框架结构Struts2框架按照模块来划分,可以分为Servlet Filters、Struts核心模块、拦截器和用户实现部分。

Struts2框架结构图如图4-1所示。

图4-1 Struts 2框架结构图一个请求在Struts2框架中的处理大概分为以下几个步骤。

①客户端提交一个(HttpServletRequest)请求,如上文在浏览器中输入http://localhost: 8080/bookcode/ch2/Reg.action就是提交一个(HttpServletRequest)请求。

②请求被提交到一系列(主要是3层)的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、FilterDispatcher)。

注意:这里是有顺序的,先ActionContext CleanUp,再其他过滤器(Othter Filters、SiteMesh等),最后到FilterDispatcher。

③FilterDispatcher是控制器的核心,就是MVC的Struts2实现中控制层(Controller)的核心。

④F ilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(HttpServlet Request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy。

⑤ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类。

例如,用户注册示例将找到UserReg类。

⑥ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action。

但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)。

尚学堂Struts2_01

尚学堂Struts2_01

版权所有:尚学堂科技
尚学堂
手把手教程
Struts+Hibernate+Spring
我的第一个Struts2——控制器Action
开发HelloWorldAction public class HelloWorldAction { private String name = ""; // 用户输入的姓名 private String message = ""; // 向用户显示的信息 //当Struts 2处理用户请求时,在默认配置下调用的方法 public String execute() { // 根据用户输入的姓名,进行“Hello,XXXX!”的封装 this.setMessage("Hello,"+this.getName()+"!"); return "helloWorld"; // 处理完毕,返回“helloWorld” } … //省略setter、getter方法 }
截获所有请求 从请求的URL中分析功能 分发到相应的处理类中 根据处理结果进行跳转
2. 编写处理类
1. 编写处理类接口(Action)
String execute(request,response)方法
2. 编写处理类的实现类xxxAction
版权所有:尚学堂科技
尚学堂
手把手教程
Struts2通过StrutsPrepareAndExecuteFilter过滤器来启动,在web.xml 文件中加入如下配置: <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping>

Struts2企业开发实践教程课后练习答案-第一章

Struts2企业开发实践教程课后练习答案-第一章

试验目的:•熟悉S t r u t s 2框架的基本组成。

•掌握S t r u t s 2应用的配置基础。

试验大纲:•掌握S t r u t s 2的引入和配置。

•掌握A c t i o n的编写和配置。

•掌握A c t i o n的访问。

试验任务:•创建办公自动化J a v a W e b项目o a w e b 。

•配置S t r u t s 2框架( 引入J A R, 修改w e b . x m l ) 。

•创建S t r u t s的配置文件s t r u t s . x m l 。

•创建用户增加页面“/ u s e r / a d d . j s p ”,显示的表单和表单元素如表1 - 3所示。

表1 - 3 表单及表单元素表单表单元素账号文本框密码密码框姓名文本框简介文本域提交按钮•创建用户增加处理A c t i o n “ a c t i o n . U s e r A d d A c t i o n ”, 编写 A c t i o n处理方法e x e c u t e ( ) , 并在自己的配置文件中配置p a c k a g e 、 a c t i o n和r e s u l t( 1 )取得输入的用户信息。

( 2 )如果账号、密码、姓名任何一个为空, 则自动跳转到增加页面。

2 1( 3 )如果账号、密码、姓名都不为空, 则直接在A c t i o n 中连接数据库, 将用户信息增加到用户表中, 数据库和用户表自己确定。

( 4 )增加用户成功后自动跳转到用户主页“/ u s e r / m a i n . j s p ”。

( 5 )如果增加失败, 自动跳转到用户增加页面“/ u s e r / a d d . j s p ”。

•编写用户主页“/ u s e r / m a i n . j s p ”。

显示的“增加新用户成功! 继续增加新用户”信息中“增加新用户”为超链接, 单击后可自动跳转到用户增加页面。

Struts2试题上课讲义

Struts2试题上课讲义

Struts2 试题1.struts2的执行流程?客户端提交一个HttpServletRequest请求(action或JSP页面)请求被提交到一系列Filter过滤器,如ActionCleanUp和FiterDispatcher等FilterDispatcher是Struts2控制器的核心,它通常是过滤器链中的最后一个过滤器询问ActionMapper是否需要调用某个action来处理如果ActonMapper据诶的那个需要调用某个A传统,FilterDispatcher则把请求教到ActionProxy,由其进行处理ActionProxy通过Configuration Manager询问框架配置文件,找到需要调用的Action类ActionProxy创建一个ActionInvocation实例,而ActionInvocation通过代理模式调用action Action执行完毕后,返回一个result字符串,此时再按相反的顺序通过Interceptor拦截器最后ActionInvocation负责根据struts配置文件中配置的result元素,找到与返回值对应的result2.struts2的web里需要配置什么?1.<filter>2.<!-- 配置Struts2核心Filter的名字 -->3.<filter-name>struts2</filter-name>4.<!-- 配置Struts2核心Filter的实现类 -->5.<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>6.</filter>7.<!-- 配置Filter拦截的URL -->8.<filter-mapping>9.<!-- 配置Struts2的核心FilterDispatcher拦截所有用户请求 -->10.<filter-name>struts2</filter-name>11.<url-pattern>/*</url-pattern>12.</filter-mapping>3.struts.xml文件哪个常量可以实现不用重新启动服务就可以得到反馈?Timmer4.struts中的package的作用是什么?namespace可以为空吗?如果namespace为空会意味着什么呢?标识可以、如果没写,说明该包为默认空间只要敲index没有精确对应的package都交给namespackage 如果还没有就崩溃5.Action 的实现通集成常用那种方法?一种是直接实现自己的Action另一种是实现Action的接口继承ActionSupport6.路径设置用什么路径,绝对还是相对?都可以7.通配符有几种?要遵循什么原则?{1}方法名8.Action的属性?path属性:指定请求访问Action的路径type属性:指定Action的完整类名name属性:指定需要传递给Action的ActionForm Beanscope属性:指定ActionForm Bean的存放范围validate属性:指定是否执行表单验证input属性:指定当表单验证失败时的转发路径。

struts2讲义

struts2讲义

e.g. ums_struts2_02_action/struts.xml Ⅲ. 使用 DMI 或通配符 目的:减少 Action 的数量 方式一:动态方法调用(Dynamic Method Invocation DMI,struts2.1 后不建议使 用) 定义一个 Action 类,类中可以定义多个与 execute()方法,声明部分相同但方法名 不同的方法。 e.g. ums_struts2_02_action/UserAction_DMI.java 1、定义 UserAction_DMI 类
e.g. ScopeAction_3.java 方式四:实现 ServletRequestAware 接口
e.g. ScopeAction_4.java 注意:1、其中,前两种方式与 Servlet API 解耦合,后两种方式与 Servlet API 耦合,推荐使 用第二种方式,第二种方式使用了 IOC 的模式,解耦合更好。 Ⅵ.Action 中生成响应信息 e.g. ums_struts2_02_result Struts2 框架通过 Action 中 execute()方法的返回值,与 struts.xml 中<action>的<result>元 素的 name 属性值来判断最终响应信息的内容。其中<result>元素设置如下: <result type=”结果类型” name=”名称”>WEB 资源路径或名称</result> 说明: 1、name:result 名称随便起,默认为“success“,与 execute 方法返回值一致。 2、 WEB 资源路径或名称:WEB 资源路径如果为相对路径,则该路径相对于 WEB 应用上下文。如果跳转到 Action 则为该 Action 所对应的<action>元素的 name 值。 3、 type:设置生成响应信息的类型,默认为 dispatcher。 (Ⅰ)ActionSupport 中预定义的结果常量 在 Struts2 的 ActionSupport 类中预定义了一些 Result 常量,当定义的 Action 类继承了 ActionSupport 时就可以使用这些结果常量,当然也可以使用自定义的 result 字符串。

Struts2考试题分析

Struts2考试题分析

题目1以下不属于Struts2中result的type属性( )A.actionB.redirectC.redirectActionD.dispatcher题目2下列有关拦截器说法错误的是?A.struts通过拦截器完成执行action请求处理方法前一系列操作。

例如:数据封装、文件上传、数据校验等B.在struts中,直接访问jsp页面,struts将使用默认拦截器栈处理当前请求。

C.在执行action时,struts将执行若干拦截器1、2、3,执行action完成后,将继续执行拦截器3、2、1D. 默认情况,在一个action没有配置拦截器的引用,说明当前action将不使用拦截器题目3以下哪些是Action接口提供的返回值?A.successB.noneC.errorD.input题目4如果要实现struts2的数据检验功能A普通的Action类可以实现B继承自Action接口的可以实现C继承自ActionSupport类可以实现D继承自ActionValidate类可以实现题目5struts2默认的处理结果类型是:A.dispatcherB.redirectC.chainD.forward题目6在值栈的上下文Context中,存在一些固定的key表示不同的对象,以下描述正确的是?A.request,表示request作用域的数据B.session,表示session作用域的数据C.application,表示application作用域的数据D.parameters,表示请求参数的所有数据题目7以下属于struts2配置文件中的配置元素是:()多选)A.<package>B.<action>C.<form-beans>D.<action-mappings>题目8有关值栈 context Map栈数据操作描述正确的是?A.ActionContext.getContext().put(key,value) 直接对context进行操作B.使用<s:property value="#key"/>获得context中指定key的内容C.ActionContext.getContext().getSession().put(key,value); 将数据放置context 固定key为session对应的map中D.ActionContext.getContext().getApplication().put(key,value); 将数据放置context固定key为application对应的map中题目9有关<s:iterator/>描述正确的是?A.value属性的值对应值栈中的相关的数据B.默认情况,将遍历的每一个数据都临时压入到root的栈顶,遍历结束时再将数据移除C.如果使用var属性,在值栈的context中存放一个键值对D.如果使用status属性,可以获得当前遍历的状态。

Struts 2讲义(一)

Struts 2讲义(一)

Struts 2入门讲义宋 铁11/2011CH 基本1. 2. 3. Str 1. 称作1体与内单应会导况更设计上讲务的深层页需意,中提和内H10. St 本内容Struts 2的由下载和搭建案例:基于ruts 2的Model 1早期的JSP 规作JSP Model 体系中,如图内容的分离,应用的需要,导致JSP 页内更为严重。

尽计人员开发并讲,将导致角Model 2体的方法。

它吸层次的处理任需要使用的b 在JSP 页内没提取动态内容内容,明确了truts 由来和概述。

Struts 2的运Struts 2的H 由来和概、Model 规范提出了两1 和JSP Mod 1所示,JSP 因为所以的它却不能满被嵌入大量尽管这对于Ja 并维护的――通角色定义不清体系结构,如吸取了两种技任务。

在这里ean 和对 象没有处理逻辑容插入静态模了角色的定义2(一)运行环境。

HelloWorld 程概述2和MVC 两种用JSP 技del 2,它们的P 页面独自响数据存取都是满足复杂的大的脚本片段或ava 程序员来通常这是开发清和职责分配图1.图2所示,是术各自的突出,servlets 充象,同时根据用辑;它仅负责模板。

在我看来义以及开发者)程序。

C技术建立应用的本质区别在响应请求并将是由bean 来型应用程序的或Java 代码,来说可能不是发大型项目的不明,给项 Model 1示是一种把JS 出优点,用J 充当控制者的用户的动作决责检索原先由来,这是一种与网页设计用程序的方式在于处理批量将处理结果返来完成的。

尽的实现。

不加,特别是当需是什么大 问题的规范――这项目管理带来示例图P 与servlets JSP 生成表达角色,负责管决定把那个J 由servlets 创建种有代表性的计者的分工。

式。

这两种方量请求的位置返回客户。

这尽管 Model 1加选择地随意需要处理的请题,但如果JS 这就确实是个来不必要的麻联合使用来达层的内 容,管理对请求的JSP 页传给请建的对象或 的方法,它清事实上,项方式在术语中置不同。

尚学堂Struts2_02

尚学堂Struts2_02

<param name=“excludeMethods”>m1,m2</param> <param name="includeMethods">m2</param>
</interceptor-ref> </action> 如果不指定excludeMethods和includeMethods,则所有方法都会被截拦器 截拦. 如果方法在excludeMethods和includeMethods都配置了,则 includeMethods取胜. 如果需要过滤多个方法,方法名之间用逗号隔开.
版权所有:尚学堂科技
尚学堂
手把手教程
Struts+Hibernate+Spring
HttpServletRequest
HttpServletResponse
核心控制器
Intercepter1
Intercepter2
Intercepter3
Action
Result
版权所有:尚学堂科技
尚学堂
手把手教程
版权所有:尚学堂科技
尚学堂Βιβλιοθήκη 手把手教程Struts+Hibernate+Spring
Struts2拦截器——工作原理
拦截器的执行过程是一个递归的过程,越是位于前面的拦截器越被先执行 ,但也是越晚退出。因此,拦截器的调用处理形成了“先进后出”的堆栈 的模式,因此也叫拦截器栈。
版权所有:尚学堂科技
尚学堂
Struts+Hibernate+Spring
Struts2拦截器——作用及意义 早期MVC框架将一些通用操作写死在核心控制器中,致使框 架灵活性不足、可扩展性降低 Struts 2将核心功能放到多个拦截器中实现,拦截器可自由选 择和组合,增强了灵活性,有利于系统的解耦 截拦器是Struts2中最重要的概念之一,是Struts2灵魂。 Struts2中有80%的功能都通过截拦器实现 提高更高层次的解耦,无须侵入框架本身 便可以添加新的功 能.

Struts 2讲义 (5)

Struts 2讲义 (5)

Struts 2 讲义(5)--Struts2特性一、国际化国际化的步骤:1)建立一个中文资源文件,globalMessages.properties。

用文本编辑器输入,内容如下:#定义国际化资源文件HelloWorld=你好,世界! name=用户名称 pass=用户密码 username=用户名 password1=密码password2=确认密码 birthday=生日在Dos中执行下面命令:native2ascii globalMessages.properties globalMessages_zh_CN.properties3)中文资源文件名:globalMessages_zh_CN.properties。

转换内容为:#\u5b9a\u4e49\u56fd\u9645\u5316\u8d44\u6e90\u6587\u4ef6HelloWorld=\u4f60\u597d\uff0c\u4e16\u754c\uff01name=\u7528\u6237\u540d\u79f04)建立一个英文资源文件内容为:globalMessages_en_US.propertiesHelloWorld=Hell World! name=username pass=password username=Your Namepassword1=Password password2=confirm Password birthday=Birthday5)上述两个文件保存到WEB-INF\classes目录中6)创建struts.properties 中,保存到WEB-INF\classes目录下,内容如下:struts.custom.i18n.resources=globalMessages7)创建reg.jsp<%@ taglib prefix="s" uri="/struts-tags" %><s:head/><!-- 这句很重要,如果没有时间与日期就不能正确显示 --></head><body><table><s:form id="id" action="reg"><s:textfield name="username" label="用户名"/><s:textfield name="password1" label="密码"/><s:textfield name="password2" label="确认密码"/><s:datetimepicker name="birthday" label="生日 " displayFormat="yyyy-MM-dd" /> <s:submit value="注册"/>8)创建reg_ok_local.jsp代码如下所示:<%@ taglib prefix="s" uri="/struts-tags" %><html><head><title>注册成功</title></head><body>欢迎<s:property value="username"/>注册成功!<h2><s:text name="HelloWorld"/></h2><h2><s:text name="username"/></h2><h2><s:text name="password1"/></h2><h2><s:text name="password2"/></h2><h2><s:text name="birthday"/></h2>9)创建Reg.javapublic class Reg implements Action {private String username; private String password1;private String password2; private Date birthday;public Reg(){}public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String execute() throws Exception {return SUCCESS;9)配置struts.xml<action name="reg" class="com.my.inter.Reg"><result name="success">/reg_ok_local.jsp</result></action>改进reg_tag.jspStruts2 可以在label值中访问国际化资源文件。

struts2复习题(含答案)教学文案

struts2复习题(含答案)教学文案

Struts2复习题1.以下属于struts2的控制器组件是:A.ActionB.ActionFormC.ActionServletD.dispatchAction2.以下属于struts2配置文件中的配置元素是:(多选)A.<package>B.<action>C.<form-beans>D.<action-mappings>3.关于struts1和struts2对比的说法正确的是:A.struts1要求Action类继承struts1框架中的Action父类,struts2中则不一定需要继承,可以是POJO类B.struts1中的Action不是线程安全的,而struts2中的Action是线程安全的D.struts1使用OGNL表达式语言来支持页面效果,struts2通过ValueStack技术使标签库访问值4.以下关于ValueStack说法正确的是:(多选)B.每个Action对象实例拥有多个ValueStack对象C.Action中封装了需要传入下一个页面的值,Action对象封装在ValueStack对象中D.ValueStack会在请求开始时被创建,请求结束时消亡5.关于struts2配置文件说法正确的是:A.必须在WEB-INF/classes目录下B.名字必须为struts.xmlC.配置Action时,必须配置包信息D.使用<forward>元素配置转发6.在struts2配置中用()元素来配置常量:A.<const>B.<constants>C.<constant>D.<constant-mapping>7.关于struts2包的说法正确的是:A.struts2框架使用包来管理常量B.struts2框架定义包时必须指定name属性D.struts2框架中使用包来管理Action8.struts2中获取Servlet API的方法正确的是:(多选)A.使用ActionContext对象以解耦合的方法访问Servlet APIB.使用ServletActionContext对象以解耦合的方式访问Servlet APIC.使用ActionContext对象以耦合的方式访问Servlet APID.使用ServletActionContext对象以耦合的方式访问Servlet API9.struts2动态方法调用的格式为:A.ActionName?methodName.actionB.ActionName! methodName.actionC.ActionName*methodName.actionD.ActionName@mathodName.action10.如果要实现struts2的数据校验功能A.普通Action类可以实现B.继承自Action接口可以实现C.继承自ActionSupport类可以实现D.继承自ActionValidate类可以实现11.如果要实现自定义处理结果,需继承那个类A.DispathcerB.StrutsResultSupportC.SupportD.Action12.实现动态返回结果,在配置<result>元素时使用()指定视图资源A.${属性名}B.@{属性名}C.${'属性名'}D.${"属性名"}13.用于实现国际化的struts2标签是:A.<s:text>B.<s:message>C.<s:textfield>D.<s:resource>14.struts2默认的处理结果类型是:A.dispatcherB.redirectC.chainD.forward15.自定义转换器继承的抽象类是:A.ConverterB.TypeConverterC.StrutsTypeConverterD.DefaultTypeConverter16.自定义转换器的注册方式有:A.只有全局注册方式B.只有局部注册方式C.只有全局和局部注册方式D.以上说法都不对17.自定义拦截器类的方式有:(多选)A.实现Interceptor接口B.实现AbstractInterceptor接口C.继承Interceptor类D.继承AbstractInterceptor类18.在struts.xml文件中,使用()元素定义拦截器A.<interceptor-ref>B.<interceptor>C.<intercep>D.<default-interceptor-ref>19.20.以下属于struts2标签的是:(多选)A.Ajax标签B.数据访问标签C.logic标签D.bean标签21.以下哪个标签是struts2中的用于循环迭代:A.<s:property>B.<s: iterator >C.<s:logic>D.<s:forEach>22.Struts2主要核心功能是由()实现a)过滤器b)拦截器c)类型转换器d)配置文件23.24.Struts2框架由()和()框架发展而来的【选择二项】a)Hibernateb)Struts 1c)Springd)WebWork25.Struts2以(B)为核心,采用()的机制处理用户请求a)Strutsb)拦截器c)jar包26.struts2中,不属于Action接口中定义的字符串常量的是()a)SUCCESSb)FAILUREc)ERRORd)INPUT27.struts2在控制器类中一般需要添加相应属性的()和()【选择二项】a)setter方法b)as方法c)getter方法d)is方法28.struts2控制器需要在()配置文件中进行配置a)web.xmlb)struts.xmlc)application.porpertiesd)webwork.xml29.不属于struts2标签库的是()a)<s:textfield>b)<s: textarea >c)<s:submit>d)<select>30.在JSP页面中可以通过Struts2提供的()标签来输出国际化信息a)<s:input>b)<s:messages>c)<s:submit>d)<s:text>31.资源文件的后缀名为()a)txtb)docc)propertyd)properties32.struts2自定义类型转换器必须实现的接口是()a) Convertb) TypeConverterc) StrutsTypeConverterd) StrutsConvert33.struts2关于注册全局类型转换器的说法正确的是()【选择二项】a) 必须提供xwork-conversion.properties文件b) 注册文件的格式为:复合类型=对应类型转换器c) 注册文件的格式为:对应类型转换器=复合类型d) 以上说法都不正确34.struts2自定义拦截器中的“return invocation.invoke()”代码表示()【选择二项】a) 不执行目标Action的方法,直接返回b) 执行目标Action的方法c) 在自定义拦截器中,该代码是必需的d) 在自定义拦截器中,该代码是可选的35.struts2中,以下配置文件上传拦截器只允许上传bmp图片文件的代码,正确的是()a) <param name=”allowedTypes”>image/bmp</param>b) <param name=”allowedTypes”>*.bmp</param>c) <param name=”allowedTypes”>bmp</param>d) <param name=”allowedTypes”>image/*.bmp</param>36.以下关于OGNL的说法正确的是()【选择二项】a) ActionContext是OGNL的上下文环境b) StackContext是OGNL的上下文环境c) ValueStack是OGNL的根d) ActionContext是OGNL的根37.假设在Session中存在名为uid属性,通过OGNL访问该属性,正确的代码是()a) #uidb) #session.uidc) uidd) ${session.uid}38.39.假设在某JSP页面中存在”<s:property />”代码,则以下说法正确的是()a) 编译JSP页面时会出现错误b) 编译JSP页面时不会出现错误,但页面不会显示任何内容c) 该代码用于输出位于ValueStack(值栈)栈顶的对象d) 以上说法都不正确40.struts2默认的处理结果类型是()a) dispatcherb) redirectc) chaind) 以上说法都不正确41.下列选项中,关于Struts2配置文件说法正确的是()a) 必须置于WEB-INF/classes目录下b) 必须为Struts.xmlc) 配置Action时必须配置包信息d) 使用<forward>元素配置转发42.下列选项中,关于Struts2的Action说法正确的是()【选择二项】a) struts2会为每一个请求创建一个对应的Action实例b) struts2在请求处理过程中,只有一个Action实例c) struts2通过属性来封装用户请求参数d) 在struts2中定义的属性都用于封装用户请求参数44.45.46.struts2中动态方法调用的格式为()a) ActionName_methodName.dob) ActionName!methodName.doc) ActionName_methodName.actiond) ActionName!methodName.action问答题:MVC是什么含义?。

Struts 2讲义 (6)

Struts 2讲义 (6)

Struts 2 讲义(6)--Struts2实例分析(角色管理)一、角色管理版本一:Role_1 实现角色添加设计步骤:1.添加用户角色界面设计:addRole.jsp代码:<%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><body><s:form action="roleManager!saveRole" theme="simple"> <td><s:label value="角色名称"/></td><td><s:textfield name="roleName" /></td><td><s:label value="角色描述"/></td><td><s:textarea name="roleDesc" cols="30" rows="5" /></td> <td><s:submit value="确定"/></td><td><s:reset value="取消"/></td></tr></s:form>2.创建Role数据库,tb_role表3. 创建数据源role、数据库连接类DBCon类import java.sql.*;public class DBCon {private Connection con;public DBCon(){}public Connection getConnection(){try {return con;4.创建角色访问接口:RoleDAO.javaimport com.my.bean.TRole;public interface RoleDAO {//保存角色public boolean saveRole(TRole role);//根据角色名称查询角色是否存在public boolean isExistRoleByRoleName(String roleName);}5.创建角色DAO实现:RoleDAOImpl.javapackage com.my.dao.impl;import com.my.bean.TRole;public class RoleDAOImpl implements RoleDAO {private DBCon db;private Connection con;private Statement stmt;private PreparedStatement pstmt;private ResultSet rs;public RoleDAOImpl(){db=new DBCon();}//根据角色名称查询角色是否存在public boolean isExistRoleByRoleName(String roleName) { boolean result=false;try{c on=db.getConnection();S tring sql="select * from tb_role where roleName=?";p stmt=con.prepareStatement(sql);p stmt.setString(1, roleName);r s=pstmt.executeQuery();i f(rs.next()){result=true;}i f(rs!=null) rs.close();i f(pstmt!=null) pstmt.close();i f(con!=null) con.close();}catch(SQLException e){e.printStackTrace();}return result;}//保存角色public boolean saveRole(TRole role) {boolean result=false;try{c on=db.getConnection();S tring sql="insert into tb_role values(?,?)";p stmt=con.prepareStatement(sql);p stmt.setString(1, role.getRoleName());p stmt.setString(2, role.getRoleDesc());int i=pstmt.executeUpdate();if(i>0){result=true;}i f(pstmt!=null) pstmt.close();i f(con!=null) con.close();}catch(SQLException e){e.printStackTrace();}return result;6.创建角色控制端:RoleManager.javaimport com.my.bean.TRole;public class RoleManager implements Action {private String roleName;//角色名称private String roleDesc;//角色描述private RoleDAO roleDAO;public String saveRole(){String result="";roleDAO=new RoleDAOImpl();boolean isExist=roleDAO.isExistRoleByRoleName(roleName);if(isExist){//已存在result="input";}else{//不存在TRole role=new TRole();role.setRoleName(roleName);role.setRoleDesc(roleDesc);boolean iresult=roleDAO.saveRole(role);if(iresult){//添加成功result="success";}else{//添加失败result="error";}return result;}public String getRoleName() {return roleName;}public void setRoleName(String roleName) {this.roleName = roleName;}public String execute() throws Exception {return SUCCESS;7.创建成功页面、失败页面addSuccess.jsp<body>This is my JSP page. <br><h3>添加角色成功啦!</h3></body>error.jsp<body>This is my JSP page. <br><h3>添加角色失败啦</h3></body>8.配置文件struts.xml<package name="role" extends="struts-default"><action name="roleManager" class="com.my.control.RoleManager" ><result name="success">/role/addSuccess.jsp</result><result name="error">/role/error.jsp</result><result name="input">/role/addRole.jsp</result></action></package>项目结构图如下图所示:二、角色管理版本二:Role_2 实现角色显示功能:增加角色显示,要求角色添加后能够直接显示出所有已存在的角色信息。

struts2讲义(传智播客_王昭珽)

struts2讲义(传智播客_王昭珽)

类型转换概述从一个HTML表单到一个动作对象,类型转换将是从字符串到非字符串.因为HTTP没有“类型”的概念,所以一切表单输入都将以请求参数的形式被发送到服务器,而每一项表单输入之可能是一个String或一个String数组。

在服务器端,必须先把这些String值转换为特定的数据类型,才能进行相应的处理。

把请求参数映射到动作属性的工作由Parameters拦截器负责,它是defaultStack拦截器栈的一员。

所有的请求参数都是String类型,但并非所有的动作属性都是String类型,所以每一种非String类型的动作属性需要对相关的请求参数进行类型转换。

struts2提供的转换解决方案Struts2在类型转换失败时会发生错误,具体如何处理取决于你的动作类是否实现了com.opensymphony.xwork2.ValidationAware接口。

1、没有实现该接口:struts在遇到类型转换错误时仍会继续调用其动作方法,就好像什么问题都没有发生过那样。

2、如果实现了该接口:struts在遇到类型转换错误时不会继续调用其动作方法,它将检查相关动作元素中是否包含着一个input结果。

如果是,struts将把控制权转交给那个result 元素;如果找不到这样的结果,struts将抛出一个异常。

注:如果你的动作类继承自com.opensymphony.xwork2.ActionSupport,就相当于你间接实现了com.opensymphony.xwork2.ValidationAware接口。

类型转换错误消息的定制conversionError拦截器负责添加与类型转换有关的出错消息和保存各请求参数的原始值,它是defaultStack中的一员。

使用该拦截器的前提是你实现了com.opensymphony.xwork2.ValidationAware接口。

如果你用来呈现这个字段的标签使用的不是simple主题,有非法值的字段将导致一条有着以下格式的出错消息:Invalid field value for field "fieldName".我们可以通过以下方式来改变该消息:1、在动作类所在的包中创建一文件,文件的命名规则是ClassName.properties。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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)都不起作用。

相关文档
最新文档