structs2知识点

合集下载

Struts2小知识点

Struts2小知识点

Struts2简要总结1、S truts2框架简介Struts2是Struts1的下一代产品,是建立在Struts1和WebWork技术基础上的合并的全新框架;在体系结构方面,Struts1和Struts2差别巨大,Struts2以WebWork 为核心,采用拦截器机制处理用户请求,使业务逻辑控制器能够与Servlet API脱离开,所以Struts2可以理解为WebWork的更新产品,也就是说Webwork和Struts2只有很小的变化,而Struts2和Struts1的变化很大。

2、M VC简介MVC是模型(Model)-视图(View)-控制器(Controller)三层架构的简称,3、S truts2流程1)Struts2框架的大致处理流程:①浏览器发出请求,例如请求/login.action等。

②核心控制器FilterDispatcher根据请求决定调用合适的Action。

③ Struts2的拦截器链自动对请求应用通用功能,例如workflow、validation或文件上传等功能。

④回调Action的execute方法,该execute方法先获取用户请求参数,然后执行某种数据库操作,既可以将数据保存到数据库,也可以数据库中检索信息。

实际上,因为Action只是一个控制器,它会调用业务逻辑组件来处理用户请求。

⑤ Action的execute方法处理结果信息将被输出到浏览器中,可以是HTML页面,图像,也可以是PDF文档或者其它文档。

此时支持的视图技术非常多,既支持JSP,也支持Velocity,FreeMarker等模板技术。

2)流程简介:橘黄色的部分,如:ActionContextCleanUp和Other Filters(SiteMesh,etc)和FilterDispatcher,属于过滤器层,由这三个过滤器组成过滤器链;蓝色的部分是Struts2框架的核心部分,比如Action代理,相应的配置和ActionMapper等等;绿色的是相应的拦截器,在Action执行前和执行后都要调用;浅黄色的部分是开发人员或者用户在使用框架的时候需要实现的部分,比如配置文件,Action,还有页面等当一个初始的请求到达Servlet容器,这个请求要先经过相应的一系列的标准的过滤器链的处理,最重要的是Filter Dispatcher过滤器,前面的两个过滤器在集成相应的插件的时候会用到(对页面的布局、描述进行统一的控制的时候会用到这些插件),如果请求并不使用相应的插件,那么请求会经过Filter Dispatcher过滤器,Filter Dispatcher作为核心过滤器会接受请求,然后询问ActionMapper来确定请求的Action是否应该被调用,如果请求的Action需要被调用的话,Filter Dispatche核心过滤器就会把核心控制权委派给相应的Action代理(ActionProxy),ActionProxy会询问Action框架的配置管理器(Configuration Manager,由Struts2框架提供的),而Configuration Manager的工作是由Struts.xml这样的一个配置文件来管理的(由开发人员提供,即请求该由那些资源来处理,处理后的结果是怎样的都是由开发人员在Struts.xml配置文件中配置的),那么通过配置文件和配置管理器后,Action代理(ActionProxy)会创建一个实现了命令模式的Action Invocation,实现了Action Invocation后,Action Invocation会在调用真正的业务控制器Action之前一次调用相应的Interceptor拦截器,然后执行Action,把结果会生成一个相应的响应页面(可以是JSP、FreeMarker等等),在执行完响应以后还会一次经过相应的拦截器,执行顺序跟执行Action前正好是相反的,然后响应会通过相应的过滤器链回到客户端,用户接收到响应呈现出最终的结果,也就是说通过过滤器链进来然后生成响应后又通过过滤器链返回到客户端,这就是Struts2框架的处理流程。

structs2

structs2
10
IoC方式
要使用IoC方式,我们首先要告诉IoC容器 (Container)想取得某个对象的意愿,通 过实现相应的接口做到这点
11
Acபைடு நூலகம்ionContext
一次Action调用都会创建一个ActionContext 调用:ActionContext context = ActionContext.getContext() 在structs2中,它通过包装提供了对Servlet的访问:
22
“%”符号
“%”符号的用途是在标志的属性为字符串 类型时,计算OGNL表达式的值。例如在 Ognl.jsp中加入以下代码 "%{#foobar['foo1']}"
23
“$”有两个主要的用途
用于在国际化资源文件中,引用OGNL表达 式 在Struts 2配置文件中,引用OGNL表达式
国际化支持
1 resource bundle per action
pervasive UI support for retrieving messages
8
Action
如果我要取得Servlet API中的一些对象, 如request、response或session等,应该 怎么做?这里的execute不像Struts 1.x的 那样在参数中引入。开发Web应用程序当然 免不了跟这些对象打交道。在Strutx 2.0你 可以有两种方式获得这些对象:非IoC(控 制反转Inversion of Control)方式和IoC 方式
12
二、structs2原理
XWork2的层次:
ActionProxy ActionInvocation Action

