• Struts2的知识点小总结


    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:指定我们当前的要跳转的跳转方式

          resultname属性默认值是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它们都对应着一次请求(一个线程).

          valueStackActionContext本质上是可以获取

     存储数据  

          //主要向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="自定义的你要上传的文件的最大值">

          

        

      

            

     

     

     

     

     

  • 相关阅读:
    [BOST] 博赞有机的学习技巧
    [BOST] 你的大脑比你想象的更优秀
    Markdown学习笔记
    nodejs原生态模块,写个聊天室
    【2】自定义WindowsForm分页控件使用【共两篇】
    【1】自定义WindowsForm分页控件使用【共两篇】
    《Log4net写出适合自己的日志类》第三篇【终】【怎样让它适合你自己需求】
    《Log4net写出适合自己的日志类》第二篇【没有理论的实践是盲目】
    《Log4net写出适合自己的日志类》第一篇【上来就是干,先实践后理论】
    记忆留住深刻过往,博客写出平淡事迹【博客首篇】
  • 原文地址:https://www.cnblogs.com/wenzic/p/7141535.html
Copyright © 2020-2023  润新知