1 基本流程介绍
Struts2为struts的最新版本,是由struts1和webworks框架发展起来的最新web框架,struts2的主要作用是可以简化web的开发,对底层Servlet起到了很好的封装。使得我们处理Servlet像处理普通的java对象一样(POJO),另外,也大大简化的UT测试难度,因为普通java对象比Servlet更容易测试。如下为Struts的体系结构:
相比,第一代struts框架,第二代更加简洁高效,他主要以webworks为核心创建,例如,struts2不需要定义Form类,不强制继承Struts的类库,只是为了便于开发,提供了ActionSupport类,简化开发流程。Struts2中大量使用拦截器(interceptor)来处理用户的请求,从而允许用户的业务逻辑控制器与Servlet API分离。
Struts2框架的流程如下:
1) web请求到来(比如用户登录),web容器(Tomcat)初始化web.xml,发现定义了struts2过滤器(StrutsPrepareAndExecuteFilter),直接把请求(URI)转给Struts2处理;
2) Struts2初始化配置文件(struts.xml,struts.properties);
3) Struts2实例化配置文件中的Action接收Request中的参数;
4) 启用拦截器,比如验证等;
5) 业务处理,通过回调Action的execute方法;
6) 返回处理结果(字符串)到过滤器;
7) 根据配置文件查找结果对于的响应,并返回给客户;
2 Struts配置文件介绍
1) 创建并配置strut.xml(相当于在web.xml中注册servlet,不过能丰富,可以充分利用struts2的高效性),一般放在classpath的根路径下(src目录下就可以),结构如下,重点关注action元素及其属性和子元素,name属性的值对应于请求的URI,class为处理类;result为根据处理结果进行定位,默认为请求转发(Dispatchor.forword(request, response))方式,name为返回的字符串,值为定位的页面。详细配置信息参加DTD定义。
2) 创建struts.properties文件(可以不需要)
3 Struts2开发流程简介:以用户登录为例
1) 创建web项目;
2) 加入struts2所需要的类库,高亮的为必须的:
3) 在web.xml中配置struts2过滤器,对所有的URL进行过滤;
4) 建立一个login.jsp页面;
5) 定义Action类,继承ActionSupport类,覆盖execute函数,如果需要验证覆盖validate函数;在action类中定义变量,和表单字段的name一一对应,并为之生成getter和setter方法。
6) 配置struts.xml文件,如下,登录成功转到main.jsp,失败转到login.jsp:
7)
4 表单验证(推荐用javascript在客户端验证)
5 异常处理
6 拦截器介绍
7 文件上传下载
8 图表显示
9 整合JSon
10 整合Ajax
1 基本流程介绍
2 配置文件介绍
3 IOC/DI/DIP介绍
依赖倒置原则:强制系统的高层组件不应该依赖于底层组件,并且不论是高层组件还是底层组件都应该依赖于抽象(接口)。于是,按照DIP说的,我们把底层组件抽象为接口与实现类,高层组件依赖此接口。看起来,大家都是依赖抽象了,不过,我们应该在何处、如何取得具体的底层组件实例?
通过底层组件工厂(纯虚构),将"new"操作"集中起来管理"。于是高层组件对底层组件的依赖转变为了对"纯虚构"出来的工厂的依赖(这就是IoC的一种实现手段)。新的问题来了,其实工厂也是不小的麻烦。(地点:高层组件内部;方式:通过底层组件工厂)
高层组件咆哮到:“底层组件和工厂都TM伤不起!动不动就变!!有木有!!我不管了啊!要调用我的组件们,我给你们开放注入具体实现的接口(构造函数注入,setter/getter注入),你们自己看着办啊 !!!”——于是,依赖注入(DI)的基础建立了起来,同时,对依赖关系的管理任务也交给了上层(这就是IoC的一种实现手段)。(地点:高层组件的使用者内部;方式:设法取得具体实现,并传递给高层组件)
高层组件的高层组件无语了,但是它很淡定地如法炮制,将这个“麻烦”交给了它的高层组件,and so on...最终,最高处的那个组件(一般它叫“应用”),表示鸭梨非常大:“你们把所有的依赖都转给我了?!?!这不是坑爹吗?”
此时,"工厂"的角色和范畴扩大,它接纳了“管理整个应用的所有实现类对象”的任务。它通过某种方式(比如Spring的XML配置方式、注解方式;Guice的编程方式)向应用提供了管理组件之间依赖关系的接口,于是,应用所要考虑的所有依赖关系都可以委托给这样的"工厂"了,"工厂"成为了应用唯一依赖 —— 整个应用的“控制权”全都由具体实现(包括底层组件具体实现、甚至底层组件工厂等)反转至了"工厂"的依赖接口中,“IoC容器”是它响亮的新名字!(地点:IoC容器;方式:通过IoC容器的API)
.IoC容器的引入,让整个应用变得十分灵活,组件之间可以“热插拔”。这也正是DIP的初衷。通过IoC容器,我们在使用一个组件时,需要指定它的依赖,以及它的依赖的依赖...and so on,这形成了一个“对象图”的概念。
依赖:如果组件A,1)持有B的应用;2)调用B的方法;3)创建B,则表示A对B的依赖。
控制:A依赖B,则B拥有控制权,因为B的某种变化会影响A的变化。
控制反转:就是让控制方“往高处/上层”转移,控制反转是实现依赖倒置的一种方法。
依赖注入:组件通过构造函数或者setter方法,将其依赖暴露给上层;上层要设法取得组件的依赖,并将其传递给组件,依赖注入是实现控制反转的一种手段。
4 AOP介绍
5 和Struts2整合
1 基本流程概述
2 ORM介绍
3 配置文件介绍
4 和Spring的整合
1 Javascript介绍
2 JQuery介绍
3 AJAX介绍
4 表单验证
5 基于AJAX的文件上传
6 日期控件
7 菜单级联
8 自动完成
9 悬浮窗口
10 Tab控件
1 用户注册模块
2 用户登录模块
3 用户信息修改
4 用户查询
5 用户删除
6 用户数据导出
7 分页实现