Struts2笔记(小部分)

Struts2入门

  • Struts2框架的概述
    • Struts2是一种基础MVC模式的轻量级Web框架,它自问世以来,就受到了广大Web开发者的关注,并广泛应用于各种企业系统的开发中。目前掌握Struts2框架几乎成为Web开发者的必备技能之一。
  • Struts2的优势
    • 项目开源,使用扩展方面,天生优势。
    • 提供Exception处理机制
    • Result方法的页面导航,通过Result标签很方便的实现重定向和页面跳转
    • 通过简单、集中的配置来调度业务类,使得配置和修改都非常容易
    • 提供简单、统一的表达式语言来访问所有可供访问的数据
    • 提供标准、强大的验证框架和国际化框架
    • 提供强大的、可以有效减少页面代码的标签
    • 提供良好的Ajax支持
    • 拥有简单的插件,只需方旭相应的JAR包,任何人都可以扩展Struts2框架,比如自定义拦截器、自定义结果类型、自定义标签等,为Struts2定制需要的功能,不需要什么特殊配置,并且可以发布给其他人使用
    • 拥有智能的默认设置,不需要另外进行繁琐的设置。使用默认设置就可以完成大多数项目程序开发所需要的功能。
  • Struts2的文件夹目录结构
    • apps:该文件夹用于存放官方提供的Struts2示例程序(可学习、可参考)
    • docs:该文件夹用于存放官方提供的Struts2文档(文档+API)
    • libs:该文件夹用于存放Struts2的核心类库,以及Struts2的第三方插件类库
    • src:该文件夹用于存放该版本Struts2框架对应的源代码
  • Struts2的基本开发包
    • asm-版本.jar:操作java字节码的类库
    • asm-commons-版本.jar:提供了基于事件的表现形式
    • asn-tree-版本.jar:提供了基于对象的表象形式
    • struts2-core-版本.jar:Struts框架的核心类库
    • xwork-core-版本.jar:WebWork核心库,Struts的构建基础
    • ognl-版本.jar:对象图导航语言(Object Graph Navigation Language),Struts框架通过其读写对象的属性
    • freemarker-版本.jar:Struts2标签模板使用的类库
    • javassist-版本.GA.jar:JavaScript字节码解释器
    • commons-fileupload-版本.jar:Struts2文件上传组件依赖包
    • commons-io-版本.jar:Struts2的输入输出,传文件依赖的jar
    • commons-lang-版本.jar:包含一些数据类型工具,是对java.lang包的增强
    • log4j.api-版本.jar:Struts2的日志管理组件依赖包的api
    • log4j.core-版本.jar:Struts2的日志管理组件依赖包

Struts2的基本配置

Struts.xml配置

  • struts
    • package(此package非java中的package)
      • 属性
        • name:自定义package名称 #此名字是该包被其它包引用的key
        • extends:它指定该包继承其它包(并继承其中的Action及拦截器) #struts-default(这个一般够用了)
        • abstract:定义该包是否为抽象包(默认为false)#设置后可被别人继承
        • namespace:访问路径
          • 默认名称空间:namespace=""
          • 根名称空间:namespace="/"
          • 带名称的名称空间:namespace="/aaa"
      • 标签
        • action
          • 属性
            • name:访问路径(注:这个路径和namespace共同使用)
            • class:包的全路径
            • method:指定Action时调用的方法(默认是execute)
            • converter:指定类型转换器的类
          • 标签
            • result
              • name:页面返回的那个页面
              • 中间的路径:要跳转的那个路径
              • type
                • chain
                  • :用来处理Action链,被跳转的Action中仍能获取上个页面的值(如request信息)
                • dispatcher
                  • 用来转向页面,通常处理jsp,是默认的结果类型
                • freemarker
                  • 用来整合FreeMarker模板结果类型
                • httpheader
                  • 用来处理特殊的HTTP行为结果类型
                • redirect
                  • 重定向到一个URL,被跳转的页面中丢失传递的信息
                • redirectAction
                  • 重定向到一个Action,跳转的页面中丢失传递的信息
                • stream
                  • 向浏览器发送InputStream对象,通常用来处理文件下载,还可用于Ajax数据
                • velocity
                  • 用来整合Velocity模板结果类型
                • xslt
                  • 用来整合XML/XSLT结果类型
                • plainText
                  • 显示原始文件内容(例如文件源代码)
                • postback
                  • 使得当前请求参数以表单形式提交

