• Struts2的result中各种type类型以及配置文件的一些细节


    Struts2支持的不同类型的返回结果为:
    Chain Result-->type="chain"用来处理Action链
    Dispatcher Result -->type="dispatcher"用来转向页面,通常处理JSPFreeMarker
    Result -->type="freemarker"处理FreeMarker模板HttpHeader 
    Result -->type="httpheader"用来控制特殊的Http行为Redirect 
    Result -->type="redirect"重定向到一个URLRedirect Action 
    Result -->type="redirectAction"重定向到一个ActionStream 
    Result -->type="stream"向浏览器发送InputSream对象,通常用来处理文件下载Velocity 
    Result -->type="velocity"处理Velocity模板XLST Result -->type="xslt"处理XML/XLST模板PlainText 
    Result -->type="plainText"显示原始文件内容,例如文件源代码另外第三方的result类型还包括JasperReports Plugin,专门用来处理JasperReport类型的报表输出。

    dispatcher:用于页面转发,页面跳转过程一直是同一个线程,Action中的数据一直保存在。


    redirect:可用于返回一个页面、一个action、链接到一个网址。
           缺点:redirect把一个http返回码(SUCCESS)以及返回的页面位置一起重新发给web服务器,容纳后由web服务器产生一个新的HTTP请求,就会产生一个新的线程,保存在原来Action执行的线程中的数据就无法访问。
    所以,result需要包含Action的数据,那么redirect不是一个可行的办法。因为新的HTTP请求时在Servlet容器的新的线程中处理的,ActionContext中的所有状态都不会存在。


    chain:功能与redirect的action转发类似,不过与redirectaction转发功能不同的是它可以将Action中的数据一直保存在同一个HTTP请求中。

    关于struts2的其他事儿

    ===============
       <package>
    ===============

    struts.xml 中的package的name可以随意定义,只做继承时使用。

    ===============
      <constent>
    ===============

    struts.xml 中
    用<constent name="" value=""/>
    来改变default.proerties 中key对应的值

    ==============================================
    覆盖默认的资源文件 -- default.properties
    ==============================================

    也可以在clasess(/src)下建立struts.properties的方式,覆盖默认的配置文件default.proerties
    内容如:
    struts.i18n.encoding=gbk      设置字符集
    struts.action.extension=do    设置请求后缀名
    struts.configuration.files=struts-default.xml,struts-plugin.xml,struts.xml     Struts2自动加载的配置文件


    ==============
        抽象包
    ==============
    <package name="..." abstract="true">
    表示该包中不能有action定义,只能通过包来继承来定义

    =============
      命名空间
    =============
    <package name="..." namespace="">
    将不同的应用分割开
    如果不配置,表示当前包在一个默认的命名空间里

    namespace="/hello"
    请求路径就改变为 /hello/register

    需要更改表单路径 并且一定要手工加.action
    <s:form action="/hello/register.action">

    寻找方式,如果namespace为默认,而表单路径为/hello/register.action
    当struts没有找到该命名空间是,自动到默认的命名空间找

    =============================
       <include>  模块化的配置 
    =============================

    <include file="struts_1.xml"></include>
    <include file="struts_2.xml"></include>

    struts_1.xml和struts_2.xml都是标准的strust的xml配置文件
    include后,struts会在启动后将struts_1.xml和struts_2.xml的配置信息一同加载到内存中。


    ===============
      Struts2 MVC
    ===============
    FilterDispatcher ----- 核心控制器

    每个action ------- 业务控制器 
    --------- 调用业务逻辑组件 ---- 调用DAO ---- 数据库交互

    =================
        分模块开发
    =================

    src下建立
    struts1.xml
    struts2.xml

    不同的开发人员,只需要写自己的xml配置文件
    只需要加入到struts.xml中
    <include file="struts1.xml"/>
    <include file="struts2.xml"/>

    ----------------
    struts1.xml
    xml声明,DTD信息...  结构与struts.xml相同
    <struts>
     <package name="" ...>
      ...
     ...
    ...

    ----------------
    struts2.xml
    xml声明,DTD信息...  结构与struts.xml相同
    <struts>
     <package name="" ...>
      ...
     ...
    ...

    ================
       模型驱动
    ================

    **属性驱动**:表单的字段都作为Action的属性存在

    **模型驱动**:用一个JavaBean来装载对象 类似于ActionForm


    模型Bean
    public class User {
     private String username;
     private String password;
     private String repassword;
     private int age;
     private Date date;

     // setter... getter...
    }

    ### ValueStack ### --值栈

    ModelDriven<T> 该接口使用的泛型,
      模型是什么类型那个的泛型就是什么类型
    ------ T getModel()

    Action 需要实现 ModelDriven接口


    public class RigesterAction extends ActionSupport 
     implements ModelDriven<User> {

     private User user = new User();
     public User getModel() {
      return user;
     }

     @Override
     public String execute() throws Exception {

      return SUCCESS;
     }
    }

    ====================
       Preparable 接口
    ====================

    Preparable接口中有一个void prepare() throws Exception方法,实现该接口的Action类,将在执行这个action所以方法之前执行prepare(),称为action准备方法。

    =========================
        显示特定的出错信息
    =========================

    <s:fielderror cssStyle="color:red">
     <s:param>username</s:param>
    </s:fielderror>

    去掉前面的“原点”
    需要自己修改 fielderror.ftl模板
    去掉前面的点代码

     
  • 相关阅读:
    段间跳转之陷阱门
    段间跳转之中断门
    段间跳转之调用门
    代码段段间跳转流程
    Window内核学习之保护模式基础
    回顾2020,展望2021
    内存管理之堆
    Windows进程间通讯(IPC)----信号量
    线程本地存储(动态TLS和静态TLS)
    Windows进程间通讯(IPC)----套接字
  • 原文地址:https://www.cnblogs.com/dobestself-994395/p/4278235.html
Copyright © 2020-2023  润新知