笔记-struts2

来源:互联网 发布:紫色水离子淘宝店地址 编辑:程序博客网 时间:2024/06/02 16:20

1.struts2:主流的开发技术,很多公司都在用 基于mvc模式,mvc结构是一个优秀的设计思想,可以提高程序结构的灵活性便于日后的维护和扩展

    特点:提供了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.valuestack3)控制器调用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 以重定向方式调用一个actionchain 以请求转发方式调用一个actionstream 以字节流方式响应,将Action中指定的一个InputStream类型属性输出,将Action中的InputStream属性以字节流方式输出json 以json字符串方式响应,将Action中指定的属性,拼成一个json字符串输出
0 0
原创粉丝点击