struts2学习笔记

struts2学习笔记

1.包头的设置name是struts的包,与Java的包名效果类似,但不是按项目中SRC中包名设置的。

namescape是该包的命名空间。

将作为访问该报Action的路径的一部分。

默认命名空间为namescape=””;假设form 表单提交给helloworld的action ,其action=”/test/helloworld”exctends是表示该包继承的其他包struts_default是任何包都必须继承的包。

否则无法使用struts的核心功能,比如参数上传到action,文件上传,数据校验等。

abstract=”true”定义为抽象包,不得包含Action。

2.action的查找顺序(1)寻找namespace为path1/path2/path3/的包,有这个包:寻找test的Action有这个action:执行没有这个action:寻找namespace为””的命名空间(默认命名空间)是否有这action,没有的话提示找不到action没有这个包:寻找namespace为path1/path2/的包重复(1)步骤。

3.action的默认属性4.Action中各种result的转发类型dispatcher(默认类型)redirect(重定向)redirectAction (重定向到新的Action)plainText (显示原始文件内容)result转发还可包含参数,该参数取自Action中的属性。

例:<action name=”login” class=”xxxx.xxx.xxx.sdsds”><result name=”sucess”> /aaa.jsp?username=${ssss}</result></action>其中ssss是login这个Action中所必须具有的属性redirect书写格式1.<result name=”sucess” type=”redirectAction”>login</result>该写法只能访问位于同一包中的Action;2. <result name=”sucess” type=”redirectAction”><parma name=”actionname”>login</parama><parma name=”namespace”>/xxxxx</parama></result>该写法可访问位于其他包的ActionplainText书写格式1.<result type=”plainText”>/login.jsp</result>2. <result type=” plainText”><parma name=”location”>/login.jsp</parama><parma name=”charSet”>UTF-8</parama></result>全局转发只能在包内定义全局转发。

Struts2知识点整理

Struts2知识点整理


Struts2配置
struts.properties Struts2.x另一个核心配置文件,它所配置的有效属性有 struts.configuration
• 指定加载Struts2的配置文件的配置管理器,默认是: 指定web应用的默认Locale 指定web应用的默认编码集 指定strus2所需的国际化资源文件,多份时用","分隔。

验证程序配置
根元素<validators> 根元素下可以有任意多个filed和validator 每个filed可以使用多个验证程序 嵌入多个field-validator元素 field-validator元素 必须有一个type属性,指定一个验证程序 可以有一个short-circuit属性

通配符
例子1 <action name="UserAction_*" method="{1}">
• 例如:UserAction_add
例子2 <action name="*_*" class="{1}" method="{2}">
• <result>{1}_{2}_success.jsp</resutl>
• 字段级别
– fieldName=converterClass
xwork-conversion.properties
• 类级别
– 例如:app17.Color=ColorConverter

扩展StrutsTypeConverter类
绝大多数类都需要从String -->非String类型 ,以及从非String-->String

Struts2知识点总结

Struts2知识点总结

1.简介Struts 2是Struts 的下一代产品,是在 struts 1和WebWork 的技术基础上进行了合并的全新的Struts 2框架。

其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。

