struts一些知识点总结
来源:互联网 发布:java saas 开源框架 编辑:程序博客网 时间:2024/05/17 01:00
最近学习struts做的一些知识点的总结
Struts总结
Struts2是基于mvc设计模式的框架,层次结构明晰,利于开发和维护;
Struts的action解除了和servlet API的耦合,测试方便,也可以访问servlet;
Struts2有功能强大的拦截器,集成了许多常用的功能,大大简化了开发;
参数传递
参数传递有三种方式
1. 直接把想要传值的属性放到action中,setter方法和getter方法
2. 把想要传值的属性放到一个实体类中,把这个类放在action中,settert和getter方法。页面要用<input name=”user.name”>
3. ModelDriven 通过实现modelDriven接口,重写getModel()方法。返回这个实体类。这个实体类一定要实例化。页面不需要再加上user,使用ModelDriven拦截器,这个拦截器的作用是当有类实现了ModelDriven接口时,把getModel()的内容放入ValueStack中
参数传递到后台时全部是String,当八种基本类型和时间类型时可以自动转化,仅限yyyy-MM-dd类型。如果要其它格式,需要自己写转换器。
转换器:
分为局部转换器、全局转换器
局部转换器:
1.写一个转换器类继承StrutsTypeConverter类,重写ConvertFromString()、ConvertToString()。
ConvertFromString(Map context ,String[] values ,Class toClass)
Context当前上下文环境
Values传入的值
toClass 要转换为的类类型
2.在需要用到的action的同一包下新建一个
ActionClassName—conversion.properties
3.内容:user.brith = 转换器类全路径
全局转换器
1.写一个转换器类
2.放在src下,叫做xwork—conversion.properties
3.内容:java.until.Date = 转换器类全路径
校验
使用struts2的校验功能需要继承ActionSupport类,重写validate()方法,此方法可以对action中所有的方法进行校验,可以使用@SkipValidate注解给不需要校验的方法。也可以对单个方法进行校验,方法是写一个叫validateXxxx()的方法。
验证失败返回“input”视图,页面用<s:fieldError></s:fieldError>来接收错误信息,“fieldname”可以指定显示某个字段的信息。
使用xml校验的方式是:ActionClassName—validation.xml,
或ActionClassName—ActionName—validation.xml需要与被校验的action在同一目录下,内容<validators>
<field name=””>
<field—validator type=”requiredString”>
<message>用户名不能为空</message>
校验用到的拦截器是validation
文件上传
页面:<input type=”file” name=”myFile”>类型要是file
后台:在action中定义字段File类型 myFile(名字一定要对应前台页面名字)
Sring myFileFileName
String myFileContentType
Setter/getter方法
excute():
//获取要上传的地址路径
String path = ServletActionContext.getServletContext.getRealPath(“/upload”);
//创建目标对象
File destFile = new Flie(path,myFileFileName);
//把上传的文件拷贝到目标文件中去
FileUntils.copyFile(myfile,destFile);
使用了FileUpLoad拦截器
如果要上传指定类型的文件,可以给拦截器注入参数
<interceptor—ref name=”defaultStack”>
<param name=”fileUpLoad,allowedExtensions” >jpg,txt</param>
</interceptor—ref >
修改文件上传的最大大小:
<constant name=”struts.multipart.maxSize” value=”30*1024*1024”/>
国际化
1. 写资源文件 xxx.properties/xxx_en_english.properties
2. 在xml中注册资源文件<constant name=”struts.auston.i18n.resources” value=”资源文件全名”>
3. 页面:<s:text name=””/> name为配置文件中的key
也可以直接在页面中引用<s:i18n name=”资源文件全名”>
<s:text name=””>
不推荐
防止表单重复提交
原理是,给页面生成一个id,给action也生成一个id,当验证两个id相等时,允许访问并删除Id,所以二次访问时无法访问。
页面:<s:token></s:token>
后台:需要在xml中加入拦截器token
<interceptor—ref name=”defaultStack”>
<interceptor—ref name=”token”>
<param name=”includeMethods”>save</param>
<interceptor—rer>
出错时返回“invalid.token”视图
异常处理
使用exception拦截器
后台:this.addFieldError(“username”,”用户名不能为空”);
页面:<s:fieldError></>
拦截器
Struts2一共有32个拦截器,defaultStack中有18个拦截器
Params 传递参数用
Exception 异常处理
Validation 校验
Chexbox
Chain
modelDriven 模型驱动
FileUpload 文件上传
拦截器在启动的时候创建,调用init()方法。
自定义拦截器:
1. 实现Interceptor接口,重写init(),intercept(),destroy()方法
2. 继承AbstractInterceptor类,此类对init().destory()方法已经有了空实现,只需要重写intercep()方法
intercept(ActionInvocationinvocation){
ActionContext ac =invocation.getInvocationContext();
ActionProxy ap =invocation.getProxy();
String methodName =ap.getMethod();
根据methodName判断,如果是需要拦截的方法,刚对此方法进行操作,通过ac.getContentMap()把处理的结果放到域中。如果通过拦截器刚invocation.invoke()执行action,不通过则return某个视图。
}
在xml中注册自己写的拦截器
<interceptors>
<interceptor name=”loginStack” class=””/>
<interceptor---stack name=”myStack”>
<interceptor---ref name=”defaultStack”>
<interceptor---ref name=”loginStack”>
</interceptor---stack>
</interceptors>
执行
<default---interceptor---ref name=”myStack”/>所有action执行此拦截器
如果给单个action使用,定义在<action>标签下
<interceptor---ref name=”myStack”/>
把参数保存到域中
Struts2解除了和servlet API的耦合,不过仍然有方法可以访问。
1. 直接访问servlet API:
HttpServletRequest request =ServletActionContext.getRequest();
HttpSession session =request.getSession();
ServletContext application =ServletActionContext.getServletContext();
2. 通过struts2封装的方式访问
ActionContext ac = ActionContext.getContext();
Map<String,Object> request= ac.getContextMap();
Map<String,Object>session = ac.getSession();
Map<String,Object> application = ac.getApplication();
3. 通过实现接口的方式,
实现ServletRequestAware,ServletResponseAware,ServletContextAware
或实现RequestAware,SessionAware,ApplicationAware
OGNL
有一个上下文的概念,就是map结构,实现了map的接口,OGNL的核心是ognlContext。
ValueStack:
struts2数据存储的核心,是数据流转的中转站。值栈的生命周期穿了整个action的生命周期,每个Action类都有一个vs其中保存当前action对象,当有用户访问时,创建一个vs,一个action对象,一个actionContext对象,action对象保存在vs当中,vs保存在request域中,所以生命周期同request生命周期相同.用户可以通过actionContext访问到vs 和action.
获取vs
1. ValueStack vs1 = request.getAttribute(“struts.valueStack”);
2. ActionContext ac = ActionContext.getContext();
ValueStack vs2 = ac.getValueStack();
vs1 == vs2;
valueStack中分为两部分,根节点和ognlContext
根节点(list栈):action对象,
Map对象(vs.set())
Push()进入的对象
其它代理对象
ognlContext(map栈):root引用
key value
request key -----------value
session
application
params
attr
可以通过<s:debug></s:debug>查看值栈中的数据
放在根节点中的数据可以直接不加#取出 #user.name
非根节点的数据必须加# #request.user.name
$是用在xml中取值
%{}提供了ognl表达式的环境 %{#user.name}
数据回显
在后台通过将数据压入值栈,可以在页面直接取到值
Vs.pop();
Vs.push(对象);
页面:<s:textfield name=”username” ></>这个标签会自动查找根元素数据,省略了value,直接从name找值
- struts一些知识点总结
- 关于struts一些知识点
- Struts知识点总结
- struts 知识点总结
- Struts知识点总结
- Struts 2知识点总结
- struts框架知识点总结<一>
- Struts框架知识点总结<二>
- 操作系统一些知识点总结
- Struts的一些总结
- Struts拦截器的一些知识点
- iPhone 一些小知识点总结
- Unity3D一些注意知识点总结
- C++的一些知识点总结
- ios一些知识点的总结
- php一些小知识点总结
- Java一些知识点的总结
- 树的一些知识点总结
- dialog属性参数
- [数学 高精度] HDU 5241 Friends
- Caused by: java.lang.OutOfMemoryError: PermGen space
- java实现潜艇大战游戏之Java swing图形界面开发游戏项目潜艇大战源码及实现方式详解
- iOS开发进阶
- struts一些知识点总结
- java-网络编程-大文件搬运
- UVa 424 Integer Inquiry
- 第7章 Linux档案与目录管理
- Umbraco 官方技术文档 翻译 一 、BackOffice overview
- uva-10878 - Decode the tape
- flume+kafka 积累一波
- unity Shader 描边
- (15.1.19)我的 Android 开发实战经验总结