zoukankan      html  css  js  c++  java
  • Struts2.0第一章(struts2.0概述,使用步骤,执行流程,各配置文件介绍,Action详解)

    java开发中常用框架介绍:

      ssh:struts2  spring  hibernate

      ssm(ssi):springmvc  spring  mybatis(ibatis)

    struts2.0框架概述:

      strus2.0是一个基于mvc设计模式的web应用框架,它本质上相当于一个servlet,在mvc设计模式中,struts2.0作为控制器来建立模型与视图的数据交互,struts2.0采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与servlet api完全脱离。

    struts2.0核心:

      1.interceptor  拦截器

      2.Action

      3.ognl  &&  valueStack

    struts2.0框架的使用步骤:

    1.导入相关jar包(官网:struts.apache.org)
      jar包内文件夹分析:
      apps 示例代码
      docs 文档
      lib 相关jar包
      src 源代码
      我们使用struts框架不是直接将它的lib包下的所有jar文件copy到项目中,而是使用其中的一部分。我们可以参考它的是代码。(改示例代码项目struts2-blank后缀为zip,解压后找到lib中的jar包)
    2.需要在web.xml文件中配置一个Filter(只有配置了它才可以使用strtus2框架)

    1   <filter>
    2       <filter-name>struts2</filter-name>
    3       <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    4   </filter>
    5   <filter-mapping>
    6       <filter-name>struts2</filter-name>
    7       <url-pattern>/*</url-pattern>
    8   </filter-mapping>

    3.struts.xml配置文件,它的位置放在src下。(apps示例代码classes文件夹中可以找到)
    4.创建Action来完成逻辑操作

    struts2.0执行流程:

    1.当通过浏览器发送一个请求;
    2.会被StrutsPrepareAndExecuteFilter过滤器拦截;
    3.StrutsPrepareAndExecuteFilter会调用struts2框架默认的拦截器(interceptor)完成部分功能;
    4.根据struts.xml文件调用指定的action;
    5.执行Action中的操作,根据Action中方法的执行结构来选择来跳转页面Result视图;
    ???6.会调用struts2框架默认的拦截器(interceptor)完成部分功能;

    注意:一般管StrutsPrepareAndExecuteFilter叫做前端控制器(核心控制器),只有配置了这个filter我们struts2框架才能使用。
         struts2的默认拦截器(interceptor)他们是在struts-default.xml文件中配置的。
         struts-default.xml文件是在struts-core.jar包中,默认的拦截器是在名为defaultStack的拦截器栈(<interceptor-stack>)中定义的。

      当我们在浏览器中访问一个jsp页面,StrutsPrepareAndExecuteFilter过滤其就会拦截到这个请求,就会根据请求路径在struts2.xml文件中进行判断,调用指定的一个Action的方法。
    eg:

    <struts>
      <!-- package标签中namespace的属性值 + action标签中name的属性值就是访问的对应的url地址 -->
      <package name="default" namespace="/" extends="struts-default">
      <action name="struts2" class="" method="show"></action>
      </package>
    </struts>

    struts2.0源码导入:

    src下文件夹分析:
      apps
      assembly
      core
      plugins
      src
      xwork-core
      pom.xml
    对于struts2框架它的源代码我们主要使用三部分:
    1.struts2核心部分源代码
      org.apache.struts2开头的类全名要查找的是core目录下的源代码(coresrcmainjava)
    2.struts2的xwork核心部分源代码
      com.opensymphony.xwrok2开头的类全名要查找的是xwork-core目录下的源代码(xwork-coresrcmainjavacomopensymphonyxwork2)
    3.struts2的插件的源代码
      srcplugins

    在没有网络情况下,解决struts.xml编辑时只能提示问题:

    1.windows-preferences-xml-xml catalog
    2.点击add配置
      location:查找的是dtd文件本地的位置(源代码中[srccoresrcmain esourcesstruts-2.3.dtd])
      key type:URI
      key:strtus.xml文件中<!DOCYTPE>标签中的路径

    struts2配置文件的加载顺序:

    StrutsPrepareAndExecuteFilter过滤器中init()方法中加载了:
    dispatcher = init.initDispatcher(config);//init()方法中该段代码中执行了如下方法;

      init_DefaultProperties();//1
      init_TraditionalXmlConfigurations();//2
      init_LegacyStrutsProperties();//3
      init_CustomConfigurationProviders();//4
      nit_FilterInitParameters();//5
      init_AliasStandardObjects();//6

    第一个加载的是default.properties文件
      位置:struts2-core.jar包,org.apache.struts2包下
      作用:主要是声明了struts框架的常量,如struts2框架默认使用utf-8编码;
    第二个加载的是一批配置文件
      struts-default.xml
        位置:struts2-core.jar
        作用:声明了interceptor result bean
      struts-plugin.xml
        位置:在struts2的插件包中
        作用:主要用于插件的配置声明
      struts.xml
        位置:在我们自己的工程中
        作用:用于我们自己工程使用struts2框架的配置
    第三个加载的是我们自定义的struts.properties文件
      位置:都是在自己工程的src下。
      作用:定制常量
    第四个自定义配置提供
    第五个加载的是web.xml文件
      主要是加载struts2框架在web.xml文件中的相关配置。
    第六个bean相关配置

    Struts.xml文件配置介绍:

    <struts> 根标签
    <package>配置
      name属性 作用:定义一个包的名称,它必须唯一;
      namespace属性 作用:主要是与action标签的name属性联合使用,来确定一个action的访问路径
      extends属性 作用:指定我们继承自哪个包。一般值是struts-default
                 struts-default包是在struts-default.xml文件中声明的。
      abstruct属性 作用:它代表当前包是一个抽象的,主要是用于被继承。
    <action>
      name属性 作用:主要是与package标签的namespace属性联合使用,来确定一个action的访问路径
      class属性 作用:用于指示当前的action类
      method属性 作用:用于指示当前action类中的哪个方法执行
    <result>它主要是用来指示结果视图;
      name属性:作用:是与action类的method方法的返回值进行匹配,来确定跳转路径。
      type属性:作用:用于指定跳转方式;不指定的话默认是转发;
        type属性取值范围:
          chain:它类似于请求转发,只不过它针对于action跳转。
          dispatcher:转发(默认值),针对于jsp页面
          freemarker
          httpheader
          redirect:重定向,针对于jsp页面
          redirectAction:类似于重定向,针对于action
          stream
          velocity
          xslt
          plainText
          postback

    当多个action有相同的result,可以向上抽取,在<package>下定义全局result:<global-result><result name = "" type = ""></result></global-result>
    关于action配置中class&method默认值以及result中name&type默认值的问题:
      struts-default.xml文件中配置了如下代码:
      <default-class-ref class="com.opensymphony.xwrok2.ActionSupport"/>
        它的作用就是当一个请求来时,如果找不到指定的class以及对应的mehtod就会执行ActionSupport类中的execute方法,在这个方法中默认返回的是"success",也是说,result的name默认属性值是success,默认的跳转方式是请求转发dispatcher。
        即:
          action标签中:
            class 默认值:com.opensymphony.xwrok2.ActionSupport
            method默认值:execute
          result标签中:
            name默认值:success
            type默认值:dispatcher

    struts2常量配置: 

    default.properties文件中定义了struts2框架常用常量。
    定义常量的三种方法:
      1.在src下创建一个struts.properties配置文件
      2.可以在web.xml文件中配置的(不推荐使用)

    <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    <ini-param>
    <param-name>struts.i18n.encoding</param-name>
    <param-value>GBK</param-value>
    </ini-param>
    </filter>

      3.可以直接在struts.xml文件中定义常量(推荐使用)
        <constant name = "struts.i18n.encoding" value = "utf-8"></constant> <!-- 可以帮助我们解决post请求乱码问题,等效于request.setCharEncoding("UTF-8") -->
        <constant name = "struts.action.extension" value = "action"></constant> <!-- 指定struts2框架路径的扩展名,即访问路径中后缀为.action才可以拦截执行struts2框架,该常量原默认值为"action,,"表示有后缀action和没有后缀都可以被过滤器拦截执行 -->
        <constant name = "struts.devMode" value = "true"></constant> <!-- 配置为true,他会提供更加详细的报错信息,以及在struts.xml修改后不再需要重启服务器 -->
        <constant name = "struts.enable.DynamicMethodInvocation" value = "true"></constant> <!-- 开启动态方法调用 -->
      注意:后加载的配置文件中的常量会将先加载的常量覆盖掉。

    Struts2的Action详解

    struts2中的action,主要是完成业务逻辑操作,action替代在servlet中完成的作用。

    如何创建一个action
    action类的三种创建方式
      1.创建一个pojo类(plani ordinary java objec 简单的java对象)
        pojo类就是没有implements任何接口没有extends任何类
        优点:无耦合
        缺点:所有功能都需要自行完成
      2.创建一个类实现Action接口
        com.opensymphony.xwork2.Action
        在Action接口中定义了五个常量(ERROR,INPUT,LOGIN,NONE,SUCCESS),一个execute方法。
        五个常量:他们是默认的五个结果视图。
          ERROR:错误视图
          INPUT:它是struts2框架中interceptor中发现问题会访问的一个视图
          LOGIN:登陆视图,可以在权限操作中使用
          NONE:它代表null,什么都不做,也不会做跳转。
          SUCCESS:成功视图。
          优点:耦合度低
          缺点:还是需要自行来完成功能。
      3.创建一个类继承ActionSupport类
        com.opensymphony.xwork2.ActionSupport
        ActionSupport也实现了Action接口
        我们在开发中一般会使用这种方案:
        优点:具有丰富的功能,例如,表单校验,错误信息设置,国际化
        缺点:耦合度高
    如何访问一个action
      1.直接通过<action>标签来配置,通过method来指定访问的方法,如果没有method方法,默认访问execute方法。
      2.简化的action访问方式,可以使用*通配符。
        <action name = "*_*" class = "cn.com.{1}Action" method = "{2}"></action>
      3.扩展-动态方法调用:(不建议使用)
        访问路径 感叹号 执行方法
        eg:localhost:8080/struts2/User!login
        这是struts2中提供的动态方法调用。
      注意:对于struts的动态方法调用,要想使用我们必须配置一个常量来开启动态方法调用:[struts.enable.DynamicMethodInvocation = true]

  • 相关阅读:
    objective-c数组
    objective-c可变数组
    objective-c可变字典
    objective-c字典
    有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
    将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5
    一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?
    求123456789-23456789-3456789-456789-...-9的值
    编写一个程序,求s=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值
    Unity3D笔记 GUI 二 、实现选项卡一窗口
  • 原文地址:https://www.cnblogs.com/laodang/p/9551134.html
Copyright © 2011-2022 走看看