1.下面关于Struts2描述正确的是()。
A. Struts2是线程安全的
B. Strut2为每个请求都只生成一个Action实例
C .Strut2是在Struts1基础上发展起来的
D. Struts2只支持jsp视图组件
2.Struts2配置包时,必须继承struts-default包,在下
面的哪个文件中可以找到struts-default包的配置()。
A.default.properties
B.
struts-message.properties
C. struts.dtd
D.struts-default.xml
3.Struts2默认的处理结果类型是()。
A. dispatcher
B. redirect
C. chain
D. 以上说法都不正确
4.在Struts2框架中,实现Action接口的作用是()。
A.实现其中的execute()方法
B.实现数据校验
C.实现国际化
D.规范Action类
5.在Struts2中动态方法调用的格式为()。
A. ActionName_methodName.do
B. ActionName!methodName.do
C. ActionName_methodName.action
D. ActionName!methodName.action
6.在Struts2中自定义的类型转换器必须实现的接口是
()。
A.Convert
B.TypeConverter
C. StrutsTypeConverter
D. StrutsConvert
7.在Struts2中,Action类中的属性从表单获取用户输入
的值,以下哪个组件将表单的值解析出来赋给Action ()。
A. ActionServlet
B. Action
C. 拦截器栈
D. HttpServletRequest
8.在Struts2中,关于 executeResult=”true”>标签说法正确的是()。[选两项] A. name属性必须与struts.xml配置文件中 name一致 B. 执行name为login的action类,并返回处理结果 C. 执行name为login的action类,但是不返回处理结 果 D. name属性可以与struts.xml配置文件中 name不一致 9.以下关于“#session.persons.{?#this.age>20}” OGNL 代码所表示的意义说法正确的是()。 A. 从persons集合中取出第一个年龄大于20的Person 对象 B. 从persons集合中取出所有年龄大于20的Person对 象子集 C. 从persons集合中取出最后一个年龄大于20的Person 对象 D. 该代码不符合OGNL的语法 10.下列关于Struts2配置文件,说法正确的是()。 A. 必须放在WEB-INF/classes目录下面 B. 必须为struts.xml C. 配置Action时,必须配置包信息 D. 使用 11.用于读取资源文件,实现国际化的Struts2标签是 ()。 A. B. C. D. 12.下面关于注册全局类型转换器说法正确的是()。 [选两项] A. 必须提供xwork-conversion.properties文件 B. 注册文件的格式为:复合类型=对应类型转换器 C. 注册文件的格式为:对应类型转换器=复合类型 D. 以上说法都不正确 13.关于自定义拦截器中的invocation.invoke()方法的 返回值描述正确的是()。 A. 返回Struts2在资源文件中已经定义好的一个字符串 B. 返回一个null字符串 C. 返回Action的execute方法的返回值 D. 以上说法都不正确 14.以下关于OGNL的说法正确的是()。[选两项] A. ActionContext是OGNL的上下文环境 B. StackContext是OGNL的上下文环境 C. ValueStack是OGNL的根 D. ActionContext是OGNL的根 15.假设在session中存在名为uid属性,以下通过OGNL 访问该属性正确的代码是()。 A. #uid B. #session.uid C. uid D. ${session.uid} 16.以下关于ValueStack描述正确的是()。[选两项] A.ValueStack是一个类 B. 存储在ValueStack 中的数据可以使用EL表达式来访 问 C. ValueStack在请求开始时被创建,请求结束时消亡 D. 每个Action类的对象实例均拥有多个ValueStack对 象 17.在 明正确的是( ) (选三项) a)getCount()方法,返回当前迭代了几个元素 b)getIndex()方法,返回该标签要循环的次数 c)isEven()方法,返回当前被迭代的索引是否为偶数 d)isOdd()方法,返回当前被迭代的索引是否为奇数 18.执行ActionContext.getContext().put("uid","admin")方法后,则uid变量值存储在( ) A)ValueStack B)StackContext C)Request D)Session 19.以下关于Struts2的Action类描述正确的是( ) A)Action类完全是一个POJO类,具有良好的代码重用性。 B)Action类无须与任何Servlet API耦合,单元测试非常之 简单。 C)Action类的execute方法仅返回一个字符串作为处理的 结果,该处理结果可以映射至任何视图,甚至是另一个Action。 D)以上说法都正确。 20下列不属于OGNL中取得子集时的操作符的是() A)? B)^ C) % D)$ 21.OGNL标签: A)正确输出结果 B)显示NULL C)什么都不显示 D)显示报错信息 22.在创建 A)application B)request C)page D)StackContext 23下面关于拦截器说法正确的有:()(选二项) e)面向OOP f)在Action之后调用 g)在ACTIO之前调用 h)创建自定义拦截器一定要继承Interceptor 24以下关于属性驱动和模型驱动正确的说法有()(选二项) A)通过Action实例中的属性来封装用户请求参数的方式 成为属性驱动 B)在用户请求参数较多的情况下使用属性驱动 C)在用户请求参数较多的情况下使用模型驱动 D)使用模型驱动时Action必须实现ModelDriven接口 25.以下属于Struts2 用户界面标签的有()(选二项) A)表单标签 B)非表单标签 C)流程控制标签 D)AJAX标签 26下列属于 A)Id B)Name C)Value D)scope 27.对于Struts2的特点,错误的是:() A)具有灵活性 B)使用事件驱动和MVC类型框架 C)有多种解决方案 D)内置集成的言JQUERY框架 28.Struts2 在脚本中,在Request,sesson中保存属性为uname 的值,能取出该值的是:()(选二项) A)#uname B)#attr.uname C)#session.uname D)uname 29.以下关于OGNL说法正确的是()(选二项) A)只要存储的ActionContext中的值都可以被OGNL访问 B)对于集合进行操作的操作符是?,^,$ C)OGNL的上下文中的根对象可以直接访问 D)使用OGNL访问存储的值必须使用“#”标记 30.在Struts2中以下说法正确的是( ) (选二项) A)在struts2中配置包时,必须继承自struts-defuault包 B)配置多包含文件时使用 C)struts2中的命名空间namespace是物理路径 D)在使用自定义拦截器时,不一定要调用invoke方法 31.Struts2 自定义拦截器必须实现那个接口() A)Convert B)Interceptor C)StrutsConvert D)StrutsTypeConvert 32,在Struts2应用的控制器中包含哪些组件? ( ) (选二项) A)FilterDispatcher B)Dispatcher C)ActionServlet D)Action 33.Struts2控制器需要在()配置文件中进行配置。 A)web.xml B)struts.xml C)struts2.xml D)webwork.xml 34.不属于Struts2 Action接口中定义的字符串常量的是()。 A)SUCCESS B)FAILURE C)ERROR D)INPUT 35.不属于Struts 2表单标签库的是()。 A) B) C) D) 36.下面关于sturts2中struts.xml文件的包管理机制和命名空间的配置说法正确的是( )(选两项) A)所有的Action必须配置在package中 B)struts2中支持为单独的Action设置命名空间 C)struts2中配置包是,必须继承自struts-default包,否则 将出现错误 D)struts2允许通过include配置元素将一个配置文件分解 为多个配置文件且配置include元素是,不必指定file属性。 37.struts2与struts1相比有哪些优点( ) A)struts2不用继承Action父类,而Struts1需要继承 B)struts2直接使用Action属性封装用户请求参数,相比 struts简单 C)struts2是中的Action是线程安全或同步的,用起来可靠 D)Struts2不仅可以使用JSTL表达式语言,同时整合了一 种更强大的OGNL语言 38,下列,关于拦截器说法正确的有( )(选两项) A)拦截器是动态拦截Action调用的对象 B)所有与系统逻辑相关的通用功能都需要通过自定义拦 截器来实现 C)在Action中覆盖拦截器,则以Action中的拦截器为主 D)在Action加拦截器,不影响接受参数 2012年第11卷第6期 产业与科技论坛2012.(11).6 Industrial &Science Tribune Struts2框架工作原理及应用体会 □宋 君 张家爱 【摘要】通过针对特定用户的分析,搭建以Struts2为技术核心的旅行社管理系统。本文简单的介绍了MVC 、 Struts2的工作原理,同时总结了在项目制作过程中所得到的心得。 【关键词】 Struts2;MVC ;FilterDispatcher ;Action 【基金项目】本文为大学生科技创新院级基金项目(编号:2011070)成果 【作者单位】宋君,吉林农业科技学院信息工程学院;张家爱,吉林农业科技学院信息工程学院教师 本着锻炼自我与积极参与到实用性技术的目标,以发掘自身创新意识为前提。利用空闲时间,在老师的指导下,进行了一次大学生创新项目的实践性活动。本着实用原则,以某中小旅行社为客户(根据用户需求,匿名),以Struts2框架为基点,进行了一次旅行社管理系统的开发。在项目结束之余, 特将在项目过程中经历的种种认识进行了简单的总结,希望让阅读本文的朋友们,更多的参与到此类活动中。 一、基础思想— ——MVC 简述作为时下经典框架之一, MVC 具有其独特的价值。MVC 框架简单的说,就是将数据模型与用户视图进行分离。通过控制器进行协调处理的一种结构是框架。同时,也是本文中要讨论的Sturts2框架的基础思想。 M 是指模型层(Model ),V 是指用户视图(View ),C 则是指控制器 (Controller )。这种划分方式是以将模型层与视图层进行代码分离,从而降低两者之间的耦合性,使同一程序可以使用不同形式进行表现。不同层之间的修改不会或尽量少的印象到其他层功能的史前为前提。有效的提高的代码的维护性和设计难度。 图1 二、 Struts2工作原理(一)Struts2框架组成。Struts2框架由三个主要部分组成:核心控制器、业务控制器,以及由用户实现的业务逻辑组件。这里我们将侧重于核心控制器与业务控制器的理解与说明。 (二)核心控制器:FilterDispatcher 。FilterDispatcher 是Struts2框架的核心控制器,在此,我们可以将FilterDispatcher 看作一个类似于过滤网的过滤器。当用户发出请求,并到达Web 硬哟那种时,该过滤器会过滤用户请求。如果用户请求的结尾为action ,则将该请求转入Struts2框架进行处理。当Struts2框架获得了*.actio 请求后,会根据请求前面“*”的那部分内容,决定调用哪个业务逻辑组件作为响应单位。这里需要说明的是Struts2用来处理用户请求的Action 实例并不是业务控制器,而是作为Action 的代理———正因为Struts2的一大特点,与Servlet API 的非耦合性,使得用户实现的业务控制器无法直接处理用户请求。有效的提高了后期调试维护的效率。而Struts2框架再次提供了了一系列的拦截器。这些拦截器负责将HttpServletRequest 请求的参数解析出来,传入Action 中,并毁掉Action 的Execute 方法来处理用户请求。用户实现的Action 类仅作为Struts2的Action 代理的代理目标。用户实现的业务控制器则包含了对用户请求的处理。用户的请求数据包含在HttpServletRequest 对象中,而用户的Action 类无需访问HttpServletRequest 对象。拦截器负责将HttpServletRequest 里的请求数据解析出来,并传给业务逻辑组件Action 实例。 (三)业务控制器。业务控制器就是前文提到的用来实现用户Action 的实力,这里的每个Action 类通常包含有一个execute 方法,当业务控制器处理完用户的请求后,该方法将会针对此次处理返回一个字符串— ——该字符串就是一个逻辑树图名。当程序开发人员开发出系统所需要的业务控制器后,还需要针对性的配置Struts2的Action ,即需要配置Ac- tion 的以下三个部分:(1)Action 所处理的URl 。(2)Action 组件所对应的实现类。(3)Action 里包含的逻辑试图和物理资源之间的对应关系。每个Action 都要处理一个用户请求,而用户请求则总是包含有指定的URL 。当核心控制器过滤用户请求,并调用后,根据请求的URL 和Action 处理URL 之间的对应关系来处理转发。 · 342· struts1开发学习笔记 使用一个简单的例子记录struts1开发过程。 0、 描述 主要功能描述: index 界面上只有两个超链接,分别可以打开录入产品界面和显示产品列表界面。 newProduct.jsp 是录入的界面,searchProduct.jsp 是查询列表的界面。 ProductAction.java 是处理逻辑的action 简单描述流程图: 1、 构建环境 在Myeclipse 中,新建一个工程StrutsTest ,选择该工程,右键Myeclipse->add sruts capapibality ,弹出界面,选择struts1.2支持。如下图所示: 添加完struts 支持后,lib 目录下会增添struts 的jar 包、增添struts 的配置文件: /WEB-INF/struts-config.xml 、同时在web.xml 中增添了struts 的配置。 2、 代码编写 2)创建工具类Util.java,从数据库连接池中获得连接。需要两个步骤 第一步:在WebRoot/META-INF/下新建一个context文件,通过jndi方式配置数据源, 第二步:在util类中读取配置获得连接,util.java如下: 3)创建工具类EncodingFilter.java,自定义过滤器,并在web.xml中配置,参考web.xml 配置中内容。EncodingFilter.java的内容如下: 4)修改web.xml,指定首页为index.jsp。文件内容如下:最后定义了一个fileld 的过滤器,是用来过滤字符编码的,后面会提到。 阐述struts2的执行流程。 Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action 和用户实现的企业业务逻辑组件。 核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理 机制。业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2 是WebWork的升级版本。 基本简要流程如下: 1、客户端浏览器发出HTTP请求。 2、根据web.xml配置,该请求被FilterDispatcher接收。 3、根据struts.xml配置,找到需要调用的Action类和方法,并通过IoC方式,将值注入给Aciton。 4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。 5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到 相应页面。 6、返回HTTP响应到客户端浏览器。 工作原理 在Struts2框架中的处理大概分为以下几个步骤 1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否 需要调用某个Action 4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action 类 6 ActionProxy创建一个ActionInvocation的实例。 7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP Struts2项目的构建与配置 1.配置struts.xml (1)配置struts.xml可以参考下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的 参考项目的struts.xml文件。 (2)主要的配置如下: 一、 1、struts2 struts2是mvc设计思想的一个实现,可以将项目低耦合,提高扩展性 2、struts2和struts1的区别 struts2不是struts1的升级,而是继承的下xwork的血统,它吸收了struts1和webwork 的优势。 struts2的action是原型,安全的,struts2的action是单例,非安全 3、步骤: 1、导入包 2、在web.xml文件中,加入struts2的核心拦截器 3、在src下放入struts2的xml struts.xml 4、url http://localhost:8080/Struts2_01_HelloWorld/demo/hello.action 二、 1、默认值 2、转发和重定向的区别 转发:url显示的依然是上一个的url,共享上一次的请求 重定向:url显示的是下一个的url,不共享 3、url http://localhost:8080/Struts2_02_Default/demo/hello.action 4、路径 http://localhost:8080/Struts2_02_Default/demo/a/b/c/hello.action 1、原路径找不到,http://localhost:8080/Struts2_02_Default/demo/a/b/hello.action 2、如果1找不到,http://localhost:8080/Struts2_02_Default/demo/a/hello.action 3、如果2找不到,http://localhost:8080/Struts2_02_Default/demo/hello.action 3、如果3找不到,http://localhost:8080/Struts2_02_Default/hello.action 三、 11、自定义action Struts2 + Hibernate开发笔记(一) 由于开发任务紧张,因为这里的开发笔记,仅用于记录遇到的几个struts2和hibernate结合开发的现象.不对其做分析. 1. 在使用struts2时,页面和action之间的传值 这是struts2和struts1最大的区别. Struts2中,action和jsp页面之间的信息交互,是通过action中定义的成员变量来实现的. 例如,我在一个名为EstateAction的类中有如下定义 public class CityAction extends BaseAction { private MthCity mthCity ; private String cityName; private Long cityId private int couter; public String loadCity() throws DataAccessException, BaseException{ counter ++; return "city"; } } 然后,这里上面的类中的成员类MthCity的定义如下 public class MthCity implements java.io.Serializable { private Long cityId private String cityName; public MthCity() { public Long getCityId() { return this.cityId; } public void setCityId(Long cityId) { this.cityId = cityId; public String getCityName() { return this.cityName; } public void setCityName(String cityName) { this.cityName = cityName; } } 这是一个Hibatenate使用的数据对象POJO类. 有了这两个类后,我们来看看Struts2的Action和JSP页面之间是如何交互的 一. JSP -> Action Jsp页面 以下是一个jsp页面submit.jsp.这个页面只有一个功能,就是向struts提交申请 <%@ page language="java" contentType="text/html; charset=gbk"%> <%@ include file="/common/taglibs.jsp"%> 1.系统分析与设计 1.1 系统功能描述 本系统是个非常简单的注册、登录系统。本系统的实现是基于Struts2、Spring、Hibernate 三个框架,系统功能单一,业务逻辑简单。 当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。 当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。 系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按钮来重复注册多个用户。 系统还提供了一种Ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名不能重复。故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重新选择用户名注册。 当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登录用的用户名、密码后,系统一样提供了基本的输入校验。 除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符串和系统随机生成的验证码字符相同时,系统才允许用户登录。 1.2 系统功能流程 1.3 数据库设计 相关的映射文件: 1.Struts2在jsp页面中使用 Struts2在WebWork基础上发展起来的,可扩展的JAVA EE web框架。框架设计的目标贯穿整个开发周期,从开发到发布,包括维护的整个过程。 Action类:Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。Action接口不是必须的,任何有execute标识的POJO 对象都可以用作Struts2的Action对象。 线程模式:Struts2Action对象为每一个请求产生一个实例,因此没有线程安全问题。 Servlet依赖:Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。 可测试性:Struts2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。 捕获输入:Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。Action属性能够通过web页面上的taglibs访问。 表达式语言:Struts 2 使用"ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。Struts2不仅支持JSTL, Struts2 还可使用OGNL进行类型转换。提供基本和常用对象的转换器。 校验:Struts2支持通过validate方法和XWork校验框架来进行校验。XWork 校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性。 目录 01 Struts2-Action (5) 一、Struts作用: (5) 二、搭建Struts2的运行环境: (5) 三、Namespace (6) 四、 在用到spring框架中时,场景如下 post 请求过去,对象接收不到参数的值(解决办法:考虑到在参数上加个@RequestBody 注解即可,有些没加的是框架帮忙处理了后默认接收的是json串) http://localhost:8080/xxxxxxxxxxx-xxxxxxx-api/xxxxxx/xxxxx/xxxxxxxxx/sugges t/add.sgt ================================================== ==================================== mapper.xml->@Repository{存储数据层}->@Service{业务层}->@Controller{展示层} (spring注解可以理解为这样的线性,任其项目结构怎么变这样的线性结构是不会变的,万变不 离其宗) @Repository @Service @Controller均是注册在spring上下文中 @Autowired 在spring上下文中找bean @Qualifier 配合@Autowired使用当找到多个同一类型的bean,则会抛异常,此时可以使用@Qualifier("beanName"),明确指定bean的名称进行注入 @RequestMapping 配置连接 @Required 注册在sett方法上,检查有没有被调用 @RequestParam 绑定参数 @RequestBody读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上 MyEclipse开发Struts2过程 Struts2是Struts1.x的升级换代产品,但是并没有继承Struts1.x的思想和操作模式,而是一个完全不同的实现方式,所以即使学会了Struts1.x还是得从头学习Struts2,但是当你学会了Struts2后会发现这个产品对编程及配置有了很大的简化,使得程序员将更多的精力集中到业务逻辑编程方面,下面就在MyEclipse8.5M1平台下如何开发基于Struts2的Web应用系统的MVC模式中的VC部分作以简要的描述,M部分还是可以采用其他框架实现,例如Spring+Hibernate等。 (一)创建基于Struts2的Web项目 从MyEclipse的菜单中一次选择File\New\Web Project,在弹窗中填写该项目的名称信息,并且选择J2EE的版本,如图: (二)添加Struts2支持 将鼠标定位到Package Explorer视窗的该项目名称上,单击右键,在弹出的菜单上依次选择MyEclipse\Add Struts Capabilities,在弹窗中选择Struts的版本为Struts2.x,单击“Next”按钮进入下一个窗口,选择要加入的支持类库,库的选择视项目需求而定,可以在后续开发过程中陆续加入,这里只选择Struts2 Core Libraries。完成这些操作后发现系统在src目录下添加了一个配置文件struts.xml,这个文件就是Struts2的核心配置文件,后续的操作都在此文件中进行。 (三)编写JSP页面代码 这里注意尽量使用Struts2的标签来编写JSP代码,所以要在页面代码开始部分引入标签库,即添加该行代码<%@ taglib prefix="html" uri="/struts-tags"%>,MyEclipse8.5M1目前还不支持基于Struts2的JSP模板,所以在新建JSP页面代码的时候,先选择基于Struts1.x模板,然后再手动修改,也就是把该页面代码中 Struts2基础知识 Struts2概述 1.Struts2框架应用javaee三层结构中的web层框架。 2.Struts2框架在struts1和webwork基础之上发展的全新框架。 3.Struts2所解决的问题: 在以往实现一个功能时,都需要写很多的servlet,从而造成后期维护上的不方便。 图解: 4.现在比较稳定的Struts2版本 struts-2.3.24-all.zip 5.web层常见框架 1.struts 2.springMVC Struts2框架入门 1.导入jar包 1.在lib里面有jar包,但不能全部导入,因为里面含有一些spring 包,是不能使用的,导入会导致程序不能运行。 2.到app目录里面复制案例的jar包是最好的方法。 2.创建action 3.配置action类的访问路径 1.创建struts2核心配置文件,该核心配置文件位置和名称是固定的, 位置必须在src下面,名称为struts.xml 。 2.引入dtd约束,可以在案例文件中找到,复制在struts.xml文件中即 可。 3.action的配置 *注意访问路径: http://域名/端口号/项目名/action名.action 注意:.action可以省略,但建议不要省略,为了兼容一些老版本的浏览器。 4.配置Struts2的过滤器,可以在案例中的web.xml文件中找到,复制粘贴 即可。 Struts2执行过程 图解: Struts2配置 1.是一种常量标签 2.修改Struts2的默认常量值 1.常用方式 在struts.xml中进行配置。 2.其它两种方式 1.在src下面创建struts.properties文件并修改。 2.在web.xml文件中进行修改。 3.Struts2最常用的常量 struts.il8n.encoding=UTF-8,解决表单在通过post方式提交中文时,中文乱码的问题。 Struts2面试题 1、struts2工作流程 Struts 2框架本身大致可以分为3个部分: 核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。核心控制器FilterDispatcher是Struts 2框架的基础, 包含了框架内部的控制流程和处理机制。 业务控制器Action和业务逻辑组件是需要用户来自己实现的。 用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件, 供核心控制器FilterDispatcher来使用。 Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同, 所以说Struts 2是WebWork的升级版本。基本简要流程如下: 1 、客户端初始化一个指向Servlet容器的请求; 2、这个请求经过一系列的过滤器(Filter) (这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器, 这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3 、接着FilterDispatcher被调用, FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 4、如果ActionMapper决定需要调用某个Action, FilterDispatcher把请求的处理交给ActionProxy 5、ActionProxy通过Configuration Manager询问框架的配置文件, 找到需要调用的Action类 6、ActionProxy创建一个ActionInvocation的实例。 7、ActionInvocation实例使用命名模式来调用, 在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP 或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper 9、响应的返回是通过我们在web.xml中配置的过滤器 10、如果ActionContextCleanUp是当前使用的,则FilterDispatecher将不会清理sreadlocal ActionContext;如果ActionContextCleanUp不使用,则将会去清理sreadlocals。 2、说下Struts的设计模式 MVC模式: web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用Action的execute()方法。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生 成动态的网页,返回给客户。 Struts2_day03 前一天内容 1 在action获取表单提交数据 (1)使用ActionContext类获取 (2)使用ServletActionContext类获取 (3)接口注入 2 结果配置 (1)全局结果页面和局部结果页面 (2)result标签type属性 - type属性值: -- 默认值是dispatcher做转发 -- redirect做重定向 -- chain转发到action -- redirectAction重定向到action 3 struts2提供获取表单数据方式 (1)属性封装 (2)模型驱动封装 (3)表达式封装 4 struts2获取数据封装到集合中 5 使用模型驱动和属性封装注意问题: (1)不能同时使用对同一个表单进行数据操作 6 表达式封装和模型驱动比较 (1)相同点:可以把数据封装到实体类对象里面 (2)不同的:表达式封装可以封装到多个实体类对象里面今天内容 1 ognl概述 2 ognl入门案例 3 什么是值栈 (1)servlet和action区别 (2)值栈存储位置 - 每个action对象里面有一个值栈对象 - 值栈对象里面有action引用 4 如何获取值栈对象 5 值栈内部结构 (1)root:list集合 (2)context:map集合 6 向值栈放数据 (1)s:debug标签 (2)向值栈放字符串 (3)向值栈放对象 (4)向值栈放list集合 - set方法 - push方法 - 定义变量,get方法 7 从值栈获取数据 (1)从值栈获取字符串 (2)从值栈获取对象 (3)从值栈获取list集合 - s:iterator标签使用 8 EL表达式获取值栈数据 (1)增强request里面getAttribute方法 9 ognl表达式#、%使用 OGNL概述 1 之前web阶段,学习过EL表达式,EL表达式在jsp中获取域对象里面的值 2 OGNL是一种表达式,这个表达式功能更加强大, (1)在struts2里面操作值栈数据 (2)一般把ognl在struts2操作:和struts2标签一起使用操作值栈 3 OGNL不是struts2的一部分,单独的项目,经常和struts2一起使用 (1)使用ognl时候首先导入jar包,struts2提供jar包 Struts1 (1) Struts1和Servlet的关系 (1) 创建第一个Struts1项目 (1) 例子1: (3) 总结重点:struts1的工作流程(基于MVC模式的) (7) 一.普通的Servlet的工作流程 (7) 二.Structs1的工作流程(和上面的对比记忆) (8) Struts标签 (9) Bean标签 (9) html标签 (10) logic标签(逻辑标记) (12) i18n(国际化) (13) Struts1 Struts1和Servlet的关系 Jsp+Servlet+Javabean ActionForm和VO的区别: 一样的内容,不一样的作用 ActionForm只接收前台表单传来的数据 VO是conga后台提取的数据向前台传递 创建第一个Struts1项目 新建一个web项目,选择1.4即可 右键----MyEclipse----Add Struts Capacity ---------------Struts控制文件的路径 TLD(标签) 1) 2) Struts2 框架第三天 今天重点内容安排: 第一天:struts2 开发流程、访问Action,Action方法调用,结果集类型 第二天:获取请求参数,请求数据校验机制,拦截器 1、V alueStack 值栈的存储原理和相关操作 2、Ognl 表达式语言语法 3、struts2 页面控制标签 4、struts2 form表单相关标签 重点难点:值栈和Ognl 1.值栈和Ognl表达式 1.1.什么是Ognl Ognl 对象导航图语言Object Graphic Navigation Language,类似EL,比EL ${}语法要强大很多,Struts2框架使用OGNL作为默认的表达式语言必须要引入struts标签库 EL Expression Language 表达式语言,用来获取JSP页面四个域范围数据 pageContext、request、session、application ) Ognl 主要用法: 1、访问OGNL上下文值栈对象获取数据(最重要) 2、操作集合对象(结合struts2 标签库使用)---- 生成checkbox 、生成select 1.2.什么是值栈ValueStack接口! 值栈ValueStack 实际上是一个接口,struts2 Ognl使用都是基于值栈完成的 Struts2 内部提供OgnlValueStack的接口实现类,实现了值栈接口! 前端控制器每一次请求都会创建一个值栈对象源码: 一次请求对应一个值栈对象值栈生命周期= request 生命周期的!! 值栈是struts2 一个数据结构,贯穿整个Action实例生命周期(request生命周期),一次请求对应一个Action实例,一个Action实例对应一个值栈实例 值栈保存了Action 和其它常用web对象的引用,通过值栈,间接操作这些对象!1.3.值栈的存储结构 1:采用标签Struts2框架工作原理及应用体会
struts1学习笔记
Strurts2
Struts2学习笔记
strusts2课堂总结
Struts2+Hibernate开发笔记
struts2 实验报告
JavaEE课堂笔记f
Struts2的介绍及总结
尚学堂马士兵Struts2教学视频之Struts2学习笔记
java 问题汇总(总结,重点)
MyEclipse开发Struts2过程
Struts2知识点总结
struts2面试题(自己总结)
Struts2_day03笔记
Struts1学习笔记总结
struts2_day03笔记