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. javaWeb学习总结(8)- JSP标签(6)

    一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 ...

  2. php原生curl接口的请求

    /** * @desc 接口请求处理 * @date 2017/5/19 11:39 * @param [$url请求的接口地址,$way为false为get请求,true为post请求] * @au ...

  3. MySQL数据目录更改及相关问题解决方案

    步骤相关 1.停掉MySQL服务 service mysql stop 2.把旧的数据目录/var/lib/mysql备份到新的数据目录/data/mysql cp /var/lib/mysql /d ...

  4. Spring 5.0.0.RC1 - CORS Support 【译文】

    3 CORS支持 3.1 介绍 出于安全考虑,浏览器禁止对当前源之外的资源进行AJAX调用.例如,当你在一个标签页检查你的银行账户时,你可以在另一个标签页打开evil.com的网站.在evil.com ...

  5. java编程之泛型

    java泛型实现了"参数化类型"的概念,所谓"参数化类型"是指将操作的数据类型指定为一个参数,这点在容器中用的最多,例如:List<String> ...

  6. AVL树(平衡二叉查找树)

    首先要说AVL树,我们就必须先说二叉查找树,先介绍二叉查找树的一些特性,然后我们再来说平衡树的一些特性,结合这些特性,然后来介绍AVL树. 一.二叉查找树 1.二叉树查找树的相关特征定义 二叉树查找树 ...

  7. 移动端使用rem同时适应安卓ios手机原理解析,移动端响应式开发

    rem单位大家可能已经很熟悉,rem是随着html的字体大小来显示代表宽度的方法,我们怎样进行移动端响应式开发呢 浏览器默认的字体大小为16px 及1rem 等于 16px 如果我们想要使1rem等于 ...

  8. 基于谱聚类的三维网格分割算法(Spectral Clustering)

    谱聚类(Spectral Clustering)是一种广泛使用的数据聚类算法,[Liu et al. 2004]基于谱聚类算法首次提出了一种三维网格分割方法.该方法首先构建一个相似矩阵用于记录网格上相 ...

  9. JParticles 2.0 发布,打造炫酷的粒子特效

    JParticles 2.0 发布,打造炫酷的粒子特效.不好意思哈,在这么繁花似锦的世界里,标题不得不取得吸引眼球一点哈,不然...还是不啰嗦了,我们进入正题吧 简单介绍一下 JParticles 2 ...

  10. nodeJS之流stream

    前面的话 当内存中无法一次装下需要处理的数据时,或者一边读取一边处理更加高效时,我们就需要用到数据流.NodeJS中通过各种Stream来提供对数据流的操作.本文将详细说明NodeJS中的流strea ...