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. ionic 使用mobisscrolls,实现日期选择的插件

    废话不多说,直接说用法: 1,先下载mobisscrolls的破解版,下载地址,链接:http://pan.baidu.com/s/1boSKf51 密码:5dft 当然你也可以去官网下载,不过官网的 ...

  2. git reset、git checkout和git revert的区别

    这三个git命令都是用来撤销代码仓库中的某些更改,而前两个命令不仅可以作用于commit层面,还可以作用于file层面Reset在commit层面,reset通过移除当前分支的一些节点来实现版本回滚; ...

  3. Spring学习笔记——02 Bean的命名及实例化

    一.Bean的命名 前一篇讲到IoC是一个管理Bean的容器,Bean多数情况下都是通过XML文件进行配置的,其中Bean的命名有以下几种方式,现在梳理一下. 1. 不指定id,只配置类名 <b ...

  4. 获取openId | 小程序

    最近项目中需要使用微信授权,继上一篇<关于微信小程序拒绝授权后,重新授权并获取用户信息>之后,需要获取用户的openId,开发测试时,发现无论如何都获取不到: 官方文档如下: 相信很多同学 ...

  5. Python教程(2.6)——list和tuple简介

    Python中内置的类型有list和tuple. List list类似于C/C++的数组,可以存储多个数字.例如你可能会需要存储一个班里所有人的名字.这时就可以用到list.list中存储的数据叫做 ...

  6. sql导出

    第一步: 要求:把Library里面的Readers表导出到MyDB中(注意:读者编号.设置了主键)

  7. linux下部署php项目-Apache、php、mysql关联

    linux下部署php项目环境可以分为两种,一种使用Apache,php,mysql的压缩包安装,一种用yum命令进行安装. 使用三种软件的压缩包进行安装,需要手动配置三者之间的关系.apache和p ...

  8. JavaScript设计模式_02_策略模式

    在程序设计中,我们常常遇到这种情况,要实现某一个功能我们有很多种算法可以实现.这些算法灵活多样,而且可以随意互相替换.这种解决方案就是所谓的策略模式. /* * pre:策略模式 * 示例:公司计算奖 ...

  9. Python 操作 Azure Blob Storage

    笔者在<Azure 基础:Blob Storage>一文中介绍了 Azure Blob Storage 的基本概念,并通过 C# 代码展示了如何进行基本的操作.最近笔者需要在 Linux ...

  10. Azure 认知服务 (2) 计算机视觉API - 分析图像

    <Windows Azure Platform 系列文章目录> 在上一节内容中,笔者介绍了微软认知服务的概览. 在本节中,笔者将详细介绍微软认知服务中的一种:计算机视觉 (Computer ...