工做中的小零碎

with item(USERID,USERNAME,PASSWORD,BANKNAME,BANKCODE,ORDERNUMBER,ISVALID,SUPERVISECODE,USERTYPE,GROUPID,ISREPORT,PARENTCODE,ISUNITE,BANKTYPE)
    as (
    select * from m_reportuser  where  bankcode='F031H101310101001' and usertype='0'
    union all
    select mr.* from m_reportuser as mr,item as mrp
    where mr.parentcode=mrp.bankcode    
    )
select USERID,USERNAME,PASSWORD,BANKNAME,BANKCODE,ORDERNUMBER,ISVALID,SUPERVISECODE,USERTYPE,GROUPID,ISREPORT,PARENTCODE,ISUNITE,BANKTYPE from item

sql.append("  select *  from ( select  rownumber() over(ORDER BY LOGTIME DESC) as rownumber_,");
sql.append("  l.LOGID, l.USERID, l.USERNAME, l.IPADDRESS, l.SUPERVISECODE,l.SUPERVISENAME, l.DEPARTID, l.DEPARTNAME, l.CONTENT, l.LOGTIME from m_log l ,item i ");
sql.append("  where l.userid=i.username ");
sql.append("  ORDER BY LOGTIME DESC ) as temp_ ");
sql.append(" where rownumber_ between "+((pageObject.getPageCurrent()-1)*pageObject.getPageSize()+1)+
" and "+pageObject.getPageCurrent()*pageObject.getPageSize());
=====================================================
if(i=22)  为啥一直是true ?  只要不为0,就是true。 例:if(a=3)  相等于 if(3)

==========================================
2014.07.03
spring概述:
spring就是管理bean的。bean对于spring的意义就像object对于oop的意义同样。
核心:bean,core,context。

bean:演员。
context:舞台背景。
core:道具。

bean包裹object。object要有数据。

context给数据提供生存环境。context发现对象间的关系,创建而且维护好这些关系。
因此context就是一个bean关系的集合,这个关系集合又叫IoC容器。一旦创建起这个容器spring就能够开始工做了。

core发现、创建和维护每一个bean之间的关系所须要的一系列的工具。core能够理解为util。
==========================================
spring详述:
------------------------------------
bean组件:
位置:在org.springframework.beans包下。
做用:bean的定义、建立(须要关心)、解析。其余两个在spring内部完成了。
模式:工厂模式。顶级类BeanFactory。

BeanFactory:ListableBeanFactory ,HierarchicalBeanFactory,AutowireCapableBeanFactory.
最终实现类是DefaultListableBeanFaction,它实现了全部接口。

多层次的接口:每一个接口都有它使用的场合,主要是为了区分在spring内部在操做过程当中对象的
传递和转化过程当中,对对象的数据访问所作的限制。

ListableBeanFactory接口表示这些Bean是可列表的,
而HierarchicalBeanFactory表示的是这些Bean是有继承关系的,也就是每一个Bean有可能有父Bean。
AutowireCapableBeanFactory接口定义Bean的自动装配规则。
这三个接口共同定义了Bean的集合、Bean之间的关系、以及Bean行为。

Context组件
位置:在org.srpingframework.context。
做用:给spring提供一个运行时的环境,用以保存各个对象的状态。
顶级父类:ApplicationContext.(AC继承了BeanFactory,
也就说明了spring容器运行的主体对象是bean;还继承了ResourceLoader接口,
使得能够访问到任何外部资源)
AplicationContext必需要完成如下几件事:
1.标识一个应用环境;
2.利用BeanFactory建立Bean对象;
3.保存对象关系表;
4.可以捕获各类事件。
Context做为Spring的Ioc容器,基本上整合了Spring的大部分功能,或者说是大部分功能的基础。

Core组件:
重要的组成部分:定义了资源的访问方式。
==========================================

使用线程能够改善程序的五个方面:
1充分利用CPU资源;
2.简化编程模型;
3.简化异步事件的处理;
4.使GUI更有效率;
5.节约成本。
==========================================
继承Thread资源不共享,实现Runnable接口,资源共享。
==========================================
实现Runnable接口比继承Thread类所具备的优点:
1):适合多个相同的程序代码的线程去处理同一个资源
2):能够避免java中的单继承的限制
3):增长程序的健壮性,代码能够被多个线程共享,代码和数据独立。
==========================================
// 开始线程  
public void start( );  
public void run( );  
 
