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 ...
随机推荐
- 关于IOS sourcetree 注册 2017最新hosts
今天用sourcetree git管理工具的时候,第一次打开发现需要注册. 在网上搜索了一下教程,发现现在新版本没有 (我同意协议)这个条款,这就尴尬.我以前没有sourcetree的账号. 试了 ...
- Libsvm使用资料
原理: 1. pluskid(张弛原)的支持向量机教程(人家现在都是大牛了) http://blog.pluskid.org/?page_id=683 2. JerryLead机器学习教程 http: ...
- 写给Android App开发人员看的Android底层知识(8)
(十)PMS及App安装过程 PMS,全称PackageManagerService,是用来获取Apk包的信息的. 在前面分析四大组件与AMS通信的时候,我们介绍过,AMS总是会使用PMS加载包的信息 ...
- VR问题无关方向,VR全景为您领航,全景智慧城市已势不可当
2016年,VR绝对是互联网科技圈的一个高频词. 在这一年里,Magic Leap获得阿里领投的近8亿美元的融资,VR公司的商业价值得到认可.Oculus Rift和HTC Vive的VR产品正式发货 ...
- 刨根究底字符编码之十一——UTF-8编码方式与字节序标记
UTF-8编码方式与字节序标记 一.UTF-8编码方式 1. 接下来将分别介绍Unicode字符集的三种编码方式:UTF-8.UTF-16.UTF-32.这里先介绍应用最为广泛的UTF-8. 为满足基 ...
- 使用HAL库函数建立STM32F2工程
一.建立一个新的文件夹,新建三个文件夹User.Driver.Project,还可以加一个Doc存放工程的相关说明等等. 1.将STM32F2xx的库函数(HAL函数库)中的Drivers文件夹中的所 ...
- 这是假的JS——利用CSS Animation实现banner图非交互循环播放
话不多说,先来张html和css代码截图~ 注意事项: 1.如果想在每张图前进行停顿,可以在keyframes中的每一步前加上一小段与下一张相同的代码: 2.如果想要在实现无违和感的最后一张与第一张的 ...
- 使用DotNetty编写跨平台网络通信程序
长久以来,.Net开发人员都非常羡慕Java有Netty这样,高效,稳定又易用的网络通信基础框架.终于微软的Azure团队,使用C#实现的Netty的版本发布.不但使用了C#和.Net平台的技术特点, ...
- 16.3Sum Closet
思路: 暴力,复杂度为 \(O(n^3)\),超时 class Solution { public: int threeSumClosest(vector<int>& nums, ...
- WPF中用户控件对比自定义控件(UserControl VS CustomControl)
接着这篇文章(http://www.cnblogs.com/shiyue/archive/2013/02/02/2889907.html)写: 用户控件(组合) 用于在一个项目中使用多次 自定义控件( ...