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. Bitwise And Queries

    Bitwise And Queries Time limit: 1500 msMemory limit: 128 MB You are given QQ queries of the form a\ ...

  2. 把ipad作为电脑的第二显示器

    需要:1,iPad          2,ios端需要软件idisplay(在pp助手里搜索idisplay下载即可)       3,windows需要软件iDisplay(链接http://www ...

  3. Nginx教程(一) Nginx入门教程

    Nginx教程(一) Nginx入门教程 1 Nginx入门教程 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行.由 ...

  4. JS Event事件流(冒泡机制、捕获机制、事件绑定)

    1.事件流 事件流:从页面中接收事件的顺序.也就是说当一个事件产生时,这个事件的传播过程,就是事件流. IE的事件流 IE中的事件流叫事件冒泡:事件冒泡:事件开始时由最具体的元素接收,然后逐级向上传播 ...

  5. kafka 0.10.2 解决java无法生产消息到指定topic问题

    主要是修改server.properties的advertised.listeners advertised.listeners=PLAINTEXT://192.168.59.132:9092

  6. 一天搞定CSS: overflow--14

    overflow:针对超出父级的内容如何显示 代码演示 <!DOCTYPE html> <html> <head> <meta charset="U ...

  7. Sizzle 源码分析 (二)

    在Sizzle函数中,如果能快速处理或者通过querySelector处理,那么就使用它处理.否则使用select函数处理 . select函数 select = Sizzle.select = fu ...

  8. PHPstrom的Disable Power Save Mode

    1.安装好phpstorm之后 发现代码高亮和函数自动提示都失效了 网上有人说可能是Power save mode的原因开始没找到这个设置在哪 后来在底部面板的信息提示处发现有一条系统消息: 17:0 ...

  9. python基础操作

    1.打印操作 print('2222') 2.接收用户输入 name=input('name') 3.if else判断 name='qiao'name2='师弟'username=input('输入 ...

  10. Javascript检测值

    检测原始值用typeof javascript有五种原始类型,分别为字符串.数字.布尔值.null和undefined 判断一个值是什么类型的字符串,可以通过typeof typeof variabl ...