// 挂起和唤醒线程  
public void resume( );     // 不建议使用  使用这两个方法可能会形成一些不可预料的事情发生。所以,这两个方法被标识为deprecated(抗议)标记,
public void suspend( );    // 不建议使用  这代表在之后的jdk版本中这两个方法可能被删除,因此尽可能不要使用这两个方法来操做线程。
public static void sleep(long millis);  
public static void sleep(long millis, int nanos);  
 
// 终止线程  
public void stop( );       // 不建议使用  
public void interrupt( );  
 
// 获得线程状态  
public boolean isAlive( );  
public boolean isInterrupted( );  
public static boolean interrupted( );  
 
// join方法  
public void join( ) throws InterruptedException;  
==========================================
使用 synchronized需注意:
1.synchronized关键字不能继承,若是父类中的某个方法使用了synchronized关键字,而在子类覆盖了此方法,
必须显示地在子类的这个方法中加上synchronized关键字才能够。或者在子类中调用父类中相应的方法。
2.在定义接口方法时不能使用synchronized。
3.构造方法不能使用synchronized关键字,可是可使用synchronized块来进行同步。
4.synchronized能够自由放置,可是不能够放在返回类型的后面。
5.synchronized关键字只能同步方法,不能同步类变量。
6.虽然从表面上看synchronized锁定的是一个方法,但实际上synchronized锁定的是一个类。
若是静态方法用synchronized关键字定义,此静态方法没有执行完毕将不会继续执行其余静态
方法;非静态方法相似,可是静态与非静态不会互相影响。
==========================================
前台框架 ext(自己太大)easyui(应用范围较小)bootstrap
==========================================
struts2 hibernate spring
===============================
C                1971
objective-C 1983
c++            1983 july
python        1991
oak           1991 june
ruby           1993
perl 4.000    1991 march 21
perl 5.000    1994 october 18
visual basic  1991 may 20
delphi          1995 march 5
javascript     1995 december
java             1995 may 23
php           1995
c#               2000 june 26

===============================
web.xml头文件为2.3时,可直接使用<taglib>标签,但版本较高时,<tablib>标签外需使用<jsp-config>嵌套,缘由未知。

<jsp-config>与<web.xml>版本的问题。
===============================
web开发的两种模式:
jsp model 1:用户经过浏览器之间访问web应用的jsp页面,jsp提供UI显示,JavaBeans处理数据库访问和业务逻辑。
优点:直接,简单;对于小型应用,能够很方便、快速的进行开发。
jsp model 2:二者的最大区别是引入了MVC模式的概念。即M(MODEL业务逻辑),V(view系统UI),
C(controller控制)分离,用户的全部请求提交给controller,由controller进行统一分配,而且采用推
的方式将不一样的UI显示给用户。
优点:
1.能够统一控制用户的行为,例如在controller中添加统一日志记录等功能是很是方便的。
2.职责分离,有利于部分的维护。用户不直接访问分散的UI,这样能够经过配置文件或者流程定义的方式,
在不一样的环节,时间将不一样的页面推向给用户。
================================
struts框架是mvc分离的一个杰出做品。
===============================
struts控制器的职责:
1.接受客户请求
2.映射请求到指定的业务操做
3.获取业务操做的结果并以有效的方式提供给客户
4.根据业务操做的结果和当前的状态把不一样的UI推向给客户。
===============================
加载ActionServlet时,init()将被调用,开始初始化过程,初始化过程当中将发生:
1.初始化框架的内部消息绑定,这些消息用来输出提示,警告和错误信息到日志文件中。
org.apache.struts.action.ActionResources用来获取内部消息;
2.加载web.xml中定义的不一样参数,用以控制ActionServlet的不一样行为,这些参数包括
config,detail,debug and convertNull;
3.加载并初始化web.xml中定义的servlet 名称和servlet映射信息。经过初始化,框架的各类DTD被注册,DTD用
来在下一步校验配置文件的有效性;
四、 为默认应用加载并初始化Struts配置文件,配置文件即初始化参数config 指定的文件。默认配置文件被解析,
产生一个ApplicationConfig 对象存于ServletContext 中。能够经过关键字
org.apache.struts.action.APPLICATION 从ServletContext中获取ApplicationConfig;
5 Struts配置文件中指定的每个消息资源都被加载,初始化,并存在ServletContext的合适区域(基于每一个
message-resources元素的key属性),若是key 属性没有设置,则为org.apache.struts.action.MESSAGE;
6 Struts配置文件中声明的每个数据源被加载而且初始化,若是没有配置数据源,这一步跳过;
7 加载并初始化Struts配置文件中指定的插件。每个插件的init()方法被调用;
8 当默认应用加载完成,init()方法判断是否有应用模块须要加载,若是有,重复步骤4—7万成应用模块的加载。
===============================
当ActionServlet接收到客户请求后,会进行一连串的初始化操做,而后会将客户请求转交给合适的处理器进行
处理,这个合适的处理器就是org.apache.struts.action.RequestProcessor或其子类的一个实例(根据Struts
配置文件中的配置)。提供了默认实现,若是须要自定义这些行为,Struts推荐重载这个类而不是ActionServlet.

