zoukankan      html  css  js  c++  java
  • Struts2&基本配置&使用

    Struts2概述

        Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。
    执行流程图
    1:
    ![完整执行流程][1]
    2:
    ![执行流程][2]

    struts下载地址官网

    官网: https://struts.apache.org/
    ## Struts2的配置文件的加载顺序 ##
    查看StrutsPrepareAndExecuteFilter:(核心过滤器)两个功能 :预处理 和 执行 
    在预处理功能中 init 方法中会有加载配置文件的代码:
    dispatcher.init();
    init_DefaultProperties(); // [1] ---- 加载org.apache.struts.default.properties.配置的是struts2的所有常量.
    init_TraditionalXmlConfigurations(); // [2] ---- 加载struts-default.xml、struts-plugin.xml、struts.xml
    init_LegacyStrutsProperties(); // [3] ---- 加载用户自定义struts.properties
    init_CustomConfigurationProviders(); // [5] ---- 加载Struts2定义Bean.
    init_FilterInitParameters() ; // [6] ---- 加载web.xml
    init_AliasStandardObjects() ; // [7] ---- 用户自定义Bean


    结论:
    default.properties
    struts-default.xml
    struts-plugin.xml
    struts.xml ---- 配置Action以及常量.(******)
    struts.properties ---- 配置常量
    web.xml ---- 配置核心过滤器及常量.
    ***** 后配置的常量 会 覆盖先配置的常量.

    Action的配置

    <package>的配置:
    * package:包. 不是java中说那个包. Struts2中的包 管理<action>.(随意定义用来给其他package继承)
    * 属性:
    * name :包名.包名是唯一的不能重复的.
    * extends :继承.继承struts-default.(struts-default包中定义结果类型和拦截器.)
    * namespace :名称空间.与<action>标签中的name属性共同决定Action的访问路径.
    * 写法:
    * namespace有名称: namespace=”/aa”
    * namespace只是一个/: namespance=”/”
    * namespace默认的: namespace没写.
        
    * abstract :抽象的.用于使其他的包可以继承的.
    * <package name="struts-default" abstract="true"> . 所以可以继承struts-default.


    <action>的配置:
    * action:配置Action类的访问路径.
    * 属性:
    * name :名称.与<package>中的namespace属性共同决定访问路径.
    * class :类的全路径.要执行的Action类的全路径.
    * method :方法.用来指定Action中执行那个方法的方法名.(默认的值execute)


    局部结果页面:
        <action name="requestActionDemo2" class="cn.itcast.struts2.demo4.RequestActionDemo2">
            <result name="success">/demo3/demo3.jsp</result>
        </action>
    全局结果页面:
        <global-results>
    <result name="success">/demo3/demo2.jsp</result>
        </global-results>


    <result>的配置:
    result :配置Action执行后的页面跳转.
     属性:
    name :逻辑视图名称.(不是真实的视图,为真实的视图起了一个别名,在Action中返回这个字符串的别名,从而找到具体页面.)


    type :跳转的类型 取值:
            * dispatcher :默认值,转发. 转发到一个JSP页面
            * redirect :重定向. 重定向到一个JSP页面
            * chain :转发,转发到一个Action.
            * redirectAction :重定向到另一个Action


    默认的Action:
    <!-- 配置默认的Action:Action的访问路径不存在的时候,执行一个默认的Action -->
    <default-action-ref name="strutsDemo1"/>




    Action的默认处理类:
    <!-- Action的默认处理类:Action的访问路径配置正确了,但是没有配置class属性. -->
    <default-class-ref class="com.opensymphony.xwork2.ActionSupport"/>


    <include file="cn/itcast/struts2/demo1/struts_demo1.xml"/>  整合其他的struts的配置文件.


    Action访问三种配置

    <!--演示Action的访问-->
        <package name="customer" namespace="/" extends="struts-default">
            <!--传统方式(每有一个请求路径,需要配置一条action)-->
            <!--配置save方法-->
            <action name="save" class="com.demo.action2.CustomerAction" method="save"></action>
            <!--配置delete方法-->
            <action name="delete" class="com.demo.action2.CustomerAction" method="delete"></action>


            <!--
                通配符的方式
                name : * 号是通配符(以此为例子linkman_save,linkman_后面的save字符就是*)
                class : action文件路径
                method : {1}表示第一个 * ({2}表示第二个 * ,以此类推,以此为例linkman_save,那么method值就是save)
            -->
            <action name="linkman_*" class="com.demo.action2.LinkmanAction" method="{1}"></action>


            <!--配置动态的方法访问 method属性不需要编写了-->
            <action name="user" class="com.demo.action2.UserAction">


            </action>


        </package>


    Action类编写

    【Action的是一个POJO的类】
    Action是简单的Java对象没有实现任何借口 和 继承任何类.
    public class ActionDemo1 {


    public String execute(){
    System.out.println("ActionDemo1执行了...");
    return null;
    }
    }
    【Action类实现一个Action的接口】
    public class ActionDemo2 implements Action{


    @Override
    public String execute() throws Exception {
    System.out.println("ActionDemo2执行了...");
    return null;
    }


    }


    Action接口中提供了5个已经定义好的视图名称:
        * SUCCESS :success,代表成功.
        * NONE :none,代表页面不跳转
        * ERROR :error,代表跳转到错误页面.
        * INPUT :input,数据校验的时候跳转的路径.
        * LOGIN :login,用来跳转到登录页面.
    【Action类继承ActionSupport类】
    public class ActionDemo3 extends ActionSupport{


    @Override
    public String execute() throws Exception {
    System.out.println("ActionDemo3执行了...");
    return NONE;
    }
    }


    ActionSupport中提供了一些功能,比如数据校验,比如国际化… 如果Action继承了ActionSupport,那么Action就会有这些功能.
  • 相关阅读:
    Oracle11g 干净卸载
    linux中的帮助命令
    Linux Samba文件共享服务,安装与案例配置
    linux文件系统相关命令(df/du/fsck/dumpe2fs)
    虚拟机VMware下CentOS6.6安装教程图文详解
    vnc连接远端linux服务器
    mysql57重新安装后无法再次启动mysql57服务“本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动。”--解决方法
    (二)分布式数据库tidb-事务
    Centos 6下使用cmake编译安装MariaDB
    MySQL数据库基本知识
  • 原文地址:https://www.cnblogs.com/sybk/p/10004735.html
Copyright © 2011-2022 走看看