Struts 2以WebWork 为核心,采用拦截器的机制来处理用户的请求,2.Struts2处理流程3.Struts2基础<include >可以把struts 配置分为相应的struts.xml 文件<package >中的属性namespace 可以把action 分包,用来解决不同项目的同名action <action>中的method 属性决定action 调用action 业务类的那个方法,根据方法的返回值跳到名字队对应的result 结果集中除了Metnod 调用指定的方法为还有一种动态调用1.在请求的页面就指定调用的action 名称及方法,语法:actionName!methodName.action,action 可以省略,2.在<action>使用通配符, <action name=”house_*”>....<result >其名字可以自行定义,根据业务类返回的值,对应相应的result 官方定义的有success,login,error,input 等其中的type 属性可以决定转向类型,默认的是dispatcher(转发)其他前端控制器 StrutsPreparedAndExec uteFilter 拦截用户请求 用户请求 Action 业务处理,处理请求,返回处理结果 根据请求的url 找到action 返回处理结果 Jsp 页面 渲染结果结果数据传递给jsp 处理后的html 响应用户的是redirect,请求重定向的指定的URL,redirectAction重定向到指定的Action,chain:将请求转发到指定的Action,json返回JSON对象如果result的内容不是一个具体的jsp页面而是${}形式的这就是动态结果的配置,就是结果页面在配置是不能确定,需要在运行时才能确定,比如管理员和普通用户登录,详细的动态结果配置详见资料Action类实现的方法有三种1.继承ActionSupport (常用)2.实现Action接口3.自己编写方法Action接收参数1属性方式接收参数,2Javabean方式接收参数(常用)3.moderlDriven方式接收参数Struts2访问servletAPI的方法在jsp课程中,服务器保存数据的作用域通常有request,session,application,他们对应的servletAPI 分别是HttpServletRequest,HttpSession,servletContext,同样在struts2控制器(action)中也需要访问这些作用域,有三种方法1.使用ActionContext类提供的方法2.以依然注入(IoC)方式访问,实现响应的接口即可3.使用以耦合方式使用ServletActionContext类访问OGNL与struts标签引入的标签指令<%@taglib uri="/struts-tags" prefix="s"%>理解值栈(存储action属性的地方)和stackcontext(存储request,session的地方)概念,并且使用<s:debug>查看值栈访问的值OGNL访问集合知识点,不常用字符串转换OGNL表达式用户%{}相反的加’’单引号Struts2标签可分为通用标签,控制标签,Ajax标签通用标签又分为数据标签和控制标签数据标签:<s:property><s:debug><s:date><s:set><s:url>和<s:a><s:param><s:include>控制标签<s:if>,<s:elseif><s:else><s:iterator>UI标签理解模板与主题,模板用于生成HTML代码,共同风格和观感的模板组织到一起就成了一个主题,内建的主题有simple,xhtml,css_xhtml(默认),css_xhtml,ajax主题的更改用标签属性theme=”simple”标签:<s:form><s:textfield><s:textarea><s:submit><s:select><s:doubleselect>下拉列框和联动列框属性及实现参观相关代码Ajax标签Datetimepicker是一个日历控件导入相应的包引入<%@taglib uri="/struts-dojo-tags" prefix="sx"%>指令在<head>中添加<sx:head parseContent="true"/>添加标签<sx:datetimepicker name="timer" label="发布时间"/>4.数据校验数据校验分为客户端验证和服务器端验证,sruts2对服务器端的验证有两种,1.使用actionsupport编码实现验证2.使用验证框架实现验证,使用actionsupport编码进行验证的方法有三种,1.直接在action类业务方法中验证,2.重写validate()方法实现验证,3.使用validateXXX()方法实现验证验证的关键点在于当用户名或密码没填写时添加addFieldError()方法,此方法处理与字段相关的错误,比如输入的年龄不合理,响应的jsp输出错误的标签是<s:fielderror fieldname=”/>, addActionError()方法是用来添加与action所处理的业务相关的错误信息,在JSP输出错误的标签是<s:actionerror>如果两种情况有任何一种错误(hasErrors())就return到INPUT结果集中(事先已经配置好) 使用验证框架使用特定的配置框架即可,命名的前半部分是action 的名字,可对全局和局部进行验证!具体查看相关资料5.拦截器拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。

struts2课程知识点总结

struts2课程知识点总结

<s:param
<s:property <s:include <s:push <s:set
<s:debug></s:debug>
<s:action
6、Struts2 类型转换
1、自动类型转换 2、list 列表自动类型转换 3、类型转换错误提示 定义 AddMaterialAction.properties 文件
5、tags(标签库)
引入:<%@ taglib uri="/struts-tags" prefix="s"%> 1、 <form> 标签
<s:form> <s:textfield <s:password <s:textarea <s:select <s:checkboxlist
2、控制标签
………………………
validate="true">
8、Struts2 国际化支持
步骤: 1、JSP 中配置
<s:textfield name="username" key="username"/>
2、struts.properties 中配置
struts.custom.i18n.resources=messageResource
f) session 等 jsp 内置对象的应用
两种方法 1、普通 2 、map
g) action 通配符的配置
* 与 {} 或 *_*
<action name="Student*" class="example.StudentAction"method="{1}">

Struts2知识小结

Struts2知识小结

Struts2知识点小结Struts Tag Library对于一个MVC框架而言,重点是实现二个部分:控制器部分和视图部分。

Struts2框架同样如此:控制器部分由Action(以及隐藏的系列拦截器)来提供支持,而视图部分则通过大量标签来提供支持。

Struts2标签库使用OGNL表达式作为基础,且默认支持OGNL, JSTL, Groovy和Velcit y表达式。