===============================
Action被设计为线程安全的,在每一个应用中每一个Action类只会被实例化一次,供全部线程共享。
RequestProcessor利用一个HashMap用来保存Action实例。
===============================
若是说ActionServlet是Struts框架的入口,RequestProcessor是消化过滤系统,则org.apache.
struts.action.Action类能够说是整个框架的心脏。它是客户请求和业务操做的链接桥,也能够将
其看做是业务操做的客户代理。一旦肯定并获得了一个action实例,RequestProcessor会调用
action的execute()方法处理客户请求。
Action类被设计为线程安全的,在每一个应用中每一个Action类只会被实例化一次,供全部线程共享。
RequestProcessor利用一个HashMap来保存Action实例。
Action的execute()方法返回一个ActionForward对象。ActionForward对象是JSP页面、JAVA Servlet
等web资源的抽象表现。
经过在Struts配置文件中进行action映射,而后经过关键字去查找一个ActionForward。
===============================
思考题:
1.全部线程共享一个action类实例意味着什么,咱们在编程中须要注意些什么
A:全部的线程都会此类有读写权限,信息的同步与共享,访问的冲突。

2.Action属于MVC中的Controller仍是Model?为何。
A:我脚着是Controller,由于它确定不是Model。Controller的主要做用是接收请求、处理并返回。
符合Action的描述。




===============================
servlet生命周期:
1.servlet实例被建立。
2.调用init(ServletConfig config)方法,(在HttpServlet中实际上在init(ServletConifg config)
中调用了init()因此咱们能够覆盖init()方法来进行初始化)。
3.接受客户请求,调用service方法。(在HttpServlet中,会调用doGet和doPost)
4.调用destroy()方法。
5.实例被销毁。
===============================
多个筛选器的运行顺序取决于下列规则:
1. 将 filter-mapping 元素包含与请求匹配的 url-pattern的筛选器按其在 web.xml 部署描述符中出现的顺序添加到链中。
2. 将 filter-mapping 元素包含与请求匹配的 servlet-name 的筛选器添加在链中与 URL 模式匹配的筛选器以后。
3. 链上先进先出的,链中最后的项目每每是最初请求的资源。
也就是说:

1.以url-pattern方式配置的filter运行时确定先于以servlet-name方式配置的filter
2.以url-partern方式配置的filter中,若是有多个与当前请求匹配,则按web.xml中filter-mapping出现的顺序来运行
3.对于以servlet-name方式配置的filter,若是有多个与当前请求匹配,也是按web.xml中filter-mapping出现的顺序来运行
===============================
Listener>Filter>Servlet
===============================
1.初始化Struts的内部资源文件。该文件路径由ActionServlet的internalName字段指定,默认值是org.apache.struts.action.ActionResources,即Struts的JAR包里的org/apache/struts.action.ActionResources.properties及其国际化版本文件。该文件给出了一些应用运行时,由Struts产生的信息,包括一些异常报错信息,从这里能够看出,咱们彻底可让Struts自身抛出的异常信息中文化。  
2.1 若是web.xml里ActionServlet的配置中给出了config初始化参数,将该参数的值赋给ActionServlet的config字段;  
2.2 若是web.xml里ActionServlet的配置中给出了convertNull初始化参数,若是该参数值是true、yes、on、y、1中的一个,将ActionServlet的convertNull字段设为true;  
2.3 若是ActionServlet的convertNull字段值为true,则覆盖Apache Commons BeanUtils中几个基本数据类型包装类的转换器的默认实现,使当转换数据类型失败时,返回null,默认的实现是抛出异常。
3.将web.xml里ActionServlet配置中的url-pattern的值赋给ActionServlet类的servletMapping字段。实现方式是用Apache Commons Digester解析web.xml,用Digester内置的CallMethodRule和CallParamRule使web.xml被解析时,自动调用ActionServlet类的addServletMapping(String servletName, String urlPattern)方法。  
===============================
struts核心:action、result、interception
===============================
Struts.xml 配置包含result/view类型、action映射、拦截器等struts2的主要配置文件。
Struts.properties配置struts2的框架属性。
Strtus-default.xml在文件在struts-action-x.x.jar中,该文件是应该被包含在struts.xml中的缺省配置。
Velocity.properties重写了velocity的配置文件
Struts-default.vm相对于velocity的缺省配置
=================================
struts.xml配置文件:主要负责管理应用中的action映射,以及该action包含的result定义
主要内容:action、interceptor、packages、namespace
<include>引用分开的配置文件
=================================
还要注意一个问题,就是dispatcher的forward和response.sendRirect。他们都用来跳转jsp和servlet。但他们是不一样的。
不一样点在于
1:sendRirect是重定向,这时候 ,上一个request带过来的参数会所有丢失。如要在请求里加新的参数,请在url后面跟上参数。例如response.sendRirect("/ABC/jsp/login.jsp?name="+name);
forward是跳转,参数还保留在request里。

