struts2日常
更新struuts2 的action后不能马上反应,要重启服务器才可以,加上
<constant name="struts.devMode" value="true"/>
开启开发模式即可随时更改action。
struts2核心的内容就是将请求与视图分开
namespace为空囊括了其他package处理不了的所有其他action
struts2 每次访问都会new一个新的action对象,不会像struts1一样一直都是同一个对象,会造成线程不同步
actionsupport已经封装好了一系列action方法,直接extends就可以了。记住这一个action编写方法就可以
动态方法调用(DMI),可以不再action配置中加上method,直接在地址路径里actionname后加!加方法名就可以直接调用对应action的对应方法。
也可以用通配符调用,在action的name中用*匹配所有,method用{1}匹配对应*,在result中用{1}或者{2}等匹配对应*。(约定优于配置必须提前约定好)
首先匹配最精确的,最接近的
action的三种实现方法,
action的三种接受参数的方法:
1.从action中定义好变量,写好getter和setter
传值的时候是调用的这个两个防范,getter和setter方法名必须跟传入的匹配,变量名可以不匹配,但是没啥意义。
2.使用预模型,将传入的参数封装到对象中,在类中写好setter和getter,在action中直接写好类的setter和getter就可以直接获取传入的参数。传入的参数与action中新建的类变量名意义,例如,action中新建private User user,传入了user.name和user.pass,就直接可以获取到这个类实例中的对应数据,类的初始化由struts搞定。
DTO
3.不常用。采用ModelDriver,交给模型处理。
其中有一个getModel方法,采用泛型,将数据传给mode,也就是2中的预模型。然后就可以采用set和get了。
(很明显的是MVC模式,struts2在control中比较核心)
struts中的constan的属性等等,去哪里查?
例如i18n等,devmode
在struts中的doc文件夹中查找。
接受参数中文处理:
有中文,就尽量不要用get。
将struts2.i18n.encoding默认值改为GBK应该就可以了
数据校验:
可以使用addFieldError方法和s:fieldError标签简单处理数据校验
actionError表示action出错的一些信息,fleldError表示一些属性出错的信息
addFieldError对同一个属性加多个错误,会在error中顺序产生对应的错误数组。
s:debug标签可以查看一些运行时候的信息等。
s:property 标签专门取value stack里面的属性
<s:property value="name">就是取到了名称为name的值
取得map类型的request,session,application
1.在构造方法或者execute中取值。
定义好
Map request;
Map session;
Map application;
request=(Map)ActionContext.getContext().get("request");
session=ActionContext.getContext().getSession());
application=ActionContext.getContext().getApplication();
1.在前台可以用request.getAttribute()访问到,说明struts2给map类型的这三个对象和真正的httprequest,httpsession,httpapplication建立了对应的关联。
2.也可以用#key类型访问,在s:bug中有说明
ActionContext的值可以在s:debug中的stack context中看到
访问web元素,request等等
第二种方式(最常用)
定义成Map<String ,object>泛型方式,就不会有警告了
实现了requestAware,SessionAware,applicationAware接口
要求提供setRequset(),setSession(),setApplication()方法。
实现了这三个接口,就可以接受原始的request,session,application放到对应的map类型中
这种设计思想成为
IOC(控制反转,inverse of control),控制权交给他人,他人来完成
也可以称为DI(依赖注入dependebcy injection):依赖别人注入的值
第三种
定义为HttpServletRequest,HttpServletSession,ServletContext类型
用servletActionContext.getrequest获取就行,session与application同样
第四种
定义为HttpServletRequest,HttpServletSession,ServletContext类型
实现ServletRequestAware接口,有一个setServletRequest()方法
传入HttpServletRequest request,this.request=request;this.session=request.getsession();
this.application=session.getServletContext();
srruts.xml可以用include标签包含其他的xml文件,可以用来分模块
可以再找不到action或者action错误的时候,设置default-action-ref设置默认的action。这样可以设置错误页面等等常用的提示页面
result类型(type):
1.dispatcher(默认)服务器跳转到结果页面,但是不能是action
服务器端跳转
2.redirect(跳转到视图)
客户端跳转,
3.chain(forward到一个action)
可以到同一个包或者其他包,
4.redirectAction 到另外一个action
5.freemarker
6.httpheader发一个http头信息
7.stream 下载
8.velocity 类似freemarker
9.xslt 修饰
10.plaintext 页面源码
11.tiles 分隔页面为几块
globalresults:
加入有许多action有共同结果,可以用global-result类型设置result结果集。
默认拦截器在struts—default.xml中已经默认配置了
动态结果集(专门在struts配置文件中的ognl表达式),在action中的${}这个方式读取value stack里面的内容,用来动态确定action中设定的result结果
带参数结果集,可以在result中加上?t=${}动态带上属性就可以
一次forward(服务器端的)共享一个值栈,不用传参数
客户端的话就需要传参数(redirect中)
action中定义对象接受属性,只有传入有值才会构造这个对象实例。
例如传入user.age=9,action中定义了user对象才会被action实例化(对象中必须有参数为空的构造方法才可以,要不然对象为null),
如果不传入user对应的值,则user为null,当然自己手动实例化也可以有值
总结:domain model可以传参,可以自己new,但是要保持空的构造方法
struts2日常的更多相关文章
- Struts2中的校验框架
Struts2提供的客户端校验 尽管这种支持比较弱,但采用Struts2中的客户端校验时需要注意以下几点 1..将<s:form validate="true">的va ...
- 转:Struts2框架安全缺陷
当前java开发网站,通常不会是纯JSP的,大都使用了java framework. 有了这些framework,让开发人员更加快速的开发出代码,也让代码非常具有可扩展性,那些分层架构的思想,更是深入 ...
- Struts2框架的基本使用(三)
上篇 Struts2框架的基本使用(二)介绍了Action和result的相关配置操作,本篇接着介绍剩下的异常处理机制和Convention插件的使用.下篇文章介绍的是Struts2框架中标签库的使用 ...
- Struts2第二篇【开发步骤、执行流程、struts.xml讲解、defalut-struts讲解】
前言 我们现在学习的是Struts2,其实Struts1和Struts2在技术上是没有很大的关联的.Struts2其实基于Web Work框架的,只不过它的推广没有Struts1好,因此就拿着Stru ...
- Struts2入门这一篇就够了
前言 这是Strtus的开山篇,主要是引入struts框架...为什么要引入struts,引入struts的好处是什么,以及对Struts2一个简单的入门.... 为什么要引入struts? 既然Se ...
- 学习Struts--Chap02:Struts2框架各个功能模块和程序执行流程的介绍
1.Struts2的系统架构: 2.架构中不同Key的作用介绍: servlet Filters:过滤器链,client的全部请求都要经过Filter链的处理. Struts Core:Struts2 ...
- 【struts2】Struts2的系统架构
Struts2的官方文档里附带了Struts2的架构图,下面这张图上展示了Struts2的内部模块,以及它们的运行流程. 这张图上分了好多块,彼此之间相互联系,先浏览一下各块的名字,再留心一下运行图最 ...
- 在Struts2标签s:textfield中显示正确的日期
Java代码 struts2中的日期期输入显示问题 struts2 中的默认的日期输出并不符合我们的中文日常习惯.以下是我知道的在struts2中进行日期格式化输出的几种方式. 1.利用 &l ...
- struts2学习笔记(二)—— struts2的架构【转】
一.系统架构 Struts2的官方文档附带了Struts2的架构图. 从这张图能够非常好的去理解Struts2 关于图中的Key: Servlet Filters:过滤器链,client的全部请求 ...
随机推荐
- LeetCode Day3
Lowest Common Ancestor of a Binary Search Tree import java.util.ArrayList; import java.util.List; / ...
- MVC3学习随记一
最近才接触mvc,也是才接触linq语法,还有EntiyFramework,个人感觉这种开发模式还是挺不错的,随手记点笔记,简单做个增删改查吧 一.实例化上下文ObjectContext: 引用空间那 ...
- linux 命令入门
1 linux 中,一切皆文件. 图片.MP3和视频,它们都是文件. 目录,是一种特殊的文件,其中包含其他文件的信息.磁盘驱动器则是真正的大文件了. 网络连接也是文件,甚至运行中的进程都是文件.这些都 ...
- HTML构成及基本标签
超文本标记语言:HTML W3C:互联网联盟 注释语法:<!--注释掉的内容--> 标签格式: 双标签元素:<标签名 属性 style="样式">内容< ...
- 替换Gravatar头像默认服务器
这几天Gravatar头像服务器应该集体被墙了,头像无法显示.兵来将挡,水来土掩,上有政策,下有对策,和谐社会靠大家,哈. 利用多说Gravatar头像中转服务器替代头像默认服务器. 将下面代码添加到 ...
- CodeBlocks13.12汉化以及去掉注释及字符串的下划线
汉化: 在安装目录 D:\Program Files\CodeBlocks\share\CodeBlocks(我的安装目录)下,新建文件夹locale,然后在locale文件夹内建立文件夹zh_CN ...
- struts2源码调试环境的搭建
源码之前,了无秘密. 说一句逼格很高的话来镇镇场子. 这两天在看陆舟的<Struts2技术内幕>,一边看脑子一边冒出四个字:相见恨晚.极力推荐想了解Struts2的人看看这本书,之前一直在 ...
- Android dialog 不消失
最近在做Android4.0的开发,发现AlertDialog相比较以前有了较大变化,就是在触摸对话框边缘外部,对话框消失 于是研究其父类发现,可以设置这么一条属性,当然必须先AlertDialog. ...
- 2014第11周一word样式
今天摸索使用了word的样式替换功能感觉不错,简单记录下: 1.将某一个样式的标题统一替换为另一样式,之前一般是格式化一个个找到标题设置格式, 今天才发现可以选中标题->在浮动框上单击样式或开始 ...
- poj3673---双重for循环
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 15 int main ...