strust2是 struts1和webwork的结合  (本质相当于servlet)

核心:拦截器 interceptor

    action

   ognl和valuestack

使用struts的准备工作:

  1.导入相对应的jar包 (struts2中的lib下的jar包)

  2.在web.xml内进行配置filter(只有配置了filter才可以使用struts2框架)

      进行配置   StrutsPrepareAndExecuteFilter

  3.配置我们的struts.xml文件  (放于根目录下)  (可以在struts的zip包中 抽出出来struts.xml文件 然后自己进行修改)

  4.创建相应的action进行操作

流程:当我们发送请求的时候,会被我们在web.xml中配置的拦截器进行拦截 会根据请求的路径在struts.xml中进行判断,在根据所对应的method执行性对应的方法.

struts.xml配置信息

  <package name=" " namespace="" extends="struts-default">

    <action name=" "  class=" "  method=" ">

       <result name=" ".>返回值   //当我们在action中返回一个字符串是 会根据返回的值进行匹配 进行页面跳转

配置剖析:

  package:

    name : 包名, 必须唯一

         namespace: 主要去action中的name属性进行联合,来确定一个action的访问路径

       extend:指定继承于哪个包,一般都是   struts-default

         abstruct:代表当前包是一个抽象包

action:

    name: 与package中的namespace进行联合

    class:指示当前的action类

    method:指示当前类中的指定执行方法的执行方案

  result:

    name:与action中的返回值进行匹配 来确定要跳转的路径

    type:指定我们当前的要跳转的跳转方式

      result的name属性默认值是success,

      默认的跳转方式是请求转发 dispatcher

定义常量

    在struts.xml文件中进行配置

      <constant  name=" "   value=" ">

    注:后加载的配置常量会将先加载的配置常量进行覆盖

ACTION的创建

    1.pojo

    2.实现action

    3.继承actionsupport   //具有丰富的功能,不过耦合性比较高

STRUTS2的封装数据  

1.属性驱动

a.直接在action类中提供与请求参数匹配属性,提供get/set方法

b.在action类中创建一个javaBean,对其提供get/set ,在请求时页面上要进行修改,要在当前action中使用ognl表达式

2.模型驱动    //缺点:只能对一个模型进行实例化

    步骤1.action实现modelDriven<类名> 接口

    步骤2.实例化模型(new )

步骤3.重写getModel方法,并将我们实例的对象进行返回

struts2中获取servletAPI

  1.servletActionContext进行获取
   2.采用注入方式  

ServletRequestAware, 实现这个接口可以获取HttpServletRequest

ServletResponseAware ,实现这个接口可以获取HttpServletResponse

ServletContextAware 实现这个接口可以获取ServletContext

OGNL表达式

OGNL作用:

支持对象的操作,调用对象的方法

支持静态成员访问

支持赋值操作与表达串联

访问OGNL上下文,访问ActionContext

操作集合对象

三要素:

  表达式

  ognlContext上下文    new OgnlContext()

  root根

获取数据

  在root根中获取数据时 ,ognl表达式前不需要加  #, 如果不是在root根中进行获取数据,则需要添加 #

使用ognl

  在struts2中可以使用ognl+valueStack可以实现在页面上获取数据

在页面中进行配置

     <%@  taglib prefix="s"  uri=" /struts-tags" %>

       <s:property value=”表达式”>来使用

valueStack

  valuestack的使用的主要目的是为了将action中产生的数据传递到页面上

struts2中的action是多例的,每一次请求都会创建一个action,一个valuestack对应一个action,valuesta贯穿整个action的生命周期

  struts2框架将valuestack保存在 request中

  主要由两部分组成:

    CompoundRoot: 是一个list 主要存储的是action的相关数据

    Map<String,Object> context: 是一个map集合 主要引用web开发中的相关信息