Struts2的执行流程

  • 1)客户端发送请求
  • 2)前端控制器 #核心过滤器 执行一组拦截器 #一般执行那些有关的拦截器的部分功能
  • 3)进入配置文件中,寻找action标签中的class+method #来看执行哪个类中的方法
  • 4)执行方法后,并返回一个路径(或不返回),再次进去配置文件中action标签下的result标签中的name属性 #name属性同返回的相同,跳转result下的路径(默认为转发)

 Struts配置文件加载顺序

  • 1)default.properties
  • 2)struts-default.xml
  • 3)struts-plugin.xml
  • 4)struts.xml #配置Action以及常量
  • 5)struts.properties #配置常量
  • 6)web.xml #配置核心过滤器及常量

Struts的数据封装

  • 属性驱动
    • 提供属性的set方法的方式
    • 页面提供表达式方法
      • 页面使用OGNL表达式的方法
      • 必须提供对象的get方法
  • 模型驱动(ModelDriven)
    • 继承ModelDriven
    • 重写getModel()方法
  • 封装集合类型的数据
    • list
      • list[0].xxx #拿数据
    • Map
      • map['one'].xxx #拿数据

ActionContext

  • Struts2框架提供了ActionContext类访问Servlet API,ActionContext是Action执行的上下文对象,在ActionContext中保存了Action执行所需要的所有对象,包括parameters,request,session,application等。
  • 常用方法
    • void put(String key,Object value)
      • 将key-value键值对放入ActionContext中,模拟Servlet API中的HTTPServletRequest的setAttribute()方法
    • Object get(String key)
      • 通过参数key来查找当前ActionContext中的值
    • Map<String , Object> getAppliction()
      • 返回一个Application级的Map对象
    • static ActionContext getContext()
      • 获取当前线程的ActionContext对象
    • Map<String , Object> getParameters()
      • 返回一个包含所有HTTPServletRequest参数信息的Map对象
    • Map<String , Object> getSession()
      • 返回一个Map类型的HttpSession对象
    • void setApplication(Map<String , Object>,application)
      • 设置Application上下文
    • void setSession(Map<String , Object>,application)
      • 设置一个Map类型的Session值

值栈

  • 概述
    • struts2本身提供一存储机制,类似于域对象,可以存值和取值(值栈)
    • servlet和action的区别
      • Servlet:默认在第一次访问时创建,每次只创建一次(单实例对象)
      • Action:访问时候创建,每次访问action的时候,都会创建action对象,可以创建多次(多实例对象)
    • 值栈存储位置
      • 1)每次访问action时,都会创建action对象
      • 2)每个action对象里面都会有一个值栈对象(只有一个)
  • 值栈对象的获取
    • 使用ActionContext对象中的方法得到值栈对象
      • 1)调用ActionContext类的对象
        • ActionContext context = ActionContext.getContext();
      • 2)调用方法得到值栈对象
        • ValueStack stack = context.getValueStack();
  • 值栈内部结构
    • root
      • 结构是list集合,一般操作的是root里面的数据
    • context
      • 结构是map集合,一般操作的是context里面的数据
  • 向值栈中放数据
    • 使用值栈对象的set方法
      • stack.set()
    • 调用值栈对象里面的push方法
      • stack.push();
    • 在action定义变量,生成变量的get方法
      • 1)定义对象变量
      • 2)生成变量的get方法
      • 3)在执行的方法里面向对象中设置值
  • 从值栈中获取数据
    • 使用struts2的标签和OGNL表达式获取值栈数据
      • <s:property value="OGNL表达式">

OGNL

  • 概述
    • ONGL是一种表达式,这个表达式功能更加强大
      • 1)在Struts2里面操作值栈数据
      • 2)一般把OGNL在Struts2操作:和Struts标签一起使用操作值栈
    • OGNL不是Struts2的一部分,单独的项目,经常和Struts一起使用
      • 使用OGNL时候首先导入jar包,Struts2提供jar包
  • OGNL的使用
    • 支持对象方法调用
    • 使用Struts2标签
      • 引入标签库
        • <%@ taglib url="/struts-tags" prefix="s"%>
  • OGNL的#和%使用
    • # 获取context里面数据

拦截器

  • 注:自定义拦截器,要把原本的拦截器加进去
    • <interceptor-ref name="defaultStack">
  • 在struts配置文件中配置
    • interceptor
      • 属性
        • name:指定拦截器的名称
        • class:用于指定拦截器的所有实现类
      • 标签
        • param
          • name:指定参数的名称
          • 中间的参数:表示参数的值
  • 拦截器栈
    • interceptors
      • 标签
        • interceptor-stack
          • 属性
            • name:栈的名称
          • 标签
            • interceptor-ref
              • name:拦截器的名称

猜你喜欢

转载自blog.csdn.net/weixin_41640994/article/details/81915634