zoukankan      html  css  js  c++  java
  • 工作中的小零碎

    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用
    来在下一步校验配置文件的有效性;
    4、 为默认应用加载并初始化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
                                       ↓
                                   interceptor1、2、3→Action
                                                    ↓
    interceptor1、2、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向用户呈现视图。

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

     

  • 相关阅读:
    [转]TOP 1比不加TOP慢的疑惑
    .ETL构建数据仓库五步法
    MySQL与Oracle的语法区别
    MySQL的表分区
    ORACLE分区表的使用和管理
    Oracle与MySQL的几点区别
    数据仓库超级大表分区方式改变
    Windows平台下MySQL常用操作与命令
    PowerDesigner使用教程 —— 概念数据模型
    MYSQL千万级数据量的优化方法积累
  • 原文地址:https://www.cnblogs.com/m3Lee/p/4095232.html
Copyright © 2011-2022 走看看