笔记-struts2
2017-01-31 10:17
369 查看
1.struts2:主流的开发技术,很多公司都在用 基于mvc模式,mvc结构是一个优秀的设计思想,可以提高程序结构的灵活性便于日后的维护和扩展
2.struts的发展
3.struts2实现MVC步骤:
4.struts2的action工作原理:
5.在struts2中页面向Action传参
6.struts2的配置文件
7.OGNL
8.struts2中各组件的作用
9.Struts2中Action相关配置
10.ValueStack,ActionContext,ServletActionContext
11.struts2的Interceptor组件
12.struts2的Result组件
特点:提供了action组件,充当struts1的Action和ActionForm的功能 提供了大量的result组件 提供了拦截器 可测性强,便于维护
2.struts的发展
strut1 实现了mvc架构-->最成熟的版本struts1.2--> 出现webwork-->webwork核心xwork基础上包装struts1(两种框架整合)-->struts2 *struts2不是struts1的升级版本,是webwork的升级版本
3.struts2实现MVC步骤:
struts2采用filter充当控制器--->根据struts.xml配置-->将请求分发给 不同的业务控制器action-->action处理业务返回字符串-->filter根据返回的字符串 -->在struts.xml中找到相应的result-->result根据请求转发页面
4.struts2的action工作原理:
1)发送请求-->到达控制器 2)-->根据请求创建valuestack对象,每个请求创建一个action对象 -->action对象存储 在valuestack的root区域,valuestack对象存放在request中,存储的值为struts.valuestack 3)控制器调用action接收请求参数,执行业务 4)控制器根据action返回值创建result视图组件处理 5)请求处理完成后,将valuestack对象和action销毁
5.在struts2中页面向Action传参
struts2中常用的传参方式有两种:基本属性注入和域模型注入 其中,基本属性注入是将表单中的数据,分别传给Action中声明的基本属性,要求 这些属性有set方法,并且名称与表单中框体的name值一致 域模型注入是将表单中的数据,传给Action中的一个实体对象,要求这个对象具有set方法,并且表单中框体的name中的表达式要有"对象.属性"的格式
6.struts2的配置文件
1)struts-default.xml 定义了很多result组件(默认result-type,dispatcher)和拦截器(默认default-stack),还有框架的核心bean 2)struts.xml(开发者创建) 可继承struts-default.xml
<struts> <package namespace="/" extends="struts-defualt" name=""> <action name="login" class="cre.action.login" method=""> <result name="" type="dispatcher"> param name="location">/WEB-INF/ok.jsp</param> **location </result> </action> </package> </struts>
定义开发者编写的Result组件,拦截器组件,Action组件 3)default.properties(框架自带) 定义了系统参数 4)struts.properties(由开发者创建并使用) 用于覆盖default.properties中内置系统参数 a.struts.i18n.encoding=UTF-8:默认编码格式 b.struts.action.extension=action,,:指定了请求的后缀 5)struts-plugin.xml 整合插件包中带的配置文件
7.OGNL
1)Object Graphics Navigation Language 对象图导航语言 ,属于表达式语言的一种,与EL表达式类似,OGNL技术是struts2中的核心知识它封装与ognl.jar中,ognl.jar工具包提供一个引擎,该引擎可以按照提供的ognl表达式访问对象数据和方法 2)OGNL工具构成 a.OGNL引擎,负责解析执行OGNL表达式 b.Root存储区,负责存储一个Object类型的对象,该存储区数据访问时,OGNL表达式格式为"属性" c.Context存储区,负责存储一个Map类型的对象,该存储区数据访问时,ognl表达式格式为"#key" 3)OGNL作用 a.对对象的属性获取和设置 在java代码中使用: ognl.Ognl.getValue("address.street", p); ognl.Ognl.setValue("address.street", p, "齐鲁软件园A座"); 在jsp页面中: <s:property value="name"/> b.调用对象的方法 <s:property value="#session.msg.length()"/> c.调用静态属性和方法 调用静态属性: <s:property value="@java.lang.Math@PI"/> d.对集合进行过滤 <s:iterator value="list.{$#this.age >= 18}"> $最后一个元素 ?所有元素 ^第一个元素 e.支持java中的运算符和操作符 <s:iterator value="list.{$#this.age >= 18}"> f.定义list常量{"tom","sun"} g.定义Map常量#{"key":"value","key2":"value2"}
8.struts2中各组件的作用
struts2有6大核心组件,分别为filter(前端控制器),Action(业务控制器),ValueStack(值对象),Interceptor(拦截器),Result(输出组件),Struts2标签 调用顺序:请求提交给前端控制器filter,它会根据struts.xml中的配置找到对应的业务控制器Action,再调用Action的业务方法,在调用过程中会被拦截器组件所拦截,最终根据Action方法的返回值,filter从struts.xml中可以找到对应的Result,使用这个Result向页面输出内容 最常见的输出实际上是将请求转发给一个JSP,在容器解析JSP生成HTML的过程中,S突突死标签将被解析,此时标签中的OGNL表达式会发送给ValueStack取值,返回的结果被写入最终生成的HTML
9.Struts2中Action相关配置
(1)<package>元素的namespace属性 用于指定package中的action对应的请求路径. 请求路径格式为:http://localhost:8080/工程名+struts.xml中的 namespace属性+<action>元素的name属性 (2)<action>元素的method属性 用于指定action中的业务方法名,默认为execute (3)<param>元素 用于为Action,Result或拦截器组件的属性指定值. (4)通配符*的使用name="opt" <action>的name属性可以使用若干个*号,其他属性可以使用{1},{2}格式指定. (5)动态方法调用 通过请求格式指定业务方法名. 格式: 请求名!方法名.action
10.ValueStack,ActionContext,ServletActionContext
(1)ValueStack 主要用于存储请求相关信息,内部结构如下: root区域:被称为根存储区,是一个栈结构,栈顶元素为当前请求的Action对象 context区域:被称为变量存储区,是一个Map结构,存储了request,session,application等对象 (2)ActionContext用于获取context存储区内容, 可以将request,session,application对象以Map结构返回 ActionContext.getContext().getSession(); ActionContext.getContext().getApplication(); ActionContext.getContext().get("request"); (3)ServletActionContext是ActionContext子类, 可以获取Servlet API类型的对象
11.struts2的Interceptor组件
1)可以用于封装共通的业务处理,之后可以通过配置作用到Action组件上,使用方法灵活,便于维护 例如共通的业务:登录检查,日志记录,性能检测,事务处理 2)拦截器规范 a.拦截器组件必须实现Interceptor接口,实现interceptor方法 b.拦截器可以继承AbstractInterceptor类 c.拦截器组件可以继承MethodFilterInterceptor类 3)拦截器相关配置 a.声明 <interceptor name="拦截器名" class="包名.类名"/> b.引用 <interceptor-ref name="拦截器名或拦截器栈名"/> c.注意:当为Action组件引用了拦截器后,需要显式将defaultStack引入 4)声明拦截器
<interceptors> <interceptor name="拦截器的名字" class"包名.类名""></interceptor> <interceptor-stack name="拦截器栈的名字"></interceptor-stack> <interceptor-ref></interceptor-ref> </interceptors>
5)内置拦截器
//1.cookie解析 <interceptor name="cookie" class="org.apache.struts2.interceptor.CookieInterceptor"/> //2.清除session <interceptor name="clearSession" class="org.apache.struts2.interceptor.ClearSessionInterceptor" /> //3.创建session <interceptor name="createSession" class="org.apache.struts2.interceptor.CreateSessionInterceptor" /> //4.关于调试的 <interceptor name="debugging" class="org.apache.struts2.interceptor.debugging.DebuggingInterceptor" /> //5.关于异常 <interceptor name="exception" class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"/> //6.关于文件上传 <interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/> (1)作用 调用上传文件解析器解析出上传文件,并将其放在临时目录下,在请求处理结束后将其删除. (2)使用 a.编写Action组件,定义xxx,xxxFileName,xxxContentType,添加set方法 b.在Action业务方法中,将xxx临时文件对象复制到指定目录. -----限定上传文件类型和大小 c.在struts.xml的action配置中,定义fileUpload拦截器的引用,并指定限定参数 <interceptor-ref name="fileUpload"> <param name="allowedTypes">image/jpeg,image/gif</param> <param name="maximumSize">102400</param> </interceptor-ref> d.将Action组件继承ActionSupport,并在action配置中添加input视图 e.在input视图中使用<s:fielderror name=""/>标签显示提示信息 -----自定义提示信息<s:actionerror key=""> f.在struts.properties中指定资源文件位置struts.custom.i18n.resources=包名.资源文件名 g.在资源文件中覆盖原有提示信息 struts.messages.error.content.type.not.allowed=自定义消息 struts.messages.error.file.too.large=自定义消息 //7.关于国际化 <interceptor name="i18n" class="com.opensymphony.xwork2.interceptor.I18nInterceptor"/> //8.关于日志记录 <interceptor name="logger" class="com.opensymphony.xwork2.interceptor.LoggingInterceptor"/> //9.把请求信息封装在action中 <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/> //10.把配置文件中的参数给action传入 <interceptor name="staticParams" class="com.opensymphony.xwork2.interceptor.StaticParametersInterceptor"/> //11.关于验证 <interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/> //12.关于工作流 <interceptor name="workflow" class="com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor"/> //13.表单中的checkbox <interceptor name="checkbox" class="org.apache.struts2.interceptor.CheckboxInterceptor" /> //14.关于重复表单提交的拦截器 <interceptor name="token" class="org.apache.struts2.interceptor.TokenInterceptor"/> (1)token拦截器的使用 a.在JSP表单中添加<s:token/>标签. b.在struts.xml的action配置中,添加token拦截器的引用 <interceptor-ref name="token"/> token拦截器负责将表单中的ID与session 中ID对比 c.在struts.xml的action配置中,添加invalid.token视图. 如果拦截器发现重复提交,将自动调用此视图响应. (2)tokenSession拦截器的使用 a,b两步与token的使用相同.不需要c步骤,tokenSession如果发现重复提交,将采用第一次提交的响应界面
6)异常拦截器
使用: struts.xml: <exception></exception> <exception-mapping></exception-mapping> <!-- 处理action组件抛出的异常 --> <global-exception-mappings> <exception-mapping result="fail" exception="java.sql.SQLException"> </exception-mapping> </global-exception-mappings>
7)param拦截器
<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
8)自定义拦截器 a.实现Interceptor b.继承AbstractInterceptor 实现interceptor方法 c.继承MethodFieldInterceptor 实现doIntercept方法(ActionInvocation invocation) d.在xml配置
<interceptors> <interceptor name="mylogger" class=""> <interceptor-stack> <interceptor-ref></interceptor-ref> </interceptor-stack> <action> <interceptor-ref name="mylogger"></interceptor-ref> <param name="includeMethods">add,delete,update,init</param> <interceptor-ref name="defaultstack"></interceptor-ref> </action>
12.struts2的Result组件
dispatcher(默认) 以请求转发方式调用一个JSP,生成响应视图 redirect 以重定向的方式调用一个JSP,生成响应视图 redirectAction 以重定向方式调用一个action chain 以请求转发方式调用一个action stream 以字节流方式响应,将Action中指定的一个InputStream类型属性输出,将Action中的InputStream属性以字节流方式输出 json 以json字符串方式响应,将Action中指定的属性,拼成一个json字符串输出
相关文章推荐
- struts2学习笔记2
- Struts2学习笔记2 ――表单验证
- Struts2学习笔记14:Struts2的文件上传和下载【续】
- 笔记:Struts2 Hello World实例
- Struts2学习笔记二
- Struts2、FreeMarker、Sitemesh整合表现层的学习笔记
- Struts2学习笔记15:Struts2的文件上传和下载【续】二
- Struts2学习笔记19:Struts2与JFreeChart的整合
- FreeMarker struts2 笔记
- Struts2学习笔记4 ――国际化
- 1 Struts2入门与配置学习笔记
- Struts2学习笔记8:Struts2输入检验续二
- Struts2学习笔记12:Struts2的拦截器【续】
- Struts2学习笔记3:MyEclipse使用技巧(1)
- Struts2学习笔记
- Struts2学习笔记-part1: 快速起步
- Struts2学习笔记
- Struts2学习笔记之国际化一
- Struts2 学习笔记一
- Struts2学习笔记五