2:sendRirect的根路径是相对于服务器而言,假设你的服务器根路径是http://localhost:8080/
那么response.sendRirect("/ABC/jsp/login.jsp?");
就至关于跳到http://localhost:8080/ABC/jsp/login.jsp

forward的根路径是相对于项目的根路径而言
resquest.getRequestDispatcher("/ABC/jsp/login.jsp");
至关于跳到http://localhost:8080/ABC/ABC/jsp/login.jsp
注意,路径出错了,因此应该这样写
resquest.getRequestDispatcher("/jsp/login.jsp");
至关于跳到http://localhost:8080/ABC/jsp/login.jsp

顺带一提:<a href="/ABC/jsp/login.jsp">登陆</a>
<form action="/ABC/servlet/login">
这些连接跟sendRirect是同样的,根路径是服务器的根路径。
=================================
XWork提供了不少核心功能:前端拦截器(intercepor)、运行时表单属性验证、类型转换、
强大的表达式语言OGNL(Object Graph Natation Language)和倒置控制(inversion of
Control,IoC)容器等。
======================================
想要正常使用struts2,如下5个包是必须的:
struts2-core-2.0.11.1.jar
xwork-2.0.4.jar
commons-logging-1.0.4.jar
freemarker-2.3.8.jar
ognl.2.6.11.jar
======================================
struts1一般以.do结尾,struts2一般以.action结尾

<!-- <s:form>中Struts2使用table定位 -->
*******************************************************************
smartfoxServer

Mina

 Memcached+mySql

Struts 就分发 , 配置文件 , 过滤器
Hibernate 就配置文件数据源 , 缓存 , hql语句
Spring就上两个框架整合 , 而后更好用一些
====================
在Struts2中最贱的验证数据的方法是使用validate。咱们从ActionSupport类的源代码中能够看到,
ActionSupport类实现了Validateable接口。这个接口只有一个validate方法。若是Action类实现了
这个接口,Struts2在调用execute方法以前首先会调用这个方法,咱们能够在validate方法中验证,
若是发生错误,能够根据错误的level选择字段级错误,仍是动做级错误。而且可使用addFieldError
或addAtionError加入相应的错误信息,若是存在Action或Field错误,strtus2会返回“input”(zhege
并不用开发人员写,由struts2自动返回)。若是返回了input,Struts2就不会再调用execute方法了。
若是不存在错误信息,struts2在最后会调用execute方法。
这两个add方法(addActionEroor、addFieldError)和actionErrors类中的add方法相似。只是add方法
的错误信息须要一个ActionMessage对象,比较麻烦。除了加入错误信息外,还可使用addActionMessage
方法加入成功提交后的信息。当提交成功,能够显示这些信息。
=========================
alt+shift+s   +  r  get/set快捷键
=========================
在Action类中得到HttpServletResponse对象的四种方法:
1.使用Struts2 Aware拦截器
2.使用RequestAware拦截器
3.使用ActionContext类
4.使用ServletActionContext类(最简单)
=========================
HttpServletRequest→ActionMapper→Filters→ActionProxy→ConfigrationManager
                                                                      ↓
                          ActionProxy←ConfigrationManager←Struts.xml
                                   ↓
                               interceptor一、二、3→Action
                                                ↓
interceptor一、二、3←Template(jsp、DOJO、FreeMaker、Velocity、etc)←Result
                   ↓
               HttpServletResponse

 

        拦截器                            过滤器