且把所有标签都定义在URI为/struts-tags 命名空间下,但我们依然可以依据功能将其分为三类:1. UI标签;a. 表单标签;b. 非表单标签;树、Tab页等;2. 非UI标签;a. 流程控制:条件、循环;b. 数据访问:输出ValueStack中的值;3. AJAX标签;Object Graph Navigation Language, 缩写为OGNL,是类似于EL的脚本语言,一. 控制标签Struts2中的非UI标签包括控制标签和数据标签,其中控制标签可以完成输出流程控制,例如条件、循环等操作,也可完成对集合的合并、排序等操作,它有如下九个:1) if: 选择输出;2) elseIf/elseif: 与if标签结合使用;3) else: 与if标签结合使用4) append: 将多个集合拼接成一个新的集合;5) generator: 将一个字符串解析成一个集合;6) iterator: 将集合迭代输出;7) merge: 将多个集合拼接成一个新集合,与append拼接方式不同;8) sort: 对集合进行排序;9) subset: 截取集合部分元素,形成新的子集;1. iterator标签对集合进行迭代,包括List,Set和数组,Map.. value: 可选,被迭代的集合,通常使用OGNL表达式指定,如无,则使用ValueStac k栈顶集合;. id: 可选,指向集合中元素;. status: 可选,指向迭代时IteratorStatus实例,通过该实例可判断当前迭代元素的属性;每次迭代都有一个IteratorStatus实例,该实例包含以下方法:a. int getCount(): 返回当前迭代了几个元素b. int getIndex(): 返回当前迭代元素的索引c. boolean isEven(): 当前索引是否为偶数d. boolean isFirst(): 当前迭代元素是否是第一个元素e. boolean isLast(): 当前迭代元素是否是最后一个元素f. boolean isOdd(): 当前索引是否为奇数2. if标签根据一个Boolean表达式的值,来决定是否计算,输出标签体等内容。

struts2知识点汪

struts2知识点汪

一、Framework框架概念
二、Struts2的概念
三、Webwork
四、Struts2的工作原理
五、如何搭建struts2框架
六、什么是Action
七、编写action的三种方式
八、Action的5个常量
九、Action的一个执行方法
十、属性驱动
十一、模型驱动之OGNL
十二、模型驱动之ModelDriven
十三、输入校验
十四、Xml配置方式校验
十五、valuestack
十六、Ognl
十七、Action 中的动态方法使用及调用十八、通配符的使用
十九、Struts2的作用域
二十、Result字符串常量
二十一、ResultType常量
二十二、数据标签
二十三、控制标签
二十四、UI标签
二十五、国际化
二十六、Struts2回显
二十七、Struts2上传
二十八、Struts2下载
二十九、enctype用法
三十、UUID
三十一、拦截器
三十二、自定义拦截器
三十三、Token拦截器
三十四、Token拦截器的工作原理。

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

Struts2原理上图来源于Struts2官方站点,是Struts 2 的整体结构。

Struts2框架由3个部分组成:核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑组件。

在这3个部分里,Struts 2框架提供了核心控制器FilterDispatcher,而用户需要实现业务控制器和业务逻辑组件。

(1)核心控制器:FilterDispatcherFilterDispatcher是Struts2框架的核心控制器,该控制器作为一个Filter运行在Web应用中,它负责拦截所有的用户请求,当用户请求到达时,该Filter 会过滤用户请求。

如果用户请求以action结尾,该请求将被转入Struts2框架处理。

Struts2框架获得了*.action请求后,将根据*.action请求的前面部分决定调用哪个业务逻辑组件,例如,对于login.action请求,Struts2调用名为login的Action来处理该请求。

Struts2应用中的Action都被定义在struts.xml文件中,在该文件中定义Action 时,定义了该Action的name属性和class属性,其中name属性决定了该Action 处理哪个用户请求,而class属性决定了该Action的实现类。

Struts2用于处理用户请求的Action实例,并不是用户实现的业务控制器,而是Action代理——因为用户实现的业务控制器并没有与Servlet API耦合,显然无法处理用户请求。

而Struts2框架提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中,并回调Action 的execute方法来处理用户请求。

(2)一个请求在Struts2框架中的处理大概分为以下几个步骤1 .客户端初始化一个指向Servlet容器(例如Tomcat)的请求,即HttpServletRequest请求。

2 .这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)3. 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action4 .如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy5 .ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类6 .ActionProxy创建一个ActionInvocation的实例。

7 .ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

8 .一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。

返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。

在表示的过程中可以使用Struts2 框架中继承的标签。

在这个过程中需要涉及到ActionMapper在上述过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。

