初识不知曲中意,再听已是曲中人下一句是什么_调用action方法出错

初识不知曲中意,再听已是曲中人下一句是什么_调用action方法出错动作类是多例的,每次动作访问,动作类都会实例化。所以是线程安全的。在每次动作执行前,核心控制器StrutsPrepareAndExecuteFilter都会创建一个ActionContext和ValueStack对象。且每次动作访问都会创建。这两个对象存储了整个动作访问期间用到的数据。并且把数据绑定到了线程局部变量(ThreadLocal)上了。所以是线程安全的。contextMap使用struts内置标签<s:debug>查看contextMap数据利用ActionCo.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

  • 动作类是多例的,每次动作访问,动作类都会实例化。所以是线程安全的。
  • 在每次动作执行前,核心控制器StrutsPrepareAndExecuteFilter都会创建一个ActionContext和ValueStack对象。且每次动作访问都会创建。
  • 这两个对象存储了整个动作访问期间用到的数据。
  • 并且把数据绑定到了线程局部变量(ThreadLocal)上了。所以是线程安全的。

contextMap

在这里插入图片描述
使用 struts内置标签 <s:debug> 查看contextMap数据

利用ActionContext存数据

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Map;

/** * @program: struts2_06 * @description * @author: LIANG * @create: 2021-02-02 13:20 **/
public class Actiondata extends ActionSupport { 
   
    @Override
    public String execute() throws Exception { 
   
        //获取ActionContext对象 直接存储key value对象
        ActionContext contextMap = ActionContext.getContext();
        contextMap.put("username","contextMapLIANG");
        
        //获取session对象 催出数据
        Map<String, Object> session = contextMap.getSession();
        session.put("username","session01LIANG");
        //通过request对象获取session 存储数据
        HttpSession session1 = ServletActionContext.getRequest().getSession();
        session1.setAttribute("username","seeeion02LIANG");
        
        //获取request对象 存储数据
        HttpServletRequest request = ServletActionContext.getRequest();
        request.setAttribute("username","requestLIANG");
        
        //获取application对象存储数据
        Map<String, Object> application = contextMap.getApplication();
        application.put("username","application01LIANG");
        //通过ServletActionContext获取Application对象 存储数据
        ServletContext servletContext = ServletActionContext.getServletContext();
        servletContext.setAttribute("username","application02LIANG");
        return SUCCESS;
    }
}

在这里插入图片描述

获取ValueStack对象的方法&存数据

 //1 使用ActionContext对象获取
ValueStack valueStack = ActionContext.getContext().getValueStack();
valueStack.push(new Student("LIANG","123456"));

//获取数据 方法一用ActionContext对象获取Request 获取值栈
Map<String,Object> requestMap = (Map<String,Object>)ActionContext.getContext().get("request");
ValueStack valueStack1 = (ValueStack)requestMap.get("struts.valueStack");

//第三种获取值栈的方法 使用ServletActionContext获取request 获取值栈
ServletActionContext.getRequest().getAttribute("struts.valueStack");

获取数据

取contextMap中的数据 需使用#

<%@ taglib prefix="s" uri="/struts-tags" %>
<%--
    @program: struts2_06
    @description
    @author: LIANG
    @create: 2021-02-02 16:14
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>data01</title>
    </head>
    <body>
       <s:debug></s:debug>
<%--        取contextMap中的数据 使用#号--%>
        <s:property value="#username"></s:property><br>
        <s:property value="#session.username"></s:property><br>
        <s:property value="#application.username"></s:property><br>
    </body>
</html>

获取valueStack中数据 直接写类中的属性名

<%--        取contextMap里面ValueStack中对象的属性: 直接写对象中的属性名--%>
<s:property value="username"></s:property><br>

当取valueStack数据时如果对象属性重名(如下图) 通过OGNL表达式查找
在这里插入图片描述

<s:property value="[0].password"></s:property><br>
<s:property value="[1].password"></s:property><br>

注:当标签<s:properties>不给value属性时 默认取ValueStack取栈顶元素

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/195511.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • linux做代理服务器_linux搭建http下载服务器

    linux做代理服务器_linux搭建http下载服务器介绍了在linux上安装Tor内核,实现SOCK5代理服务,用于网络匿名。

  • Lunix历史及如何学习

    Lunix历史及如何学习1.Lunix是什么1.1Lunix是操作系统还是应用程序Lunix是一套操作系统,它提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构,这个架构是沿袭Unix良好的传统来的,所以相当的稳定而功能强大!Lunix具有核心和系统呼叫两层。Torvalds先生在1991年写出Linux核心的时候,其实该核心仅能『驱动386所有的硬件』而已,所…

  • 请求头 content-type_详解中台

    请求头 content-type_详解中台敬请关注博客,后期不断更新优质博文,谢谢这里讲解Content-Type的可用值,以及在spring MVC中如何使用它们来映射请求信息。1. Content-Type MediaType,即是InternetMediaType,互联网媒体类型;也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息。 例如:Content-…

  • C# Winform 窗体美化(目录)

    C# Winform 窗体美化(目录)最近在看C#Winform的窗体美化,发现一些很有用的美化皮肤库,学习过后也把一些资料整理一下。一、IrisSkin换肤库(IrisSkin4)二、LayeredSkin界面库(LayeredSkinDemo)三、不规则窗体(GoldFishProject,TransparentForm)四、镂空窗体(HollowForm)五、鼠标穿透(MousePenetration)

  • Win10运行PS很卡,分享几种解决Win10用PS卡顿提速设置方法

    Win10运行PS很卡,分享几种解决Win10用PS卡顿提速设置方法转载自品略图书馆http://www.pinlue.com/article/2020/04/0117/3410102560823.html最近升级了Win10系统,安装了PS软件准备工作,但是命使用中发现PS很卡,卡顿问题比较明显,极度的影响使用,那么如何解决呢?下面小编整理了解决方法,相信通过以下的设置之后,PS卡顿问题可以解决。与自定义配置是有很大关系的。特别是一些新功能的加入,在一些低配置电脑上往往会有事倍功半的“奇效”。如果你的PS用起来很卡,不妨赶快检查以下几个选项,可以瞬间提速1..

  • Vue substring截取字符串报错

    Vue substring截取字符串报错这是我查出来的订单信息对象,当我只需要显示用户电话的前三位和后四位时,就需要对订单进行截取。可是当我这样截取之后,效果是出来了,只是控制台依然报错;原因:因为数据是异步加载的,当数据还没出来的时候,数据是空的,所以会报错解决办法:这是我一开始用来保存查出来的数据对象。但是这样依然会报错。我们只需要把这个对象需要截取的那个属性一开始赋值为空,这样就不会报错了。…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号