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]

原文地址:https://www.cnblogs.com/laodang/p/9551134.html