struts2有哪些优点?1)在软件设计上Struts2的应用可以不依赖于Servlet API和struts API。

Struts2的这种设计属于无侵入式设计;2)拦截器,实现如参数拦截注入等功能;3)类型转换器,可以把特殊的请求参数转换成需要的类型;4)多种表现层技术,如:JSP、freeMarker、Velocity等;5)Struts2的输入校验可以对指定某个方法进行校验;6)提供了全局范围、包范围和Action范围的国际化资源文件管理实现struts2是如何启动的?struts2框架是通过Filter启动的,即StrutsPrepareAndExecuteFilter,此过滤器为struts2的核心过滤器;StrutsPrepareAndExecuteFilter的init()方法中将会读取类路径下默认的配置文件struts.xml完成初始化操作。

struts2读取到struts.xml的内容后,是将内容封装进javabean对象然后存放在内存中,以后用户的每次请求处理将使用内存中的数据,而不是每次请求都读取struts.xml文件struts2框架的核心控制器是什么?它有什么作用?1)Struts2框架的核心控制器是StrutsPrepareAndExecuteFilter。

2)作用:负责拦截由<url-pattern>/*</url-pattern>指定的所有用户请求,当用户请求到达时,该Filter会过滤用户的请求。

默认情况下,如果用户请求的路径不带后缀或者后缀以.action结尾,这时请求将被转入struts2框架处理,否则struts2框架将略过该请求的处理。

可以通过常量"struts.action.extension"修改action的后缀,如:<struts><constant name="struts.action.extension" value="do"/></struts>如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。

如:<constant name="struts.action.extension" value="do,go"/>struts2配置文件的加载顺序?struts.xml ——> struts.properties常量可以在struts.xml或struts.properties中配置,如果在多个文件中配置了同一个常量,则后一个文件中配置的常量值会覆盖前面文件中配置的常量值.struts.xml文件的作用:通知Struts2框架加载对应的Action资源struts2常量的修改方式?常量可以在struts.xml或struts.properties中配置,两种配置方式如下:1)在struts.xml文件中配置常量<struts><constant name="struts.action.extension" value="do"/></struts>2)在struts.properties中配置常量(struts.properties文件放置在src下):struts.action.extension=dostruts2如何访问HttpServletRequest, HttpSession 和 ServletContext三个域对象?方案一:HttpServletRequest request = ServletActionContext.getRequest();HttpServletResponse response = ServletActionContext.getResponse();HttpSession session = request.getSession();ServletContext servletContext = ServletActionContext.getServletContext();方案二:类 implements ServletRequestAware,ServletResponseAware,SessionAware,ServletContextAware注意:框架自动传入对应的域对象struts2是如何管理action的?这种管理方式有什么好处?struts2框架中使用包来管理Action,包的作用和java中的类包是非常类似的。

主要用于管理一组业务功能相关的action。

在实际应用中,我们应该把一组业务功能相关的Action放在同一个包下。

struts2中的默认包struts-default有什么作用?1)struts-default包是由struts内置的,它定义了struts2内部的众多拦截器和Result类型,而Struts2很多核心的功能都是通过这些内置的拦截器实现,如:从请求中把请求参数封装到action、文件上传和数据验证等等都是通过拦截器实现的。

当包继承了struts-default包才能使用struts2为我们提供的这些功能。

2)struts-default包是在struts-default.xml中定义,struts-default.xml也是Struts2默认配置文件。

Struts2每次都会自动加载 struts-default.xml文件。

3)通常每个包都应该继承struts-default包struts2的工作流程?用户请求——> StrutsPrepareAndExecuteFilter——> Interceptor——> Action——> Result——> Jsp/html——> 响应struts2的action的URL访问路径由什么构成?由两部分组成:包的命名空间+action的名称 [ + action的后缀 ],即:space + 在struts.xml中可以不为action指定class属性吗?struts2中有哪些默认的属性?可以,如果没有为action指定class,默认是com.opensymphony.xwork2.ActionSupport默认属性:如果没有为action指定class ActionSupport如果没有为action指定method execute() 注意:ActionSupport的execute方法里面就一句话return "success";如果没有指定result的name success如果没有指定result的type dispatcheraction中默认都有一个拦截器的引用,即:<interceptor-ref name="defaultStack">;注意:1)一旦我们为该包中的某个action显式指定了某个拦截器,则默认拦截器不会起作用,所以此时要显式的引进默认的拦截器;2)每个包只能指定一个默认拦截器,每个默认拦截器只针对当前包下有效。

相关文档
最新文档