更新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日常的更多相关文章

  1. Struts2中的校验框架

    Struts2提供的客户端校验 尽管这种支持比较弱,但采用Struts2中的客户端校验时需要注意以下几点 1..将<s:form validate="true">的va ...

  2. 转:Struts2框架安全缺陷

    当前java开发网站,通常不会是纯JSP的,大都使用了java framework. 有了这些framework,让开发人员更加快速的开发出代码,也让代码非常具有可扩展性,那些分层架构的思想,更是深入 ...

  3. Struts2框架的基本使用(三)

    上篇 Struts2框架的基本使用(二)介绍了Action和result的相关配置操作,本篇接着介绍剩下的异常处理机制和Convention插件的使用.下篇文章介绍的是Struts2框架中标签库的使用 ...

  4. Struts2第二篇【开发步骤、执行流程、struts.xml讲解、defalut-struts讲解】

    前言 我们现在学习的是Struts2,其实Struts1和Struts2在技术上是没有很大的关联的.Struts2其实基于Web Work框架的,只不过它的推广没有Struts1好,因此就拿着Stru ...

  5. Struts2入门这一篇就够了

    前言 这是Strtus的开山篇,主要是引入struts框架...为什么要引入struts,引入struts的好处是什么,以及对Struts2一个简单的入门.... 为什么要引入struts? 既然Se ...

  6. 学习Struts--Chap02:Struts2框架各个功能模块和程序执行流程的介绍

    1.Struts2的系统架构: 2.架构中不同Key的作用介绍: servlet Filters:过滤器链,client的全部请求都要经过Filter链的处理. Struts Core:Struts2 ...

  7. 【struts2】Struts2的系统架构

    Struts2的官方文档里附带了Struts2的架构图,下面这张图上展示了Struts2的内部模块,以及它们的运行流程. 这张图上分了好多块,彼此之间相互联系,先浏览一下各块的名字,再留心一下运行图最 ...

  8. 在Struts2标签s:textfield中显示正确的日期

    Java代码   struts2中的日期期输入显示问题   struts2 中的默认的日期输出并不符合我们的中文日常习惯.以下是我知道的在struts2中进行日期格式化输出的几种方式. 1.利用 &l ...

  9. struts2学习笔记(二)—— struts2的架构【转】

    一.系统架构   Struts2的官方文档附带了Struts2的架构图. 从这张图能够非常好的去理解Struts2 关于图中的Key: Servlet Filters:过滤器链,client的全部请求 ...

随机推荐

  1. Android 多线程:使用Thread和Handler (从网络上获取图片)

    当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程主要负责处理与UI相关的事件,如:用户的按键事件,用户接触屏幕的事件以及屏幕绘图事件,并把相关的事件分 ...

  2. PropertyGrid--为复杂属性提供编辑功能

    零.引言 PropertyGrid用来显示某一对象的属性,但是并不是所有的属性都能编辑,基本数据类型(int, double等)和.Net一些封装的类型(Size,Color等)可以编辑,但是对于自己 ...

  3. C#核编之格式化编程

    一.格式化控制台输入输出 1. 在前面的随笔中,会经常看到诸如{0},{1}之类的标记嵌入在字符串变量中..NET引入一种字符串格式化的新风格.与C的printf()相似,简而言之,如果需要定义一个字 ...

  4. VirtualBox镜像复制载入

    转发:http://blog.csdn.net/dotuian/article/details/9127229 一,虚拟镜像文件格式 VirtualBox磁盘镜像文件(VDI, VMDK, VHD, ...

  5. EXT属性

    Extjs & Ext.Net 弹出整个浏览器对话框的方法 top.Ext.Msg.alert("值"); top.Ext.Msg.confirm("值" ...

  6. pythonj基础之 多线程

    多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进 ...

  7. C++结构体中sizeof(1)

    sizeof sizeof操作符的作用是返回一个对象或类型名的长度,长度的单位是字节. 返回值的类型是标准库命名为size_t的类型,size_t类型定义在cstddef头文件中,该头文件是C标准库的 ...

  8. Nhibernate refers to an unmapped class nhibernate问题的解决(初学者)

    最近研究Nhibernate的一些功能,在通过Nhibernate反向建数据库表时遇到了一个问题,refers to an unmapped class:xxxx 通过查阅发现是自己对应的  xxxx ...

  9. Android 自定义shape圆形按钮

    Shape的属性: solid 描述:内部填充 属性:android:color 填充颜色 size 描述:大小 属性: android:width 宽 android:height 高 gradie ...

  10. Mining 影响数据挖掘结果的 5 方面

    第一个: 数据类型. 对象的不同属性会用不同的数据类型来描述,如  年龄-->int; 生日 -->date;数据挖掘时也要对不同的类型有不同的对待. 第二个: 数据质量. 数据质量直接影 ...