A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

struts2:一.Struts2
Struts2是一个基于MVC设计模式的Web层框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。采用拦截器的机制来处理用户的请求,实现业务逻辑层与ServletAPI的完全解耦。
Struts2的执行流程是:
        当一个请求发送过来时,会被web.xml中配置的过滤器拦截,会对请求进行处理,生成一个值栈对象,同时将请求对象封装到值栈中,进入前端控制器,执行doFilter方法,获取请求的映射关系,找到相应的action方法,生成action的代理对象, 同时生成调度者ActionInvocation,创建该对象时,会自动调用init方法,将action对象压入值栈 ,从而初始化action对象.在ActionInvocation中按照Struts-default.xml配置的拦截器顺序,依次递归执行拦截器.拦截器是基于AOP思想的,可以实现对方法的前后增强.
生成的Action对象是一个多例的对象,一个请求对应一个值栈,一个值栈对应一个Action,所以,在Strusts2中,不存在线程安全问题.
在Action中接受参数的方式一般有两种,即属性驱动和模型驱动,属性驱动需要为接收参数添加set方法,Struts框架会自动把接收的参数注入到该成员变量中;使用模型驱动,需要实现ModelDriven接口,同时需要在action中创建一个泛型的对象,要new出来,否则会报空指针.
在action中处理的结果,通过调用内置的actioncontext对象或者ServletActionContext获取Servlet的API,对数据进行处理,最后通过ActionContext对象调用值栈对象,将需要返回的结果压入值栈.
        根据action处理结果,最后返回一个处理结果返回路径,即action的内置视图,有success,none,error,input,login五种视图,其中input视图在框架整合后要配置,在请求找不到页面是会找input视图.这些路径是在Struts.xml文件中配置的,需要配置该Action方法的结果集.
        在页面上,我们一般通过ajax或者是el表达式处理接收的数据.
        我们在开发中使用的是Struts的注解开发,需要引入Struts-convention-plugin.jar的jar包.
        使用注解开发基本可以告别Struts.xml文件了,常用的注解包括
@Namespace, @ParentPackage, @Action, @Actions, @Results, @InterceptorRef等.
二:Restful
Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格,是对http协议的诠释。
资源定位:互联网所有的事物都是资源,要求url中没有动词,只有名词,没有参数。
Url格式:http://blog.csdn.net/beat_the_world/article/details/45621673,通过Url访问静态资源,通过具体请求方式找到相应的方法,对数据进行操作。
资源操作:使用put、delete、post、get,使用不同方法对资源进行操作。分别对应添加、删除、修改、查询。一般使用时还是post和get。Put和Delete几乎不使用。
GET查询,从服务器取回数据(只是取回数据,而不会产生其他的影响)。这是一个幂等的方法(译者注:使用相同的参数重复执行,应该能够获取到相同的结果)。
POST增加,请求通常用来创建一个实体,也就是一个没有ID的资源。一旦这个请求成功执行了,就会在HTTP请求的响应中,返回这个新创建的实体的id。我们通常用它来上传文件或者表单。
PUT更新,请求和POST请求类似,但是一般用来更新一个已有的实体。通过把已经存在的资源的ID和新的实体用PUT请求上传的服务器,来更新资源。
DELETE删除,方法用来从服务器上删除资源。和PUT类似,你需要把要删除的资源的ID上传给服务器。
TRACE提供一种方法来测试当一个请求发生的时候,服务器通过网络收到的内容。所以,它会返回你发送的内容。
HEAD请求和GET请求资源类似,但是仅仅返回响应的头部(没有具体的响应体)。同时,和GET请求类似,HEAD也是幂等的,不会在服务器上造成其他影响。
OPTIONS方法允许客户端请求一个服务所支持的请求方法。它所对应的响应头(response header)是Allow, 它非常简单地列出了支持的方法。
使用restful风格,请求变为/模式,请求路径不能为itemList.action?id=1了,应该是/itemList/1,所以拦截请求就不能是*.action,应该是/。
三:设计模式
单例模式:
        所谓的单例模式,就是同一时刻,只有一个实例存在。通常在连接数据库时,要保证数据库连接池是一个单例。Java中典型就是Runtime类,每个java程序都会有一个runtime类,用来连接其运行的环境。
        就是定义一个该类的静态变量,然后再定义一个获取该静态变量的静态方法。
格式:
        Instance:Singleton = null;
        getInstance():Singleton;//通过获取实例对象方式获取实例.
        Singleton();

Public class Singleton(){
        Private  static Singleton instance = new Singleton ();
        Public static Singleton get Singleton (){
                Return instance;
}
}
添加同步锁机制
Public class Singleton(){
        Private  static Singleton instance = new Singleton ();
        Public static synchronized Singleton get Singleton (){
                If(instance == null){
                        instance = new Singleton();
}
                Return instance;
}
}
简单工厂模式:
        简单工厂模式就是把对象产生的细节进行隐藏,客户端只负责调用即可。又叫做静态工厂方法,它定义一个具体的工厂类负责类的对象的创建。由三部分构成:工厂类、抽象类、实现抽象类的具体类。
        由一个抽象类定义实体的属性和方法,由具体类实现该抽象类,在工厂类中根据条件判定对具体类进行实例化。在工厂类中,返回对象是抽象类,而在工厂类方法内,需要通过条件判定返回哪个抽象类的实现类。

工厂模式:
        采用解耦的原则,将简单工厂模式中的每个对象的创建独立出来。使用工厂模式,需要对工厂类定义一个接口,而每个工厂类中实现接口中的方法,根据本类中的需求对该方法进行增强,在调用的时候,通过。就是把简单工厂模式中在工厂类中进行条件判定提到测试方法执行中,通过多态实现对不同接口的实现类的实例化,比如可以定义一个翻译器抽象类,定义两个翻译器中文和英文实现该抽象类(实体类);再定义一个工厂接口,定义两个实现类(翻译方法中文英文)实现该接口,在实现类中对翻译器对象(中文方法获取中文实体类对象)进行实例化;这样,在测试时,只需要通过多态获取到工厂接口的不同实现类,调用各实现类中的方法获取实例对象。

代理模式:
        主要由三部分构成,抽象目标类,实体目标类,代理类。
        有静态代理和动态代理两种模式:
        静态代理是被代理类实现一个接口,而在接口另一个实现类中对被代理类的所有方法进行增强。
而动态代理又分为JDK动态代理和CGLIB动态代理,JDK动态代理通过proxy的静态方法newProxyInstatnce对代理类进行增强,要求该代理类必须实现一个接口,而CGLIB则不需要,CGLIB只需要代理类实现MethodInterceptor接口,即可实现对被代理类的增强。
装饰者模式:
        定义一个实体类的抽象类,有一个实现类能够实现其功能,再定义一个该实现类的装饰类,如果要对实体类功能进行增强,只需要写一个类继承该装饰类,对该装饰类进行增强即可。这样,就不需要再实体类的实现类上进行操作了。

迭代器模式:
        提供一种方法顺序访问及集合对象中的各个元素,又不需要暴露该对象的内部元素。主要由4部分组成:迭代器角色、具体迭代器角色、容器角色和具体容器角色。

1 个回复

倒序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马