zoukankan      html  css  js  c++  java
  • Struts 2.0 入门

    1. Struts2.0 概述

    • Struts 2.0 是以 WebWork 为核心,采用拦截器的机制来处理用户的请求;
    • Struts 2.0 是一个基于 MVC 设计模式的 Web 层框架;
    • Struts 2.0 本质上相当于一个 servlet;

    1.1 Web 层框架的特点

    • 前端控制器模式;
    • Struts 2.0 框架的前端控制器就是过滤器;
    • 配置 Struts 2.0 的环境,必须在 web.xml 中配置核心的过滤器;

    2. Struts 环境搭建

    2.1 配置 Struts2 的前端控制器

    • Struts2 的前端控制器就是一个过滤器,需要在 web.xml 中配置;
    • 前端控制器的类路径和名称:
      org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    // web.xml
        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>
            org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
            </filter-class>
        </filter>
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    

    2.2 编写 Action 类

    1. Action 类是动作类,是 Struts2 处理请求,封装数据,响应页面的核心控制器;
      • 一般以 "xxxAction" 方式命名 action类
      • 该类中的方法必须是 public 类型;
      • 该类中的方法必须有 String 类型的返回值;
      • 方法名称是任意的,但是不能有参数;
    2. 页面跳转
      • return "要跳转的页面(字符串)";
      • 需要 src 目录下的 struts.xml 中配置跳转的页面;
      • 路径写法: 在 struts2 框架中,不管是转发还是重定向,都不用写项目名;

    2.3 编写 struts 的配置文件

    • 配置文件的名称必须是 struts.xml;
    • 配置文件的路径必须是在 src 目录下;
    // action 类
        public class HelloAction{
    
            public String sayHello(){
                System.out.println(".........");
    
                // 跳转页面
                return "ok";
            }
        }
    
    //  src/struts.xml
        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE struts PUBLIC
    	   "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    	   "http://struts.apache.org/dtds/struts-2.3.dtd">
    
        <struts>
            <package name="default" namespace="/" extends="struts-default">
                // 配置 action
                <action name="hello" class="com.itheima.action.HelloAction" method="sayHello">
                    // 配置跳转的页面
                    // 在 struts2 框架中,不管是转发还是重定向,都不用写项目名;
                    <result name="ok">/demo/suc.jsp</result>
                </action>
            </package>
        </struts>
    

    3. Struts2 框架的配置文件

    3.1 配置文件加载顺序

    1. Struts2 框架的核心是 StrutsPrepareAndExecuteFilter 过滤器,该过滤器有两个功能:
      • Prepare: 预处理,加载核心的配置文件;
      • Execute: 执行,让部分拦截器执行;
    2. StrutsPrepareAndExecuteFilter 过滤器会加载哪些配置文件?
      • init_DefaultProperties(): 加载 org/apache/struts2/default.properties;
      • init_TraditionalXmlConfigurations():
                 加载 struts-default.xml, struts-plugin.xml, struts.xml;
      • init_LegacyStrutsProperties(): 加载自定义的 struts.properties;
      • init_CustomConfigurationProviders(): 加载用户自定义配置提供者
      • init_FilterInitParameters(): 加载 web.xml;
    3. 重点了解的配置文件
      • default.properties: 配置的是 struts2 中的常量值, 例如编码等;
      • struts-default.xml: 配置的是 struts2 的核心功能,例如 Bean, 拦截器和结果类型等;
      • struts.xml: 配置的是 web应用中的内容,在工作中,基本就配置它; 也可以配置常量;
      • web.xml: 配置前端控制器,可以配置常量;
      • 开发中,基本都在 struts.xml 中配置常量;

    3.2 struts.xml 配置文件的配置

    3.2.1 <package> 标签包含的属性
    • name: 包的名称,要求是唯一的,用来管理 action;
    • extends: 继承,一般都是继承 struts-default; 也可以继承其他的包;
    • namespace: 名称空间, 一般与 <action> 标签中的 name 属性共同决定了访问路径;
    • abstract: 抽象的,这个属性很少被使用,值如果为 true,表示该包是用来被继承的;
    3.2.2 <action> 标签包含的属性
    • name: 和 <package> 标签的 namespace 属性一起来决定访问路径;
    • class: 配置 Action 类的全路径(默认值是 ActionSupport 类);
    • method: Action 类中执行的方法, 如果不指定, 默认值是 execute;
    3.2.3 <result> 标签包含的属性
    • name: 结果页面逻辑视图名称;
    • type: 结果类型(默认值是转发);

    3.3 struts2 配置常量

    3.3.1 哪些配置文件中可以配置常量
    • web.xml: 在 StrutsPrepareAndExecuteFilter 配置文件中配置初始化参数;
    • struts.xml: <constant name="常量名" value="常量值"></constant>
    3.3.2 常用的常量
    • struts.i18n.encoding=UTF-8: 指定默认编码集;
    • struts.action.extension=action,,: 指定需要 struts2 处理的请求后缀, 默认值是 action
      即所有匹配 *.action 请求,都由 struts2 处理;
    • struts.serve.static.browserCache=true: 设置浏览器是否支持缓存静态内容, 默认值是 true;
      开发阶段最好关闭; 生产环境下使用;
    • struts.configration.xml.reload=false: 当 struts 的配置文件修改后,系统是否自动重新加载该文件;
      默认值是 false;
    • struts.devMode=false: 开发阶段使用,这样可以打印出更详细的错误信息;

    3.4 指定多个 struts 的配置文件

    • 为了避免 struts.xml 文件过于庞大,提高 struts.xml 文件的可读性,可以将一个 struts.xml 配置文件
      分解成多个配置文件, 然后在 struts.xml 文件中包含其他配置文件;
    // struts.xml
        <struts>
            <include file="cn/itheima/domain/struts_user.xml"/>
        </struts>
    

    4. Action 类

    4.1 Action 类的三种写法

    1. Action 类是一个 POJO 类. POJO(Plain Ordinary Java Object),没有继承某个类,没有实现接口,就是 POJO 类.
    2. Action 类可以实现 Action 接口
      • Action 接口中定义了 5 个常量的值,对应的是 5 个逻辑视图跳转页面, 还定义了一个 execute 方法;
      • 5个逻辑视图常量:
        • SUCCESS : 成功;
        • INPUT :用于数据表单校验,如果校验失败,跳转 INPUT 视图;
        • LOGIN :登录;
        • ERROR : 错误;
        • NONE : 页面不跳转;
    3. Action 类可以去继承 ActionSupport 类(开发中使用最多);

    4.2 Action 类中方法的访问

    4.2.1 第一种方式
    • 通过 <action> 标签中的 method 属性,访问的 Action 中的具体方法;
    // 页面代码
        <a href="${pageContext.request.contextPath}/addBook.action">添加图书</a>
        <a href="${pageContext.request.contextPath}/deleteBook.action">删除图书</a>
    
    // 配置文件的代码
        <package name="demo2" extends="struts-default" namespace="/">
            <action name="addBook" class="cn.itcast.demo2.BookAction" method="add"></action>
            <action name="deleteBook" class="cn.itcast.demo2.BookAction" method="delete"></action>
        </package>
    
    // Action 类的代码
        public class BookAction extends ActionSupport{
                public String add(){
                    System.out.println("添加图书");
                    return NONE;
                }
                public String delete(){
                    System.out.println("删除图书");
                    return NONE;
                }
        }
    
    4.2.2 第二种方式
    • 通配符的访问方式: 访问的路径和方法的名称必须要有某种联系;
    • 可以简化配置文件的代码编写,而且扩展和维护比较容易
    // 页面代码
        <a href="${pageContext.request.contextPath}/order_add.action">添加订单</a>
        <a href="${pageContext.request.contextPath}/order_delete.action">删除订单</a>
    
    // 配置文件代码
        <package name="demo3" extends="struts-default" namespace="/">
    
            // 通配符的方式, 数字 1, 代表第一个星号
            <action name="order_*" class="cn.itcast.demo2.OrderAction" method="{1}">
                <result name="saveOK">xxxx</result>
                <result name="delOK">xxxx</result>
            </action>
        </package>
    
    // Action 类的代码
        public class OrderAction extends ActionSupport{
            public String add(){
                System.out.println("添加订单");
                return saveOK;
            }
            public String delete(){
                System.out.println("删除订单");
                return delOK;
            }
        }
    
    4.2.3 第三种方式
    • 动态方法访问的方式, 需要开启一个常量 struts.enable.DynamicMethodInvocation=true;
    • 在 struts.xml 中设置该常量
      • <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
    // 页面代码
        <a href="${pageContext.request.contextPath}/product!add.action">添加商品</a>
        <a href="${pageContext.request.contextPath}/product!delete.action">删除商品</a>
    
    // 配置文件代码 struts.xml
        <action name="product" class="cn.itcast.demo2.ProductAction"></action>
    
    // Action 类的代码
        public class ProductAction extends ActionSupport{
            public String add(){
                System.out.println("添加订单");
                return NONE;
            }
            public String delete(){
                System.out.println("删除订单");
                return NONE;
            }
    }
    

    参考资料

  • 相关阅读:
    【机器学习】:Xgboost/LightGBM使用与调参技巧
    Golang map 源码
    Golang slice、array 源码
    Golang string 源码
    Golang sync.Mutex
    Golang net/http
    Golang GMP模型
    转发:全套支付宝系统架构(含内部架构图),非常好的收藏学习!
    付款 案例 研究
    (转发)Java学习路线
  • 原文地址:https://www.cnblogs.com/linkworld/p/7707111.html
Copyright © 2011-2022 走看看