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. Python正则表达式完全指南(上)

    正则表达式处理文本有如疾风扫秋叶,绝大部分编程语言都内置支持正则表达式,它应用在诸如表单验证.文本提取.替换等场景.爬虫系统更是离不开正则表达式,用好正则表达式往往能收到事半功倍的效果. 介绍正则表达 ...

  2. Boosting决策树:GBDT

    GBDT (Gradient Boosting Decision Tree)属于集成学习中的Boosting流派,迭代地训练基学习器 (base learner),当前基学习器依赖于上一轮基学习器的学 ...

  3. python 第五弹

    *:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...

  4. react-native学习(RN)--之Window环境下搭建环境配置

    react-native以后会更火的,自从2015年facebook开源了Android 一.安装java 二.安装Android Studio 三.安装react-native需要的Android ...

  5. 详解python之反射机制

    一.前言 def f1(): print('f1') def f2(): print('f2') def f3(): print('f3') def f4(): print('f4') a = 1 t ...

  6. 《Python编程从入门到实践》第二章_变量和简单数据类型

    什么是变量呢? 举例: >>> message = "Hello,Python!" >>> print (message) Hello,Pyth ...

  7. javascript基础(幼兔、小兔成兔数量等典型例题)

    一张纸的厚度是0.0001米,将纸对折,对折多少次厚度超过珠峰高度8848米var sum=0; var a=0.0001 for(var i=0;i<100;i++){ a=a*2; sum= ...

  8. zookeeper-开始

    ZooKeeper:为分布式应用提供的分布式协调服务 ZooKeeper提供一系列原语用于分布式应用构建更高层次的服务,如同步.配置维护.分组以及命名空间. 设计目标: ZooKeeper足够简单且可 ...

  9. if 一元二次方程求根

    if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码 if...else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码 if...else if... ...

  10. 使用ABP打造SAAS系统(1)——环境准备

    一.前言 使用ABP也有一段时间了,很多东西是懂非懂,打算试着使用abp来搭建一套SAAS系统,与实际项目相互验证. 主要实现以下目标: 将ABP源码与实际项目相结合,后续可以修改相关源码来支持项目, ...