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 ...
随机推荐
- 那些年,让我们一起着迷的Spring
构建企业级应用框架(SpringMVC+Spring+Hibernate/ibatis[Mybatis]) 框架特点:半成品,封装了特定的处理流程和控制逻辑,成熟的,不断升级的软件.重用度高,开发效率 ...
- LINQ之LINQ to Objects(上)
LINQ概述 LINQ,语言集成查询(Language Integrated Query),它允许使用C#或VB代码以查询数据库相同的方式来操作不同的数据源. 1.LINQ体系结构 从上图可以看出,L ...
- 开涛spring3(8.1) - 对ORM的支持 之 8.1 概述
8.1 概述 8.1.1 ORM框架 ORM全称对象关系映射(Object/Relation Mapping),指将Java对象状态自动映射到关系数据库中的数据上,从而提供透明化的持久化支持,即把 ...
- 《一起》Alpha版软件使用说明
1.引言 1.1编写目的 本手册是软件工程概论团队项目<一起>的Alpha版使用说明,面向的对象群体为全校师生. 1.2项目背景 本项目由<软件工程概论>课程需求创建,软件由S ...
- 解决shiro和quartz2 版本冲突问题
修改build.gradle compile ("org.quartz-scheduler:quartz:2.2.3") compile ("org.apache.s ...
- 编写原生Node.js模块
导语:当Javascript的性能需要优化,或者需要增强Javascript能力的时候,就需要依赖native模块来实现了. 应用场景 日常工作中,我们经常需要将原生的Node.js模块做为依赖并在项 ...
- 纯css实现select下拉框并排显示
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- java基础(八章)
一. 什么是数组及其作用? 定义:具有相同数据类型的一个集合 作用:存储连续的具有相同类型的数据 二. java中如何声明和定义数组 l 声明和定义的语法: 数据类型[ ...
- zookeeper 应用场景概述
Zookeeper主要可以干哪些事情:配置管理,名字服务,提供分布式同步以及集群管理. 一 .配置管理 在我们的应用中除了代码外,还有一些就是各种配置.比如数据库连接,远程服务访问地址等.一般我们都是 ...
- java io 流
Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...