Struts 2 中不想要要在在处理和HTTP相关的操作,自需要使用框架的接口即可。
在Strut 2 中不再会涉及到诸如 HttpServletRequest, HttpServletResponse, HttpSession等Http相关的Servlet接口类,取而代之的是Struts 2 的接口,例如RequestAware,SessionAware等。
Struts 2 的标签基于 CSS,标签可以提供自己需要的HTML支持。
Struts 2 的标签利用了CSS和模板,使用起来会非常方便,在Struts 1.x中我们需要使用Table来组织表单,但是在Struts 2中所有的标签自带了Table内容,可以方便的处理格式。例如<s:textfield> 标签自动添加了 <tr> <td> 等标签。
有状态的Checkbox,可以以一种统一的方式记录checkbox状态的变化。
在Struts 2中即使没有被选中的checkbox其内容仍然存在于Struts 2 框架中,不必像在Struts 1.x中那样需要做特殊的存在性判断。
灵活的取消按钮,在取消按钮点击的时候可以指向一个不同的action。
@TODO
可以在制定Form的action的同时,制定cancel按钮的action,当点击submit和cancel的时候出现完全按不同的功能。
第一等级的AJAX的支持,在普通struts 标签的基础上,使用AJAX增加了交互性和灵活性。
Struts 2 的标签内置了Ajax的支持。Struts 2 的标签使用了Dojotoolkit Ajax框架,不但能够使用Ajax特性,而且能够使用非常丰富和强大的浏览器小控件,例如日期选择控件
见到那集成Spring框架,非常简单的使用Spring框架提供的依赖注入功能。
可以方便的使用Spring管理Struts 2 的action的创建,通过使用Spring可以充分的利用Spring的依赖诸如功能,并且能够很好的集成其他的框架,例如Hibernate,iBatis等。
更多的返回形式,除了JSP还支持,JasperReports,JFreeChart, Action链,文件下载等。
除了支持JSP的表现形式,还支持JasperResports报表, JFreechart图标,Action链,文件下载等。
POJO表单,不再需要ActionForms,使用Javabean获得客户的收入或者将属性表示出来,
完全消除了ActionForm组建,可以使用任意合适的类型来接受页面传来的数据或者将数据表现出来。ActionFrom可以使用POJO的 JavaBean来替代,JavaBean中的属性可以使用String,也可以使用具体的类型,例如Date,Int等。
POJO Action,使用任意的类作为Action类,甚至可以使用接口。
任何类都可以作为Action类,只要接口满足一些简单的定义,不需要在使用Action类似的基类,你可以完全自由的发挥。
部署
插件结构,使用jar文件扩展框架功能,不需要在做手动的配置,内置了JavaServer Faces, JasperResports, JFreeChart, Tiles等插件。
扩展一个功能只需要添加一个插件,插件甚至可以热插拔,在你的应用不停止的情况下追加新的功能。
集成了分析功能,可以方便的找到程序性能的问题点。
可以不借助外力发现程序的热点,找到问题的所在,
准确的报告错误,可以非常准确的指出程序的问题点。
准确的报告运行时的错误,方便解决问题。
维护
Action容易测试,直接测试Struts 2的Action,不需要使用Mock Http对象来测试。
Action是普通的类,不需要特殊的环境,所以Struts 2 的Action 特别容易测试。
聪明的默认值,不需要配置不必要的配置,大部分的框架配置元素的都有非常合适的默认值,基本上你不需要在做任何配置。
Struts 2 有很多的配置项,但是每一个都有默认值,基本额上不需要更改默认的选项即可保证最佳
容易定制的控制器,可以定制每一个Action的处理过程。
可以使用Intercepter来过滤每一个Action,在Action执行前后追加自定义的操作。
集成了Debugging,可以使用内容之的debugging工具找到问题。
灵活的标签库,可以通过修改FreeMarker模板来定制标签的输出,不需要在操作像天书异样的JSP Taglib API,模板语言支持,Freemarker和Velocity
可以自定义模板库,或者修改已有模板的内容来定制页面的显示。
Struts 2 中使用的模式
Command
Chain of responsibility
Struts2 处理流程概要
上图来源于Struts2官方站点,是Struts 2 的整体结构。
一个请求在Struts2框架中的处理大概分为以下几个步骤
1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求
2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
6 ActionProxy创建一个ActionInvocation的实例。
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper
在上述过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。
MyEclipse 快捷键
(1)Ctrl+M切换窗口的大小
(2)Ctrl+Q跳到最后一次的编辑处
(3)F2当鼠标放在一个标记处出现Tooltip时候按F2则把鼠标移开时Tooltip还会显示即Show Tooltip Description。
F3跳到声明或定义的地方。
F5单步调试进入函数内部。
F6单步调试不进入函数内部,如果装了金山词霸2006则要把“取词开关”的快捷键改成其他的。
F7由函数内部返回到调用处。
F8一直执行到下一个断点。
(4)Ctrl+Pg~对于XML文件是切换代码和图示窗口
(5)Ctrl+Alt+I看Java文件中变量的相关信息
(6)Ctrl+PgUp对于代码窗口是打开“Show List”下拉框,在此下拉框里显示有最近曾打开的文件
(7)Ctrl+/ 在代码窗口中是这种//~注释。
Ctrl+Shift+/ 在代码窗口中是这种/*~*/注释,在JSP文件窗口中是<!--~-->。
(8)Alt+Shift+O(或点击工具栏中的Toggle Mark Occurrences按钮) 当点击某个标记时可使本页面中其他地方的此标记黄色凸显,并且窗口的右边框会出现白色的方块,点击此方块会跳到此标记处。
(9)右击窗口的左边框即加断点的地方选Show Line Numbers可以加行号。
(10)Ctrl+I格式化激活的元素Format Active Elements。
Ctrl+Shift+F格式化文件Format Document。
(11)Ctrl+S保存当前文件。
Ctrl+Shift+S保存所有未保存的文件。
(12)Ctrl+Shift+M(先把光标放在需导入包的类名上) 作用是加Import语句。
Ctrl+Shift+O作用是缺少的Import语句被加入,多余的Import语句被删除。
(13)Ctrl+Space提示键入内容即Content Assist,此时要将输入法中Chinese(Simplified)IME-Ime/Nonlme Toggle的快捷键(用于切换英文和其他文字)改成其他的。
Ctrl+Shift+Space提示信息即Context Information。
(14)双击窗口的左边框可以加断点。
(15)Ctrl+D删除当前行。
---待续
[以下为转载]
Eclipse快捷键大全
Ctrl+1 快速修复(最经典的快捷键,就不用多说了)
Ctrl+D: 删除当前行
Ctrl+Alt+↓ 复制当前行到下一行(复制增加)
Ctrl+Alt+↑ 复制当前行到上一行(复制增加)
Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)
Alt+↑ 当前行和上面一行交互位置(同上)
Alt+← 前一个编辑的页面
Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)
Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性
Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)
Shift+Ctrl+Enter 在当前行插入空行(原理同上条)
Ctrl+Q 定位到最后编辑的地方
Ctrl+L 定位在某行 (对于程序超过100的人就有福音了)
Ctrl+M 最大化当前的Edit或View (再按则反之)
Ctrl+/ 注释当前行,再按则取消注释
Ctrl+O 快速显示 OutLine
Ctrl+T 快速显示当前类的继承结构
Ctrl+W 关闭当前Editer
Ctrl+K 参照选中的Word快速定位到下一个
Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)
Ctrl+/(小键盘) 折叠当前类中的所有代码
Ctrl+×(小键盘) 展开当前类中的所有代码
Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替)
Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)
Ctrl+J 正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)
Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查)
Ctrl+Shift+F4 关闭所有打开的Editer
Ctrl+Shift+X 把当前选中的文本全部变味小写
Ctrl+Shift+Y 把当前选中的文本全部变为小写
Ctrl+Shift+F 格式化当前代码
Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)
下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(注:一般重构的快捷键都是Alt+Shift开头的了)
Alt+Shift+R 重命名 (是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)
Alt+Shift+M 抽取方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)
Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)
Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)
Alt+Shift+F 把Class中的local变量变为field变量 (比较实用的功能)
Alt+Shift+I 合并变量(可能这样说有点不妥Inline)
Alt+Shift+V 移动函数和变量(不怎么常用)
Alt+Shift+Z 重构的后悔药(Undo)