首页 > 其他分享 >Struts2学习

Struts2学习

时间:2023-12-31 21:35:54浏览次数:20  
标签:xml 请求 学习 访问 Struts2 Result Action

        在公司每天都是望着公司项目源码发呆

  使用struts2框架时,需要两个配置文件,分别为web.xml和struts.xml,服务器一启动就加载web.xml的配置,web.xml启动时,在StrutsPrepareAndExecuteFilter的init()方法中将会读取类路径下默认的配置文件struts.xml完成初始化操作;struts2读取到struts.xml后,以javabean形式存放到内存中,以后struts2对用户的每次请求处理将使用内存中的数据,而不是每次都读取struts.xml文件

  

访问流程:

  (1)客户端提交请求

  (2)请求被提交到一系列过滤器(先ActionContentCleanUp.然后其他过滤器,最后FilterDispatcher)

  (3)FiiterDispatcher咨询ActionMapper是否需要调用某个Action来处理这个请求,若ActionMapper决定调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy

  (4)ActionProxy通过Configuration Manager (struts.xml)询问框架的配置文件,找到需要调用的Action类

  (5)ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action,但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)

  (6)一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result

 

OGNL

概念:Object Graph Navigation Language,是表达式语言,Struts2默认采用ONGL表达式访问Action的数据,实际上是通过ValueStack对象来访问Action

  用法:OGNL表达式要结合Struts2标签来访问数据

  EL:${user.userName} == OGNL:<s:property value="user.userName">

  访问基本属性 <s:property value="属性名"/>

  访问实体对象 <s:property value="对象名.属性名"/>

  访问数组/集合 <s:property value="someArray[1]"/> | <s:property value="someList[1]"/>

  访问Map <s:property value="someMap.key" />

  运算 <s:property value="'My name is' + name" />

  调用方法 <s:property value="name.toUpperCase()" />

  创建集合 <s:property value="{'a','b','c'}" /> ArrayList

  创建Map  <s:property value="#{'mm':'MM','nn':'NN'}" /> LinkedHashMap

 

ValueStack

  概念:是Struts2中,Action向页面传递数据的媒介,封装了Action数据,并允许JSP通过PGNL来对其访问

原理:

访问ValueStack

  通过<s:debug>观察其结构

  输出栈顶:<s:property />

  访问Context对象:

    OGNL表达式以“#”开头

    以key来访问context对象的值,即“#key”得到context中的属性值

  迭代集合

  按数字迭代

 

Action基本原理

  核心组件

FC:前端控制器,负责统一的分发请求

Action:业务控制器,负责处理某一类业务

ValueStack:Action与JSP数据交互的媒介

interceptor:拦截器,负责扩展Action,处理Action的共通事务

Result:负责输出的组件

Tags:标签,负责显示数据,生成框体

 

2.获取Session的方式

    a)ActionContext

      - ActionContext.getContext().getSesion(),返回Map<String, Object>

    b)ServletActionContext

      - ServletActionContext.getRequest().getSession(),返回HttpSession

    c)SessionAware(推荐使用)

      - 让Action实现SessionAware接口

      - 实现setSession(Map<String, Object> session)方法,Struts2会在实例化Action后调用方法,通过方法参数将Session对象注入进来

      - 定义成员变量,接收注入进来的Session对象

 

Result原理

  介绍:用于做输出的组件,用于向页面输出一些内容,转发,重定向可以理解为特殊方式的输出,每一个Result实际上是一个类,这些类都实现了共同接口Result,Strust2预置了10种类型的Result,定义在strutsdefault.xml

  Result类型

    a)dispatcher:用于转发的result,可以将请求转发给JSP,这种类型的Result对应的类为ServletDispacherResult,通过default="true"指定该Result为Struts2默认的Result类型。

    b)stream:用于向页面输出二进制数据,此种类型的Result可以将二进制数据输出到请求发起端,对应类为StreamResult

    c)redirectAction:用于将请求重定向给另外一个Action,对应类ServletActionRedirectResult

    d)json:用于向页面输出json格式的数据,可以将json字符串输出到请求发起端。对应类为JSONResult

 