获取valuestack中的数据

     根据ognl表达式进行获取数据  如果前面添加# 在context中进行查找,如果没有添加# ,代表在CompoundRoot中进行获取数据,也就是所说的root中

    1.直接通过request对象进行获取  //因为valuestack存于request中

        servletActionContext.getRequest().getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY)

    2.使用actionContext进行获取

        ActionContext.getContext().getValueStack();

ActionContext

       是action的上下文,struts2框架使用actionContext进行保存action在执行过程中所需要的一些对象    

      Struts2会根据每一次的http请求来创建对应的ActionContext,它是与当前线程绑定的。

      每一次请求,就是一个线程,对应着一个request,每一次请求,会创建一个Action,每一个action对应一个ActionContext.每一次请求也对应着一个valueStack.

      request---ActionContext----Action-----ValueStaci它们都对应着一次请求(一个线程).

      valueStack与ActionContext本质上是可以获取

 存储数据  

      //主要向root中进行存储

    1.手动存储

       valueStack.set("key","value")

         valueStack.push()

    2.自动存储

    3.声明成员变量 提供get方法 为了使用属性封装也提供set方法

获取数据

      在标签中可以通过  value="key" 或 value="[index].top"

      底层是栈. 先进后出

    在action中的属性的get方法中 也可以将数据返回

    使用模型驱动

   在访问路径添加属性的赋值    

使用el表达式也可以获取数据   struts2 对 request 里面的 getattribute方法进行了增强

        //个人理解: 如果对数据提供了get/set方法  那么就相当于属性存储,要使用ognl进行获取时,应该使用 对象名.属性名 进行获取

传递数据      前提:继承了actionsupport

    struts.xml文件中,用来传递数据 (在重定向中)    <s:actionerror/> : 错误显示标签

在struts2中处理简单的信息 (字符串)
this.addActionError
this.addFieldError
this.addActionMessage

Interceptor拦截器

    主要的作用是为了拦截 action 的操作,在action的执行前后进行一些我们想要做的操作

自定义拦截器

    1.在配置文件中 声明 interceptor

    2.创建一个类实现 interceptor接口

      3.在action中使用interceptor ,action必须继承actionsupport

    4.在action的配置中,引入自定义 interceptor

interceptor指定拦截action 

    Interceptor的放行:  return invocation.invoke(); 

    在我们的配置文件中的interceptor里面

      <param name="includeMethods">方法名

      <param name="encludeMethods">方法名

文件上传

  上传前提

    浏览器

      表单提交方式 : method=post

      表单中的组件: <input type="file">

      表单中必须设置: enctype=" multipart/form-data"

     服务器

      导入 Commons-fileupload.jar包

  上传操作

    在上传的action中进行设置

      private File upload;  //上传的文件

      private String  uploadContextType;//文件上传的mimetype类型

      private String  uploadFileName; //上传文件的名称

    操作:

      得到该文件的绝对路径

        String path=ServletActionContext.getServletContext().getRealPath("/upload");

      创建服务端文件

        File dest=new File(path,uploadFileName)

      完成文件上传

        FileUtils.copyFile(upload,dest)

     可能会出现的问题:

        上传文件过大

          在struts.xml配置文件中进行配置

            <constant  name=" struts.multipart.maxSize" value="自定义的你要上传的文件的最大值">

      

    

  

        

