Struts2的知识点小总结
strust2是 struts1和webwork的结合 (本质相当于servlet)
核心:拦截器 interceptor
action
ognl和valuestack
使用struts的准备工作:
1.导入相对应的jar包 (struts2中的lib下的jar包)
2.在web.xml内进行配置filter(只有配置了filter才可以使用struts2框架)
进行配置 StrutsPrepareAndExecuteFilter
3.配置我们的struts.xml文件 (放于根目录下) (可以在struts的zip包中 抽出出来struts.xml文件 然后自己进行修改)
4.创建相应的action进行操作
流程:当我们发送请求的时候,会被我们在web.xml中配置的拦截器进行拦截 会根据请求的路径在struts.xml中进行判断,在根据所对应的method执行性对应的方法.
struts.xml配置信息
<package name=" " namespace="" extends="struts-default">
<action name=" " class=" " method=" ">
<result name=" ".>返回值 //当我们在action中返回一个字符串是 会根据返回的值进行匹配 进行页面跳转
配置剖析:
package:
name : 包名, 必须唯一
namespace: 主要去action中的name属性进行联合,来确定一个action的访问路径
extend:指定继承于哪个包,一般都是 struts-default
abstruct:代表当前包是一个抽象包
action:
name: 与package中的namespace进行联合
class:指示当前的action类
method:指示当前类中的指定执行方法的执行方案
result:
name:与action中的返回值进行匹配 来确定要跳转的路径
type:指定我们当前的要跳转的跳转方式
result的name属性默认值是success,
默认的跳转方式是请求转发 dispatcher
定义常量
在struts.xml文件中进行配置
<constant name=" " value=" ">
注:后加载的配置常量会将先加载的配置常量进行覆盖
ACTION的创建
1.pojo
2.实现action
3.继承actionsupport //具有丰富的功能,不过耦合性比较高
STRUTS2的封装数据
1.属性驱动
a.直接在action类中提供与请求参数匹配属性,提供get/set方法
b.在action类中创建一个javaBean,对其提供get/set ,在请求时页面上要进行修改,要在当前action中使用ognl表达式
2.模型驱动 //缺点:只能对一个模型进行实例化
步骤1.action实现modelDriven<类名> 接口
步骤2.实例化模型(new )
步骤3.重写getModel方法,并将我们实例的对象进行返回
struts2中获取servletAPI
1.servletActionContext进行获取
2.采用注入方式
ServletRequestAware, 实现这个接口可以获取HttpServletRequest
ServletResponseAware ,实现这个接口可以获取HttpServletResponse
ServletContextAware 实现这个接口可以获取ServletContext
OGNL表达式
OGNL作用:
支持对象的操作,调用对象的方法
支持静态成员访问
支持赋值操作与表达串联
访问OGNL上下文,访问ActionContext
操作集合对象
三要素:
表达式
ognlContext上下文 new OgnlContext()
root根
获取数据
在root根中获取数据时 ,ognl表达式前不需要加 #, 如果不是在root根中进行获取数据,则需要添加 #
使用ognl
在struts2中可以使用ognl+valueStack可以实现在页面上获取数据
在页面中进行配置
<%@ taglib prefix="s" uri=" /struts-tags" %>
<s:property value=”表达式”>来使用
valueStack
valuestack的使用的主要目的是为了将action中产生的数据传递到页面上
struts2中的action是多例的,每一次请求都会创建一个action,一个valuestack对应一个action,valuesta贯穿整个action的生命周期
struts2框架将valuestack保存在 request中
主要由两部分组成:
CompoundRoot: 是一个list 主要存储的是action的相关数据
Map<String,Object> context: 是一个map集合 主要引用web开发中的相关信息
获取valuestack中的数据
根据ognl表达式进行获取数据 如果前面添加# 在context中进行查找,如果没有添加# ,代表在CompoundRoot中进行获取数据,也就是所说的root中
1.直接通过request对象进行获取 //因为valuestack存于request中
servletActionContext.getRequest().getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY)
2.使用actionContext进行获取
ActionContext.getContext().getValueStack();
ActionContext
是action的上下文,struts2框架使用actionContext进行保存action在执行过程中所需要的一些对象
Struts2会根据每一次的http请求来创建对应的ActionContext,它是与当前线程绑定的。
每一次请求,就是一个线程,对应着一个request,每一次请求,会创建一个Action,每一个action对应一个ActionContext.每一次请求也对应着一个valueStack.
request---ActionContext----Action-----ValueStaci它们都对应着一次请求(一个线程).
valueStack与ActionContext本质上是可以获取
存储数据
//主要向root中进行存储
1.手动存储
valueStack.set("key","value")
valueStack.push()
2.自动存储
3.声明成员变量 提供get方法 为了使用属性封装也提供set方法
获取数据
在标签中可以通过 value="key" 或 value="[index].top"
底层是栈. 先进后出
在action中的属性的get方法中 也可以将数据返回
使用模型驱动
在访问路径添加属性的赋值
使用el表达式也可以获取数据 struts2 对 request 里面的 getattribute方法进行了增强
//个人理解: 如果对数据提供了get/set方法 那么就相当于属性存储,要使用ognl进行获取时,应该使用 对象名.属性名 进行获取
传递数据 前提:继承了actionsupport
struts.xml文件中,用来传递数据 (在重定向中) <s:actionerror/> : 错误显示标签
在struts2中处理简单的信息 (字符串)
this.addActionError
this.addFieldError
this.addActionMessage
Interceptor拦截器
主要的作用是为了拦截 action 的操作,在action的执行前后进行一些我们想要做的操作
自定义拦截器
1.在配置文件中 声明 interceptor
2.创建一个类实现 interceptor接口
3.在action中使用interceptor ,action必须继承actionsupport
4.在action的配置中,引入自定义 interceptor
interceptor指定拦截action
Interceptor的放行: return invocation.invoke();
在我们的配置文件中的interceptor里面
<param name="includeMethods">方法名
<param name="encludeMethods">方法名
文件上传
上传前提
浏览器
表单提交方式 : method=post
表单中的组件: <input type="file">
表单中必须设置: enctype=" multipart/form-data"
服务器
导入 Commons-fileupload.jar包
上传操作
在上传的action中进行设置
private File upload; //上传的文件
private String uploadContextType;//文件上传的mimetype类型
private String uploadFileName; //上传文件的名称
操作:
得到该文件的绝对路径
String path=ServletActionContext.getServletContext().getRealPath("/upload");
创建服务端文件
File dest=new File(path,uploadFileName)
完成文件上传
FileUtils.copyFile(upload,dest)
可能会出现的问题:
上传文件过大
在struts.xml配置文件中进行配置
<constant name=" struts.multipart.maxSize" value="自定义的你要上传的文件的最大值">
Struts2的知识点小总结的更多相关文章
- 【转】HTML5的小知识点小集合
html5的小知识点小集合 html5知识 1. Doctype作用?标准模式与兼容模式各有什么区别? (1).<!DOCTYPE>声明位于位于HTML文档中的第一行,处于<h ...
- html5的小知识点小集合
html5的小知识点小集合 html5知识 1. Doctype作用?标准模式与兼容模式各有什么区别? (1).<!DOCTYPE>声明位于位于HTML文档中的第一行,处于< ...
- JavaWeb_(Struts2框架)Ognl小案例查询帖子
此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...
- 《JavaScript 正则表达式迷你书》知识点小抄本
介绍 这周开始学习老姚大佬的<JavaScript 正则表达式迷你书> , 然后习惯性的看完一遍后,整理一下知识点,便于以后自己重新复习. 我个人觉得:自己整理下来的资料,对于知识重现,效 ...
- 《JavaScript 模式》知识点小抄本(下)
介绍 最近开始给自己每周订个学习任务,学习结果反馈为一篇文章的输出,做好学习记录. 这一周(02.25-03.03)我定的目标是<JavaScript 模式>的第七章学习一遍,学习结果的反 ...
- 《JavaScript 模式》知识点小抄本(上)
介绍 最近开始给自己每周订个学习任务,学习结果反馈为一篇文章的输出,做好学习记录. 这一周(02.25-03.03)我定的目标是<JavaScript 模式>的第七章学习一遍,学习结果的反 ...
- salesforce零基础学习(一百一十二)项目中的零碎知识点小总结(四)
本篇参考: https://trailblazer.salesforce.com/issues_view?id=a1p4V0000003znDQAQ https://salesforce.stacke ...
- salesforce零基础学习(七十二)项目中的零碎知识点小总结(一)
项目终于告一段落,虽然比较苦逼,不过也学到了好多知识,总结一下,以后当作参考. 一.visualforce标签中使用html相关的属性使用 曾经看文档没有看得仔细,导致开发的时候走了一些弯路.还好得到 ...
- Struts2重要知识点总结
一.interceptor拦截器的使用 第一种情况(指定action使用该拦截器):struts.xml文件的配置: <interceptors> <interceptor name ...
随机推荐
- javaWeb学习总结(8)- JSP标签(6)
一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 ...
- php原生curl接口的请求
/** * @desc 接口请求处理 * @date 2017/5/19 11:39 * @param [$url请求的接口地址,$way为false为get请求,true为post请求] * @au ...
- MySQL数据目录更改及相关问题解决方案
步骤相关 1.停掉MySQL服务 service mysql stop 2.把旧的数据目录/var/lib/mysql备份到新的数据目录/data/mysql cp /var/lib/mysql /d ...
- Spring 5.0.0.RC1 - CORS Support 【译文】
3 CORS支持 3.1 介绍 出于安全考虑,浏览器禁止对当前源之外的资源进行AJAX调用.例如,当你在一个标签页检查你的银行账户时,你可以在另一个标签页打开evil.com的网站.在evil.com ...
- java编程之泛型
java泛型实现了"参数化类型"的概念,所谓"参数化类型"是指将操作的数据类型指定为一个参数,这点在容器中用的最多,例如:List<String> ...
- AVL树(平衡二叉查找树)
首先要说AVL树,我们就必须先说二叉查找树,先介绍二叉查找树的一些特性,然后我们再来说平衡树的一些特性,结合这些特性,然后来介绍AVL树. 一.二叉查找树 1.二叉树查找树的相关特征定义 二叉树查找树 ...
- 移动端使用rem同时适应安卓ios手机原理解析,移动端响应式开发
rem单位大家可能已经很熟悉,rem是随着html的字体大小来显示代表宽度的方法,我们怎样进行移动端响应式开发呢 浏览器默认的字体大小为16px 及1rem 等于 16px 如果我们想要使1rem等于 ...
- 基于谱聚类的三维网格分割算法(Spectral Clustering)
谱聚类(Spectral Clustering)是一种广泛使用的数据聚类算法,[Liu et al. 2004]基于谱聚类算法首次提出了一种三维网格分割方法.该方法首先构建一个相似矩阵用于记录网格上相 ...
- JParticles 2.0 发布,打造炫酷的粒子特效
JParticles 2.0 发布,打造炫酷的粒子特效.不好意思哈,在这么繁花似锦的世界里,标题不得不取得吸引眼球一点哈,不然...还是不啰嗦了,我们进入正题吧 简单介绍一下 JParticles 2 ...
- nodeJS之流stream
前面的话 当内存中无法一次装下需要处理的数据时,或者一边读取一边处理更加高效时,我们就需要用到数据流.NodeJS中通过各种Stream来提供对数据流的操作.本文将详细说明NodeJS中的流strea ...