UI标签

  1.表单  <s:form action="" method="" theme="simple" ></s:form>

  2.文本框  <s:textfield name="userName" />

  3.布尔框  <s:checkbox name="marry" />

  4.单选框  <s:radio name="sex" list="#{'M':'男','F':'女'}"/> 静态初始化

        <s:radio name="favoriteCities" list="cities" listKey="cityCode" listValue="cityName" /> 动态初始化

  5.多选框  <s:checkboxlist name="travelCities" list="#{'01':'北京','02':'上海','03':'广州'}" /> 静态初始化

        <s:checkboxlist name="travelCities" list="cities" listKey="cityCode" listValue="cityName" /> 动态初始化

  6.下拉选  <s:select name="home" list="#{'01':'北京','02':'上海','03':'广州'}" /> 静态初始化

        <s:select name="home" list="cities" listKey="cityCode" listValue="cityName" /> 动态初始化

 

拦截器

  用途:拦截器适合封装一些通用处理,便于重复利用。例如请求参数传递给Action属性,日志记录,权限检查,事务处理,拦截器通过配置方式调用,方法灵活,便于维护和拓展

  

标签:xml,请求,学习,访问,Struts2,Result,Action
From: https://www.cnblogs.com/ashin1997/p/11353270.html

相关文章

  • 2023-2024-1 20231326《计算机基础与程序设计》第十四周学习总结
    2023-2024-120231326《计算机基础与程序设计》第十四周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2022-2023-1计算机基础与程序设计第十四周作业这个作业的目标《C语言程序设计》第十三章作业正文https://www......
  • 对比学习简介
    1.引言在本教程中,我们将介绍对比学习领域中的相关概念。首先,我们将讨论这种技术背后相关的理论知识;接着,我们将介绍最常见的对比学习的损失函数和常见的训练策略。闲话少说,我们直接开始吧!2.举个栗子首先,让我们通过简单的例子来增加对对比学习概念的理解。我们不妨来玩一个许多孩......
  • 2023-2024 20231421《计算机基础与程序设计》第十四周学习总结
    作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK14作业目标:自学《c语言程序设计》第十三章作业正文:教材学习内容总结《c语言程序设计》文件操作是C语言中常用的一种数据输入与输出方式,它可以实现数据的持久化存储和读取。文件操作涉及到以下几个方面:文件的概......
  • 2023-2024-1 20231306 《计算机基础与程序设计》第十四周学习总结
    作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第十四周作业这个作业的目标参考本周学习资源、自学教材《C语言程序设计》第13章并完成云班课测试作业正文教材学习内容总结《C语言程序......
  • 2023-2024-1 20231402《计算机基础与程序设计》第十四周学习总结
    2023-2024-120231402《计算机基础与程序设计》第十四周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第十四周作业这个作业的目标自学《C语言程序设计》第13章作业正文https://w......
  • 2023-2024-1 20231312 《计算机基础与程序设计》第14周学习总结
    作业信息这个作业属于哪个课程<班级的链接>2023-2024-1-计算机基础与程序设计|-这个作业要求在哪里<作业要求链接>2023-2024-1计算机基础与程序设计第6周作业|这个作业的目标《C语言程序设计》第13章|作业正文作业链接教材学习内容总结《C》第十三章文......
  • 2023-2024-1 20231407陈原第计算机科学概论与C语言程序设计第十四周学习总结
    这个作业属于哪里计算机科学概论与C语言程序设计作业要求https://www.cnblogs.com/rocedu/p/9577842.html#WEEK14作业内容学习C语言程序设计第十三章作业正文  https://www.cnblogs.com/CCCY12345/p/17937889  ......
  • 2023-2024-1 20231425《计算机基础与程序设计》第十四周学习总结
    2023-2024-120231425《计算机基础与程序设计》第十四周学习总结作业信息这个作业属于哪个课程2023-2024-1《计算机基础与程序设计》这个作业要求在哪里2023-2024-1计算机基础与程序设计第十四周作业)这个作业的目标《C语言程序设计》第13章  ......
  • Spring学习记录之引入外部属性配置文件
    Spring学习记录之引入外部属性配置文件前言这篇文章是我第二次学习b站老杜的spring相关课程所进行的学习记录,算是对课程内容及笔记的二次整理,以自己的理解方式进行二次记录,其中理解可能存在错误,欢迎且接受各位大佬们的批评指正;关于本笔记,只是我对于相关知识遗忘时快速查阅了解......
  • 国产深度学习框架吸引用户的一种免费手段——免费GPU时长
    国产的深度学习框架基本成为了一个头部公司的标配了,不论是阿里、百度还是华为都推出了自己的深度学习框架,这几家公司为了吸引用户也都采取了免费使用GPU的活动,但是与阿里、百度的不同,华为是与固定的高校的实验室合作,为合作的大学实验室提供免费算力,并且这个算力的使用时限目前应该......