1.基于java反射机制                    |    基于函数回调
2.不依赖于servlet容器                    |    依赖于servlet容器
3.只能对Action请求起做用                |    能够对几乎全部请求起做用
4.能够访问Action上下文、值栈里的对象    |    不能访问
5.在Action的生命周期中,能够屡次调用    |    只能在容器初始化时被调用一次
============================
为何使用struts2代替struts1
1.struts2的execute方法中的参数不会依赖于servletAPI,实现了servlet解耦,是一种无侵入式的设计;
2.struts2提供了拦截器,利用拦截器能够进行AOP编程,实现权限拦截等功能;
3.struts2提供了类型转换器,能够很容易的对请求参数转换秤须要的类型;
4.提供了同种表现层技术支持,如JSP、freemarker、velocity等
5.能够对指定的方法进行校验,能够轻松的实现表单校验功能
5.提供了全局范围、包范围和action范围的国际化资源文件管理实现。
=============================================
配置文件的优先级:
由高到低:web.xml→struts.properties→struts.xml→struts-plguin.xml(只读性)→struts.default.xml(只读性)
===============================
action的名称探索顺序:彻底对应、逐步追溯到上级目录查找、"/"下查找、默认namespace下查找
===============================
Struts2新特性
1:用来从动做逻辑中分层出横切关注点的拦截器,为了减小或者消除XML配置基于注解(annotation)
的配置方式,一个贯穿整个框架的强大的表达式语言OGNL(object-graph Navigation Language,
对象图导航语言),智齿可变动和可重用UI组件的基于微型MVC模式(mini-MVC-based)的标签API.
===========================================================
struts2 MVC经过3个核心框架组件实现:动做、结果和 FilterDispatcher
===============
新的struts2组件:ActionContext、拦截器、ValueStack和OGNL
=================
chain:用来处理Action链
dispatcher:用来转向页面,一般处理jsp
redirect:重定向到一个URL
redirectAction:重定向到一个Action

freemaker:处理FreeMarker模版
httpheader:控制特殊HTTP行为的结果类型
stream:向浏览器发送inputStream对象,一般用来处理文件下载,还可用于返回AJAX数据
velocity:处理velocity模版
xslt:处理XML/XLST模版
plainText:显示原始文件内容,例如文件源代码
=======================
OGNL来引用、操做存储在框架不一样区域的数据。
interception用途:安全检查(确保访问者是登陆用户)、跟踪日志(记录每一个action)、
效率瓶颈检查(记录每一个action开始和结束的时间以检查程序中的瓶颈)
========================
数据同时存储在动做和ValueStack中。
=========================
struts2核心概念:action、interceptor、和类型转换
==========================
动做的做用:
1.最重要:是为给定请求封装须要作的实际工做
2.在从请求到视图的框架自动数据传输中做为数据的携带者
3.动做必须帮助框架决定哪一个结果应该呈现请求响应中返回的视图。
==========================
框架支持使用依赖注入(dependency injection),使用依赖注入可让如动做这样的代码更整洁、
耦合度更低。
===========================
struts2里面自带param拦截器负责将数据从请求参数转移到动做的JavaBean属性。
================
可知容器对于web.xml的加载过程是context-param >> listener  >> fileter  >> servlet
=================
Action接口也提供了一些有用的String常量,这些常量能够用做返回值来选择合适的结果,常量为:
ERROR、INPUT、LOGIN、NONE、SUCCESS
=================
若是action没有指定动做类的话,Struts2智能默认值会提供继承的默认动做实现,这个默认的动做有
一个空的execute()方法,除了自动返回Action接口的SUCCESS常量做为控制字符串,什么也不作。
================
ActionSupport:它是一个提供了Action接口和其余几个有用接口的默认实现的便利类,提供了诸如
数据验证、错误消息本地化等功能。使用这个类是个好主意。
================
拦截器声明的顺序很重要。
1. 若是在拦截器中,咱们不使用invocation.invoke()来完成堆栈中下一个元素的调用,而是直接返回一个字符串做为执行结果,那么整个执行将被停止。
2. 咱们能够以invocation.invoke()为界,将拦截器中的代码分红2个部分,在invocation.invoke()以前的代码,将会在Action以前被依次执行,而在invocation.invoke()以后的代码,将会在Action以后被逆序执行。
======================
AOP面向切面编程:是OOP的延续。
主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。
=============================
控制流的分离使得workflow拦截器在进入动做的execute()方法以前能够停止整个请求处理而且
重定向回输入页面。这正是拦截器提供的分离类型。
=================
java 5以前List不支持类型指定。
==================
3.5.2:
预处理(preprocessing):从多重请求到请求参数(params拦截器会自动转移到动做上)之间的转换。
后加工(postprocessing):发生在动做执行以后拦截器再次出发时,用来消除上传文件的临时版本。
==================
3.6
Action必需要作的三件事:
1.封装了框架与模型的交互
2.做为请求处理过程当中的数据转移对象
3.负责返回一个控制字符串,框架用它来选择合适的result向用户呈现视图。

==========================

 javascript

相关文章
相关标签/搜索