Struts2的知识点小总结的更多相关文章

  1. 【转】HTML5的小知识点小集合

    html5的小知识点小集合 html5知识   1.  Doctype作用?标准模式与兼容模式各有什么区别? (1).<!DOCTYPE>声明位于位于HTML文档中的第一行,处于<h ...

  2. html5的小知识点小集合

      html5的小知识点小集合 html5知识   1.  Doctype作用?标准模式与兼容模式各有什么区别? (1).<!DOCTYPE>声明位于位于HTML文档中的第一行,处于< ...

  3. JavaWeb_(Struts2框架)Ognl小案例查询帖子

    此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...

  4. 《JavaScript 正则表达式迷你书》知识点小抄本

    介绍 这周开始学习老姚大佬的<JavaScript 正则表达式迷你书> , 然后习惯性的看完一遍后,整理一下知识点,便于以后自己重新复习. 我个人觉得:自己整理下来的资料,对于知识重现,效 ...

  5. 《JavaScript 模式》知识点小抄本(下)

    介绍 最近开始给自己每周订个学习任务,学习结果反馈为一篇文章的输出,做好学习记录. 这一周(02.25-03.03)我定的目标是<JavaScript 模式>的第七章学习一遍,学习结果的反 ...

  6. 《JavaScript 模式》知识点小抄本(上)

    介绍 最近开始给自己每周订个学习任务,学习结果反馈为一篇文章的输出,做好学习记录. 这一周(02.25-03.03)我定的目标是<JavaScript 模式>的第七章学习一遍,学习结果的反 ...

  7. salesforce零基础学习(一百一十二)项目中的零碎知识点小总结(四)

    本篇参考: https://trailblazer.salesforce.com/issues_view?id=a1p4V0000003znDQAQ https://salesforce.stacke ...

  8. salesforce零基础学习(七十二)项目中的零碎知识点小总结(一)

    项目终于告一段落,虽然比较苦逼,不过也学到了好多知识,总结一下,以后当作参考. 一.visualforce标签中使用html相关的属性使用 曾经看文档没有看得仔细,导致开发的时候走了一些弯路.还好得到 ...

  9. Struts2重要知识点总结

    一.interceptor拦截器的使用 第一种情况(指定action使用该拦截器):struts.xml文件的配置: <interceptors> <interceptor name ...

随机推荐

  1. 那些年,让我们一起着迷的Spring

    构建企业级应用框架(SpringMVC+Spring+Hibernate/ibatis[Mybatis]) 框架特点:半成品,封装了特定的处理流程和控制逻辑,成熟的,不断升级的软件.重用度高,开发效率 ...

  2. LINQ之LINQ to Objects(上)

    LINQ概述 LINQ,语言集成查询(Language Integrated Query),它允许使用C#或VB代码以查询数据库相同的方式来操作不同的数据源. 1.LINQ体系结构 从上图可以看出,L ...

  3. 开涛spring3(8.1) - 对ORM的支持 之 8.1 概述

    8.1  概述 8.1.1  ORM框架 ORM全称对象关系映射(Object/Relation Mapping),指将Java对象状态自动映射到关系数据库中的数据上,从而提供透明化的持久化支持,即把 ...

  4. 《一起》Alpha版软件使用说明

    1.引言 1.1编写目的 本手册是软件工程概论团队项目<一起>的Alpha版使用说明,面向的对象群体为全校师生. 1.2项目背景 本项目由<软件工程概论>课程需求创建,软件由S ...

  5. 解决shiro和quartz2 版本冲突问题

    修改build.gradle   compile ("org.quartz-scheduler:quartz:2.2.3") compile ("org.apache.s ...

  6. 编写原生Node.js模块

    导语:当Javascript的性能需要优化,或者需要增强Javascript能力的时候,就需要依赖native模块来实现了. 应用场景 日常工作中,我们经常需要将原生的Node.js模块做为依赖并在项 ...

  7. 纯css实现select下拉框并排显示

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. java基础(八章)

    一.        什么是数组及其作用? 定义:具有相同数据类型的一个集合 作用:存储连续的具有相同类型的数据 二.        java中如何声明和定义数组 l  声明和定义的语法: 数据类型[ ...

  9. zookeeper 应用场景概述

    Zookeeper主要可以干哪些事情:配置管理,名字服务,提供分布式同步以及集群管理. 一 .配置管理 在我们的应用中除了代码外,还有一些就是各种配置.比如数据库连接,远程服务访问地址等.一般我们都是 ...

  10. java io 流

    Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...