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的全部请求 ...
随机推荐
- HTML5图片预览
两种方式实现 URL FileReader <!DOCTYPE HTML><html> <head> <meta charset="ut ...
- win7启动后报丢失nscmk.dll解决解决方式
1.根据当前计算机选择下载64位或者32位nscmk.dll 2.拷贝nscmk.dll到相路径(32位:%windir%\system32\:64位:%windir%\SysWOW64\nscmk. ...
- SQL Server Reporting Services (SQLEXPRESS) 服务占用80端口
win7, 好多时候,看到system进程占用了80端口,这个是系统进程,不能直接结束.我们不知道这个进程的哪个服务占用了80端口,这里记录其中一个服务"SQL Server Reporti ...
- C#整理6——数组的应用
数组的应用:(一).冒泡排序.1.冒泡排序是用双层循环解决.外层循环的是趟数,里层循环的是次数.2.趟数=n-1:次数=n-趟数.3.里层循环使用if比较相临的两个数的大小,进行数值交换. 作业:1. ...
- 何使用CSS写出一个下拉菜单。
导航菜单是每个网站所必备的功能,也是每个学习制作网站的朋友所必须接触的,如何用css样式制作一个简单漂亮的二级下拉菜单呢? 下面为大家分享一下我的经验 方法步骤: 第一步 : 首页我们打开Subli ...
- 操作Sql数据库帮助类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...
- UITabBarItem
– finishedSelectedImage 返回选中时的图表 – finishedUnselectedImage 返回为选中时的图表 – setFinishedSelectedImage:with ...
- 观察者模式:猫叫鼠跑人醒(C#)
本着菜鸟先飞的想法,决定把平时遇到的知识点记录下来,一来是加深理解,二来是方便以后自己查阅.当您看到我这篇文章的时候,觉得代码有哪里不足的地方,请多指教,谢谢.(命名不规范是为了加深自己的理解,多多见 ...
- 关于ASP .Net Core 引用dll 一
一:ASP.Net Core 引用dll文件,不可以直接引用,必须在NuGet中引用才行. 二:如果想引用自己的dll文件,则需要注册NeGet账号,获取到API Key 才行,还需要下载NuGet安 ...
- 关于css3的背景切割(background-clip)、背景原点(background-origin)的使用
一.背景切割 background-clip :border-box | padding-box | content-box 作用:为将背景图片做适当的裁剪,以适应需要. 默认格式 bac ...