ActionContext是Action的上下文,Struts2自动在其中保存了一些在Action执行过程中所需的对象,比如session, parameters, locale等。Struts2会根据每个执行HTTP请求的线程来创建对应的ActionContext,即一个线程有一个唯一的ActionContext。因此,使用者可以使用静态方法ActionContext.getContext()来获取当前线程的ActionContext,也正是由于这个原因,使用者不用去操心让Action是线程安全的。
在 Action 中访问 WEB 资源 什么是 WEB 资源 ? HttpServletRequest, HttpSession, ServletContext 等原生的 Servlet API。 为
同时,Action中获取Application,Session,request的方法(在此只列出一种)更多方法
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154305.html原文链接:https://javaforall.cn
北京,雾霾天气阻止了今天的马拉松之行,蜗居一天。为一个问题“struts2如何保证ActionContext每次取的都是本次请求所对应的实例?”,给一个网友解释了半天。
1. ActionContext 在Struts2开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在Action里直接获取请求(Request)或会话(Session)的一些信息,甚至需要直接对JavaServlet Http的请求(HttpServletRequest),响应(HttpServletResponse)操作. 我们需要在Action中取得request请求参数"username"的值: ActionContext context = ActionContext.getC
通过 Aware 接口获取 WEB 资源 在上一节中介绍了用ActionContext来获取WEB资源。http://blog.csdn.net/qwdafedv/article/details/52403245 其中ActionContextTest.java类为: package com.qbz.struts2_03; import java.util.Map; import org.apache.struts2.ServletActionContext; import org.apache.str
在之前的学习中,我们知道struts2可以将表单中的数据自动设置到处理类的属性上,还有类型转换等其他功能。那么struts2是怎样做这件事情的呢?
Action类访问Servlet API 本人独立博客https://chenjiabing666.github.io Struts2并未直接和Servlet API耦合,这是Struts2的一个改良之处。但是对于web应用控制器而言,不访问Servlet API是不可能,因此下面我们介绍三种方式访问Servlet API ActionContext 使用这个可以获取Servlet中HttpServletRequest,HttpSession,ServletContext 其中的方法 static Acti
公司项目比较坑爹,毕竟涉及到前后端分离、多部门协作,很多时候系统出问题,哪怕已经很清楚了,协作方依然要我们把API调用入参、响应等记录下来,而且是全记录,不光是异常调用,待调查结束后这些日志又需要卸下来。频繁在代码中加日志,去日志,一次两次还行,搞多了,不胜其烦,作为技术人,一定得偷懒。有鉴于此,做了个日志记录操作过滤器,需要时候特性标记,不要时候直接去掉。
软件产品常常会出现这样的情况:产品性能因某些无法预料的瓶颈而受到干扰,导致程序的处理效率降低,性能得不到充分的发挥。如何快速有效地找到软件产品的性能瓶颈,则是我们感兴趣的内容之一。 在本文中,我将解释我如何清理和替换重复、 混乱遍布许多方法在应用程序中的代码使用ASP.NET Web API 的筛选器来完成ASP.NET Web API 接口执行时间监控。我们的项目中有如下的需求:我的工作相关的项目 (使用 ASP.NET Web API 框架) 要求记录下服务接口的调用执行时间以及请求延迟、 故障率每秒的
1、直接通过action中行设置相应的get和set方法 this.setName("张三"); this.setPassword("123"); 2、通过ActionContext完成值得传递 ActionContext.getContext().put("aa", 12345); ActionContext.getContext().put("bb", "abc"); 3、可以通过Servlet的API传值 ServletA
在Struts2.0中,Action已经与Servlet API完全分离,这使得Struts2.0的Action具有了更加灵活和低耦合的特性,与Struts1.0相比较而言是个巨大的进步。虽然Struts2.0的Action已经与Servlet API完全分离,但我们在实现业务逻辑处理时经常需要访问Servlet中的对象,如Session、Application等。Struts2.0 提供了一个名字为ActionContext的类,在Action中可以通过该类获得Servlet API。
前言 前面已经把struts2讲内容说了一半了,我写的很详细,希望对博友们有帮助。 一、OGNL表达式语言概述 1.1、OGNL表达式简介 百度上是这样说: OGNL是Object-Gra
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。
友情提示:本文略长略复杂,但是有配套的视频教程,对视频感兴趣的小伙伴戳这里:TienChin 项目配套视频来啦。 在前面的文章中,松哥和大家聊了分布式事务框架 seata 的 at 模式,然后有小伙伴评论说 seata 的 tcc 模式不支持 Spring Boot: 这。。。必然是支持的呀! 我一直觉得网上讲分布式事务的理论很多,案例代码很少,所以咱们今天就整一个例子,一起来把这个捋一捋。 1. 什么是 TCC 模式 相比于上篇文章所聊的 AT 模式,TCC(Try-Confirm-Cancel) 模式
在之前的学习中struts2已经可以处理大部分问题了。但是如果要将用户登录数据存入session中,可以有两种方式开存入ServletAPI。
l get(key):相当于HttpServletRequest的getAttribute(String name)方法;
模拟框架到目前为止都假定Action方法是没有参数的,我们知道MVC框架对Action方法的参数并没有作限制,它可以包含任意数量和类型的参数。一旦将“零参数”的假设去除,ControllerActionInvoker针对Action方法的执行就变得没那么简单了,因为在执行目标方法之前需要绑定所有的参数。MVC框架采用一种叫做“模型绑定(Model Binding)”的机制来绑定目标Action方法的输出参数,这可以算是MVC框架针对请求执行流程中最为复杂的一个环节,为了让读者朋友们对模型绑定的设计和实现原理有一个大致的了解,模拟框架提供一个极简版本的实现。
接着上次博客的内容我继续分享我所学到的知识,和自己在学习过程中所遇到问题以及解决方案。当然,如果读者发现任何问题均可以在下方评论告知我,先谢,==老被管理员移除,再来一遍==! 在 Action 中访问 WEB 资源 web 资源 所谓的 WEB 资源是指 HttpServletRequest、HttpServletResponse、ServletContext 等原生的 API,作为 B/S 应用开发的 Controller 必须可以访问 WEB 资源,比如向域对象中读写属性等操作。 如何访问 WEB 资
数据验证,全局数据验证与单元测试 目录 一、模型状态 - ModelState 二、数据注解 - Data Annotations 三、自定义数据注解 四、全局数据验证 五、单元测试 一、模型状态 - ModelState 我理解的ModelState是微软在ASP.NET MVC中提出的一种新机制,它主要实现以下几个功能: 1. 保存客户端传过来的数据,如果验证不通过,把数据返回到客户端,这样可以保存用户输入,不需要重新输入。 2. 验证数据,以及保存数据对应的错误信息。 3. 微软的一种
1.结果页面 1.全局结果页面 当一些方法的返回值一样的时候并且需要跳转的页面也一样的时候就可以使用全局结果页面。 <package name="struts" extends="struts-default" namespace="/"> <global-results> <result name="done">index.jsp</result> </global-results> <action name="hello" class="demo01.Hello
注:当标签<s:properties>不给value属性时 默认取ValueStack取栈顶元素
本文主要介绍在请求WebApi时,监控Action执行的时间,及Action传递的参数值,以及Http请求头信息。采用log4net记录监控日志,通过日志记录的时间方便我们定位哪一个Action执行的时间过长,进而采取优化的手段。
如图:现在你要在控制器里面判断,账号名称、密码、邮箱不能为空,并且名称和密码不超过16位。
《200行代码,7个对象——让你了解ASP.NET Core框架的本质》让很多读者对ASP.NET Core管道有了真实的了解。在过去很长一段时间中,有很多人私信给我:能否按照相同的方式分析一下MVC框架的设计与实现原理,希望这篇文章能够满足你们的需求。在对本章内容展开介绍之前,顺便作一下广告:《ASP.NET Core 3框架揭秘》已经开始销售,现时5折优惠还有最后4天,有兴趣的从这里入群购买。
OGNL是Object-GraphNavigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。
实现思路 1.标识控制器有拦截特性; 2.控制器拦截处理; 代码实现 1.标识控制器有拦截特性,代码: [MyFilter] public string PostFindUser([FromBody]Userinfo user) { return string.Format("{0}是好人~", user.Name); } 2.控制器拦截处理,代码: public class MyFilter : ActionFilterAttribute { public override void O
我以前写过《DTcms4/5中使用HttpModule将http访问301重定向到https》,也写过《使用Certify来自动申请并配置Let’s Encrypt免费SSL证书到IIS8》都提到了如何将IIS的http访问强制为https,如果你现在搜索.net强制https访问,或者iis强制https等关键词,会看到很多错误的指导。
Struts2将OGNL上下文设置为Struts2中的ActionContext(内部使用的仍然是OgnlContext),并将值栈设为OGNL的根对象。 我们知道,OGNL上下文中的根对象可以直接访问,不需要使用任何特殊的“标记”,而引用上下文中的其他对象则需要使用“#”来标记。由于值栈是上下文中的根对象,因此可以直接访问。那么对于值栈中的对象该如何访问呢?Struts2提供了一个特殊的OGNLPropertyAccessor,它可以自动查找值栈内的所有对象(从栈顶到栈底),直接找到一个具有你所查找的属性的对象,找不到,就报错。也就是说,对于值栈中的任何对象都可以直接访问,而不需要使用“#”。 假设值栈中有两个对象:student和employee,两个对象都有name属性,student有学号属性number,而employee有薪水属性salary。employee先入栈;而student后入栈,位于栈顶,那么对于表达式name,访问的就是student的name属性,因为student对象位于栈顶;表达式salary,访问的就是employee的salary属性。正如你所见,访问值栈中的对象属性或方法,无须指明对象,也不用“#”,就好像值栈中的对象都是OGNL上下文中的根对象一样。这就是Struts2在OGNL基础上做出的改进。
前几天有人在我的《ASP.NET Core框架揭秘》读者群跟我留言说:“我最近在看ASP.NET Core MVC的源代码,发现整个系统太复杂,涉及的东西太多,完全找不到方向,你能不能按照《200行代码,7个对象——让你了解ASP.NET Core框架的本质》这篇文章思路剖析一下MVC框架”。对于ASP.NET Core MVC框架的涉及和实现,说难也难,毕竟一个Model Binding就够很多人啃很久,其实说简单也简单,因为整个流程是很清晰的。ASP.NET Core MVC支持基于Controller和Page的两种编程模式,虽然编程方式看起来不太一样,底层针对请求的处理流程其实是一致的。接下来,我同样使用简单的代码构建一个Mini版的MVC框架,让大家了解一下ASP.NET Core MVC背后的总体设计,以及针对请求的处理流程。[源代码从这里下载]。
这个是session在ActionContext对象中的格式 是个map 这样的话 我们就直接搜索request
使用 Struct2 框架的拦截器 实现权限管理功 一、项目基本介绍 二、项目环境搭建 三、项目结构搭建 3.1 前端 + 后端结构 3.2 前端主要页面 3.3 后端核心逻辑实现 (使用 struct2 拦截功能) 项目已经更新至:PowerManager 一、项目基本介绍 项目系统拥有三种用户类型 普通用户 (只具备信息查询的功能) 系统管理员 (只具备查询,添加,和修改的功能) 系统维护员 (具备所有功能,增删改查) 一些关键信息要隐藏 项目基本逻辑 具备最基本的登录功能 具备数据展示功能 项目侧
《200行代码,7个对象——让你了解ASP.NET Core框架的本质》让很多读者对ASP.NET Core管道有了真实的了解。在过去很长一段时间中,有很多人私信给我:能否按照相同的方式分析一下MVC框架的设计与实现原理,希望这篇文章能够满足你们的需求。在对本章内容展开介绍之前,顺便作一下广告:《ASP.NET Core 3框架揭秘》已经开始销售,限时5折优惠还有最后3天,有兴趣可以扫描右边二维码或者从这里入群购买。
1.模型验证 使用特性约束模型属性 可以使用System.ComponentModel.DataAnnotations提供的特性来限制模型。 例如,Required特性表示字段值不能为空,Range特性限制数值类型的范围。 对实体类使用特性后,可以使用ModelState.IsValid来判断验证是否通过。 例: 实体: public class DataModel { public int Id { get; set; } public string Field1Nam
最近在整理优化.net代码时,发现几个很不友好的处理现象:登录判断、权限认证、日志记录、异常处理等通用操作,在项目中的action中到处都是。在代码优化上,这一点是很重要着力点。这时.net中的过滤器、拦截器(Filter)就派上用场了。现在根据这几天的实际工作,对其做了一个简单的梳理,分享出来,以供大家参考交流,如有写的不妥之处,多多指出,多多交流。
在有些项目需求上或许需要根据模板生产静态页面,那么你一样可以用Razor语法去直接解析你的页面从而把解析的页面生成静态页,这样的使用场景很多,不限于生成静态页面,视图引擎为我们提供了模型到视图的代码或文本生成的能力。
得到了There is no read method for container的错误
为了避免与Servlet API耦合在一起,方便Action类做单元测试,Struts 2对HttpServletRequest、HttpSession和ServletContext进行了封装,构造了三个Map对象来替代这三种对象,在Action中,直接使用HttpServletRequest、HttpSession和ServletContext对应的Map对象来保存和读取数据。 (一)通过ActionContext来获取request、session和application对象的LoginAction1
ognl: object graph navigation language 对象导航图语言
要了解Struts2与OGNL表达式的关系,我们必须先搞清楚以下三个概念: 1、 ActionContext它是Action运行的上下文环境,Action的多项设置都存放在次,我们每一次Action
在asp.net mvc 中 webapi 和 mvc 处理消息是两个不同的管道,Asp.net mvc 和 webapi 为我们提供的 ActionFilterAttribute 拦截器,通过 重写 OnActionExecutingAsync,来 拦截action的请求消息,当执行OnActionExecutingAsync完成以后才真正进入请求的action中,action运行完后又把控制权给了 OnActionExecutedAsync ,这个管道机制可以使我们用它来轻松实现 权限认证、日志记录 ,跨域以及很多需要对全局或者部分请求做手脚的的功能。
要理解为什么需要ThreadLocal就不得不从线程安全问题说起。高并发是很多领域都会遇到的非常棘手的问题,其最核心的问题在于如何平衡高性能和数据一致性。当我们说某个类是线程安全的时候,也就意味着该类在多线程环境下的状态保持一致性。
我们新建的WebApi集成了微软自带的HelpPage,即Api的文档,在我们编写好接口之后会自动生成一份文档
1:ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-WebApi与Unity注入 使用Unity是为了使用我们后台的BLL和DAL层
1:在Action中如何获得作用域(request,session,application)对象; 取得Map(键值对映射集)类型的requet,session,application; 对数据操
我们知道,在开发struts2应用开发的时候我们要在web.xml进行配置拦截器org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter(在一些老版的一般配置org.apache.struts2.dispatcher.FilterDispatcher),不知道大家刚开始学的时候有没有这个疑问,为什么通过这个拦截器我们就可以拦截到我们提交的请求,并且一些配置文件就可以得到加载呢?不管你有没有,反正我是有。我想这个问题的答案,我们
前言: 回顾上一节,我们利用webapi简单的登录并进行了同域访问与跨域访问来获得Token,您可以跳转到上一节下载代码来一起动手。 继续上一篇的文章,我们接下来演示利用拿到的Token来访问接口,管理接口,利用系统权限管理接口,对每个接口进行授权(管理接口为选读部分,因为你需要阅读最开始权限管理部分(18-27节),才能阅读这部分) 开发环境: VS2015+无数据库(模拟数据) 样例代码下载 访问密码 8ca3 知识点: WebApi权限验证 应用到实际中来 调试 开始: 1.过滤器验证 我
本文介绍了Struts2的拦截机制,包括拦截器的定义、拦截器的分类、拦截器的配置和日志拦截器的用法。通过实例演示了如何使用拦截器进行日志记录和权限控制,并总结了拦截器在项目中的使用场景和注意事项。
Struts2_值栈 借用在前面演示 hello world 的时候的例子。 在show.jsp 页面那些字段的值到底是怎么取得呢?现在在show.jsp中输出request <%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html; charset=UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//E
领取专属 10元无门槛券
手把手带您无忧上云