已经折腾我七八个小时了,没有心情往下接着学了! ....DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) at org.apache.struts2.interceptor.FileUploadInterceptor.intercept...:61) at java.lang.Thread.run(Unknown Source) 大致意思是:表单参数类型和Action中模型驱动的参数类型不一致。...我的提交表单页面如下: ?...是地址栏的birthday值得格式错误,可是是现在想不出格式“2018-10-10”错在哪,大量百度和谷歌才知道,无意中发现,英文日期格式:10/10/1988,中文日期格式:2018-10-10,于是去查看浏览器的语言配置
图2 ognl.OgnlContext#get 3.2.3.3 AST树 在compile中会调用关键函数Ognl.parseExpression解析给定的OGNL表达式并返回一个表达式的树形表示,该表示可以被...图10 OgnlRuntime.class 总结一下上述内容:在Struts2中,如果传入的表达式类型为ASTStaticMethod,将调用OgnlRuntime的callStaticMethod方法...在创建对象new Object时,实质上是调用 ASTCtor 类型的结构表达式。...,将文件名设置为upload.png,再次调用了我们自己传递的uploadFileName,将文件名设置为了我们自定义的值,最终造成了目录穿越,如图37。...我们不对任何人因使用本仓库的信息而导致的非法活动承担责任。用户应遵守适用的法律法规,并在进行安全研究时恪守道德和法律规定。请谨慎使用这些漏洞信息,并确保在任何测试和研究活动中遵循法律和道德准则。
Java API的一个很小子集,这样我们可以在业务逻辑部分使用功能强大的Java语言进行程序设计。...工作原理 Suruts2的工作原理可以用下面这张图来描述,下面我们分步骤介绍一下每一步的核心内容 ?...的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper...7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。...Struts2和struts1的比较 struts2相对于struts1来说简单了很多,并且功能强大了很多,我们可以从几个方面来看: 从体系结构来看:struts2大量使用拦截器来出来请求,从而允许与业务逻辑控制器
ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类. 如上文的struts.xml配置*/ <?...ActionProxy创建一个ActionInvocation的实例,同时ActionInvocation通过代理模式调用Action。...但在调用之前ActionInvocation会根据配置加载Action相关的所有Interceptor。...拦截器就是AOP(Aspect-Oriented Programming)的一种实现。(AOP是指用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。)...struts-default.xml文件摘取的内容:*/ < interceptor name ="alias" class ="com.opensymphony.xwork2.interceptor.AliasInterceptor
Java程序员面试题集(86-115) 摘要:下面的内容包括Struts 2和Hibernate的常见面试题,虽然Struts 2在2013年6月曝出高危漏洞后已经显得江河日下,而Spring MVC...的异军突起更加加速了Struts 2的陨落,但面试中仍然有可能被问及和此框架相关的内容,毕竟Struts 2曾经被阿里巴巴、京东以及政府企业门户网站广泛采用。...其中,模型代表了应用程序的数据和处理这些数据的规则,同时还可以为视图提供的查询保存相关的状态,通常由JavaBean来实现,模型的代码写一次就可以被多个视图重用;视图用来组织模型的内容,它从模型中获得数据...destory()方法将在拦截器被销毁之前被调用, 它在拦截器的生命周期内也只被调用一次。 项目中使用过的有权限拦截器、执行时间拦截器、令牌拦截器等。 96、如何在Struts2中使用Ajax功能?...)、多编程语言支持(能够同时使用多种语言开发吗)、文档的质量(常见的用例和问题都在文档中有体现吗)、出版的图书(有没有行业专家使用了它并分享了自己的使用经验)、REST支持(能按HTTP协议的设计宗旨使用该协议吗
2.2、动作类和实体模型分开 问题: 由于我们没有初始化user对象,默认为null,一调用setUser方法,就空指针异常了。但是框架却封装进去值了。...String/String[]————填充模型(set方法)————>POJO(plain old java object) pojo中有java的数据类型。...显示错误提示:借助Struts2的标签库。 回显数据:使用struts2的标签库生成表单。(建议使用) 错误信息中文提示:使用的是struts2的国际化。...国家代码:有iso规定的 当文件只有主要文件名.properties时,表明它是默认资源包。浏览器会根据不同的语言环境找对应语言环境的资源包,当没有时,找默认的。...每个资源包的内容都由相同的key和对应语言环境的value组成。
ServletDownload.java : ? ? 重启tomcat服务器,即可实现对压缩包和对图片的下载。 ---- 2、struts如何实现文件的上传和下载?...)方法名去掉get 一致 Struts2下载文件实现的说明 contentType 内容类型,和互联网MIME标准中的规定类型一致,例如text/plain代表纯文本,text/xml表示XML,image...struts.xml ? ? 3、批量下载 使用多线程并发调用单个文件的下载方法即可。 4、断点续传 有待研究。。。。。。。。。。...但是如果该文件的文件名为中文文件名,在某些早起的浏览器上就会导致下载失败;如果使用最新的Firefox、Chrome、Opera、Safari则都可以正常下载文件名为中文的文件了。...SpringMVC提供了一个ResponseEntity类型,使用它可以很方便地定义返回的HttpHeaders和HttpStatus。以下代码演示文件的下载功能: ?
Struts2就是apache和OpenSymphony组织合并开发出来。 里面包含了WebWork2的核心及Struts的一些特性和功能。除此之外,和Struts1没有任何关系了。...九、Struts2的配置文件 1、加载时机: 当应用被tomcat加载的时候,struts2的配置文件就已经被加载过了。...2.4、动作的访问 a.使用通配符: ? 升级版: ? 优先级:绝对匹配优先。使用通配符的按照在配置文件中的先后顺序进行匹配的。 b.动态方法调用 ? ? ?...十二、结果类型视图 ( 逻辑结果视图 ) 前奏:该部分内容指的就是struts配置文件中的result元素的使用 1、result元素 作用: 为动作指定结果视图 属性: name:逻辑视图的名称,对应着动作方法的返回值...4、自定义结果类型 通过前面的内容,我们看出,其实结果类型就是一个类,这些类都实现了com.opensymphony.xwork2.Result接口。
国家代码:由iso规定的。 当文件只有 主要文件名.properties 时,表明它是 默认资源包。浏览器会根据不同的语言环境找对应语言环境的资源包,当没有找到时,找默认的。 ...每个资源包的内容都由 相同的key 和 对应语言环境的value 组成。 ...但是在没有写动作类和动作方法之前,不确定方法名叫什么。 解决办法:哪个动作方法需要使用拦截器,我就给它注入参数。 ?...配置文件struts.xml: ? 动作类: ? 运行结果:没有问题,就不上图啦! 5、文件下载:其实就是一种结果类型(Stream) 动作类: ? 配置文件: ?...运行结果:没有问题,就不上图啦! 问题:文件名不能在配置文件中写死,需要根据实际情况获取。 解决办法: 动作类: 在下面的讲解中。
而在 Web 开发中,使用应用层协议 HTTP,通过在请求头中设置传输的内容类型 Content-Type 为 multipart/form-data; boundary=流分隔符值 来上传文件,这个流分隔符用来区分一个文件上传的开始和结束...1.2 文件下载 通过在响应消息头中设置 Content-Disposition 和 Content-Type 使得浏览器无法使用某种方式或者激活某个程序来处理 MIME 类型的文件,来让浏览器提示是否保存文件...这个地方困扰的不止我一个人,这个 BUG 和 SpringMVC 无关,和 Tomcat 的一个属性有关系,请看下图,网上有人说 Tomcat7 就没有这个问题,但这不是推荐的解决问题方式。 ?...; return "fileupload"; } SpringMVC 中使用 MultipartFile 对象来接收上传的文件,通过这个对象可以得到文件的文件名和文件类型,通过 transferTo...文件下载效果图.gif 2.2 文件下载 下载页面我使用了 Jquery 动态生成下载列表对 url 提前做了编码处理,防止文件名中 # 号等特殊字符的干扰,并对显示的文件名做了去除 UUID 值的处理
答: Struts2的配置文件的加载时机:当应用被tomcat加载的时候,struts2的配置文件就已经被加载过了。 ...只有没有元素的包,才能被定义为抽象包。 namespace属性:名称空间。...示例: 张三 2、动作类和模型分开的动态封装请求参数,set和get方法是怎么调用的? ...答: 主要文件名_语言代码_国家代码.properties 主要文件名.properties(默认资源包) 2、Struts2中全局范围的资源包、包范围的资源包和动作类范围的资源包...表达式时使用,例如:在文件下载时,文件名编码:struts.xml --> ${@java.net.URLEncoder.encode(filename)} 3.3、% 在struts2中,有些标签的
c、在应用的构建路径的顶端(WEB-INF\classes),建立struts2的配置文件。默认文件名struts.xml ?...第一个Struts2的入门案例 a、建立一个hello.jsp的页面 ? b、修改struts2的默认配置文件:struts.xml,增加以下内容 ? c、建立动作类和动作方法 ?...= false 是否允许动态方法调用 struts.multipart.maxSize=2097152 文件上传时的大小限制 Struts.xml可以有多个 主配置文件叫struts.xml,假设单独模块配置文件叫...实现了com.opensymphony.xwork2.Action 定义了 表单域校验、错误信息设置和获得国际化信息相关一些方法 动作类的生命周期 动作类每次访问都会重新被实例化,是线程安全的。...动作方法:动作类中的定义的处理业务有关的方法 特点(重要):public 返回值类型是String 方法没有任何的参数 动作方法通配符的匹配 ? 动作方法的动态调用 ?
什么是拦截器 拦截器Interceptor…..拦截器是Struts的概念,它与过滤器是类似的…可以近似于看作是过滤器 为什么我们要使用拦截器 前面在介绍Struts的时候已经讲解过了,Struts为我们实现了很多的功能...这里写图片描述 从效果图我们可以看出,他们的执行顺序是这样的: 当服务器开启的时候,会执行拦截器的init()方法 当访问Action时,Action实例被创建 创建完Action实例,会调用拦截器的interceptor...拿到Action具体的信息【成员变量、setter和getter】 执行拦截器具体的内容,根据Action具体的信息,把web端的数据封装到Action上 最后在execute()就可以得到封装后的数据了...放在隐藏域中…一起带过去给Servlet Servlet判断用户有没有带token值过来,判断token的值是否和Session的相匹配 如果用户是第一次提交的话,那么就允许用户的请求,接着就把保存在Session...,但当我们如果提交之后,再刷新页面,那么表单的数据就会重复提交…我们使用Struts2我们提供的防止表单重复提交的功能把!
除此之外,和Struts1没有任何关系了。 六、搭建开发环境 Struts2的下载和安装 开发包目录结构 ?...struts2的体系结构图如下: ? 九、Struts2的配置文件的加载时机和加载顺序 加载时机:当应用被tomcat加载的时候,struts2的配置文件就已经被加载过了。 ...只有没有元素的包,才能被定义为抽象包。 namespace属性:名称空间。...* 原始的 老的 java 对象 * Plain Old Java Object * POJO类是指没有实现任何接口以及除了Object类以外,没有继承任何父类...> 3、自定义结果类型及其配置 通过前面的内容,我们看出,其实结果类型就是一个类: 这些类都实现了com.opensymphony.xwork2.Result接口。
这里写图片描述 ---- 小总结 如果我们使用到了Struts2一些特用的功能,我们就需要继承ActionSupport 如果我们没用到Struts2的特殊功能,只要平凡写一个Java类行了。...但是呢,日期类型只支持是yyyy-MM-dd这种格式的,因为我们在上个例子中直接使用的是Struts支持的格式,因此没有报错…本篇博文就是讲解Struts如何对日期类型的格式更好地支持 当我们使用的是yyyyMMdd...xwork-conversion.properties的文件 配置文件的内容:需要转换的类类型=转换器类的全名java.util.Date=qwer.MyConvter ---- 局部转换器类 步骤:...这里写图片描述 文件上传和下载 在讲解开山篇的时候就已经说了,Struts2框架封装了文件上传的功能……..本博文主要讲解怎么使用Struts框架来完成文件上传和下载 回顾以前的文件上传 首先,我们先来回顾一下以前...对象、上传文件名称、上传文件的类型 package fileupload; import java.io.File; /** * Created by ozc on 2017/5/2. */ public
一个「专注于前端开发技术/Rust及AI应用知识分享」的Coder 前言 今天呢,和大家聊点耳熟能详的东西。「文件上传」。 讲到这里,大家不要嗤之以鼻,认为这不是分分钟就用组件库实现的吗?...所以,我们就选用react-dropzone作为我们的拖拽解决方案。 拖拽组件 既然,材料和食谱都已经确定,那我们就需要烹饪我们的膳食了。...按照SPA的尿性,那岂不是需要在一个路由的组件的根部。没错,它就是这样的。 组件挂载位置 我们先把内部代码扔下,我们先来讲讲FullScreenDropZone是从哪里被调用的。...查看react-dropzone的使用方式,其实我们还缺少input的处理。用于接收getInputProps 但是,在上面代码中我们丝毫没看到关于input和getInputProps的处理。...结合,在第二节中我们使用react-dropzone处理文件拖拽时,也需要一个接收返回的getInputProps属性。
默认的struts-default有什么作用 struts-default包是由struts内置的,它定义了struts2内部的众多拦截器和Result类型,而Struts2很多核心的功能都是通过这些内置的拦截器实现...,当包继承了struts-default包才能使用struts2为我们提供的这些功能。...值栈 ValueStack的生命周期为Action的生命周期,保存在request域中, 每个action都有与之对应的值栈,action对象默认保存在栈顶 使用OGNL访问值栈中的内容不需要添加# 而访问其他域中的需要添加...拦截器 每个拦截器都是实现了Interceptor接口的java类 Init() 在这个拦截器初始化的时候被调用 intercept() 当拦截器起作用的时候调用 destroy() 在拦截器被销毁的时候调用...文件上传 file域 form表单enctype=multipart/form-data 提交方式为post action接受文件对象为表单中的name, 文件类型为name+ContentType 文件名字为
今天的内容全都是重点 一、Struts2中的拦截器(特别重要) 1、拦截器的重要性 Struts2中的很多功能都是由拦截器完成的。...但是在没有写动作类和动作方法之前,不确定方法名叫什么。 解决办法:我们需要在使用拦截器的时候给它注入参数。 ? 4.3、拦截器类视图(全): ?...2、OGNL的功能 前提:OGNL是struts2整合的一个开源项目,所以在struts2中,要想使用OGNL表达式,必须使用Struts2标签库 2.1、支持普通方法的调用 ? ?...contextMap中存放的主要内容 Key Value 说明 value stack (root) java.util.List 没有root这个key。它是一个list。...六、Struts2对EL的改变 1、Struts2中使用EL的问题: 前提: 我们应该知道,如果我们没有往值栈(根)中放入数据的话,那么我们的动作类默认是在值栈的栈顶。 ? ? ? ?
file upload Multipart parser Description s2-046这个漏洞其实和s2-045漏洞触发的本质是一样的,都使用了同一个异常处理方法,且异常信息中含有ognl表达式导致命令执行...,而不同的则是触发异常的点不同而已,s2-045的异常触发是由于content-type中存在无法解析的内容,而s2-046则由content-length过大和上传文件名不合规造成,接下来我们分别对这两种情况进行分析...Vulnerability Analysis 首先我们再回顾一下关于s2-045的分析,MultiPartRequestWrapper.java中使用了解析函数对上传请求进行了解析,而JakartaMultiPartRequest.java...by default struts.multipart.saveDir= struts.multipart.maxSize=2097152 分析至此异常的触发原理已明了,那么根据我们最早的结论,异常中必须得含有可控的内容才能传入...null,当文件名中包含空字符时就会抛出异常,异常信息中会带入filename字段,而JakartaStreamMultiPartRequest.java的parse函数中的buildErrorMessage
可能你会说java编译的class不是说不可以加密吗?...Find命令 find命令并不能支持Java反编译,但是find命令可以非常方便的搜索经过编译后的二进制文件中的内容,所以有的时候使用find命令通常是最简单实用的,直接解压jar包然后使用find命令搜索...借助IDEA的方法调用链搜索功能就可以很轻松的找出方法的调用链和触发点。 选择类或者方法名→右键→Find Useages或者使用快捷键⌥F7 ? 四、Java Web基础 1....Filter和Servlet一样是Java Web中最为核心的部分,使用Servlet和Filter可以实现后端接口开发和权限控制,当然使用Filter机制也可以实现MVC框架,Struts2实现机制就是使用的...修复的JDK版本所有跟文件名相关的操作都调用了isInvalid方法检测,防止空字节截断。 ?
领取专属 10元无门槛券
手把手带您无忧上云