1.Struts2入门

Struts2入门


Struts2 概述

  1. struts2 框架应用 javaee 三层结构的 web 层框架
  2. struts2 框架 在 struts1 和 webwork 的基础上发展的全新的 框架
  3. struts2 版本 2.3.24 (目前较为稳定的版本)
  4. 解决问题 请求 > 过滤器 > 拦截 > 动作类 > 动作类的方法

Struts2 入门案例

第一步 jar包

  • 文件夹
    • apps ( var包 > 示例 )
    • docs ( 帮助文档 )
    • lib ( jar包 )
    • src ( 源码 )
    • 导入jar包
    • 导入示例文件jar包

第二步 创建action类

    //每次访问action的时候,默认执行execute方法
    public class XxxAction{
        public String execute(){
            return "ok";
        }
    }

第三步 配置 action 类的访问路径

创建struts2 的核心配置文件

  1. 核心配置文件名和位置是固定的
  2. 位置必须在src下面,名称必须为 struts.xml

引入dtd 约束 > 在示例文件中找

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">

标签

<struts>
  <!--  设置常量值,设置页面主题为极简模式 -->
    <constant name="struts.ui.theme" value="simple"></constant>
  <!--  package元素用于配置Action包,包主要用于管理动作模型的对象
        name="Users"表示包的名称,在配置文件中是唯一的
        namespace="/"表示虚拟路径名称
        extends="struts-default" 表示继承Steuts2提供的struts-default.xml文件,此文件中配置了各种类型转换和拦截器类,用于辅助用户的数据处理
    --> 
    <package name="Users" namespace="/" extends="struts-default">
  <!-- 
        action元素用于配置动作模型
        class="com.action.UsersAction"表示动作类的包路径
        method="check" 表示要执行的方法
   -->
        <action name="check_Users" class="com.action.UsersAction" method="check">
  <!-- 
        result 元素表示结果的配置,是action的子元素  name="执行的返回值" 
        loginok.jsp 表示 跳转路径
        type="redirect" 表示该跳转使用重定向方式跳转
        没有type属性则表示转发
   -->
            <result name="ok" type="redirect">loginok.jsp</result>
            <result name="fail" >fail.jsp</result>
        </action>
    </package>
</struts> 

配置过滤器(容易忘记)

  • 在web.xml
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
      <!-- Struts的预处理和执行过滤器 -->
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping></web-app>

Struts2 底层执行过程

执行过程

第一步 网页提交

第二步 过滤器

  • 在过滤器实现功能
  • 过滤器名称org.apache.struts2.dispatcher.ng.filter.StrutsPreareAndExecuteFilter

第三步 获取请求

  1. 获取请求路径
  2. 得到路径中的Xxx.action

第四步 解析请求

  1. src 下找到struts.xml
  2. 使用dom4j解析文件内容
  3. 匹配 action 属性 name 的值

第五步 获取动作类

  1. 找到 name 相同值 的 class 值
  2. 得到 class 的全路径
  3. 通过 method 获取方法名

第六步 执行方法

  1. 利用反射得到类
    Class clazz = Class.forName("得到的路径");
  2. 得到方法
    Method m = clazz.getMethod("获得的方法名");
  3. 执行方法
    Object obj = m.invoke();

第七步 判断返回值

  1. 得到方法的返回值
  2. 通过方法的执行 得到方法的返回值
  3. 在struts.xml 中找result 标签
  4. 匹配 返回值 和 name 的属性
  5. 如果一致 跳转 标签内容的 地址页面

查看源码

  • 服务器启动是创建过滤器(拦截器)
  • 在init()方法中,加载配置文件 顺序如下
    1. default.properties
    2. struts-default.xml
    3. struts-plugin.xml
    4. struts.xml >>> 配置action以及常亮
    5. struts.properties >>> 配置常量
    6. web.xml >>> 配置核心过滤器及常量

Struts2核心配置文件

  • 名称位置固定
  • 主要有三个标签 | 根标签(struts) | package | action | result |

package 标签

  • 类似于包,区分不同的action
  • name 属性
    跟功能无关但是 package 的名字不能重复
  • extends 属性
    “struts-default”
    使我们的类有action 的功能 必须写固定的
  • namespace 属性
    要和action 中的 name 的值 构成访问路径

action 标签

  • 配置 action 的访问路径
  • name 属性
    和 package 中的 namespace 的值 构成访问路径
    不能重名
  • class 属性
    action 动作类的全路径
  • method 属性
    action 动作类的执行方法
    默认执行execute

result 标签

  • 根据 action 的返回值 跳转不同的路径
  • name 属性
    对比的返回值
  • type 跳转的方法

    1. 重定向
    2. 转发(默认)
  • 内容
    路径

常量配置

  • 设置主题
    <constant name="struts.ui.theme" value="simple"></constant>
  • 设置编码格式
    <constant name="struts.i18n.encoding" value="utf-8"></constant>
  • 还有2中配置方法(几乎不用)
    1. src 下面 创建 struts.property
    2. 在web.xml进行配置

分模块开发

  • 引入方法
    <include file="Xxx.xml"></include>

Struts2 action 的 创建

Action 动作类 的 编写方式

  • 有三种

第一种 普通类

  • 这个不继承不实现

第二种 实现

  • 实现 Action 接口 xwork2 里的接口
  • 提供了常量
  • 但不经常用,因为实现接口必须实现所有的方法,如果不用就比较麻烦

第三种 继承 *

  • 继承类 AcitionSupport
  • 也能用xwork2 的常量
  • 因为 ActionSupport 实现了 xwork2

注意 : > action的要使用的变量都要使用getter&setter方法 < ;


Struts2 action 的 方法访问

  • 三种方式

第一种 action标签 **

  • 使用 action 标签的 method 属性指定的方法

第二种 通配符 **

  • 使用 通配符的方式 *
  • 在 action name 属性声明通配符<action name="*_*" class="方法全路径" method="{1}_{2}">
  • {n} > 表示匹配第n个星号 一般不超过2个*号
  • result 标签 路径的给定
    1. 在Action动作类中声明变量(path)给予路径(必须有getter&setter方法)
    2. 用EL表达式${path} 在 替换标签 result的路径 内容
      <result name="返回值">${path}</result>

第三种 动态访问 (基本不用)

  • 动态访问

注意事项

  1. action 的返回值 必须是 String 类型,并且要匹配 action 标签的 name 值
  2. action 可以没有返回值, 但不建议这么做 可以直接返回”none” >>> none 表示没有返回值 会显示空白页面




关系示例图

  • 普通配置
    关系示例图
  • 通配符配置
    这里写图片描述

猜你喜欢

转载自blog.csdn.net/luke199257/article/details/80753139