• java笔记


    java代码:
    静态方法调用内部类,要么内部类也为静态,要么用外部类的实例来new内部类!
    HttpServletRequest request = ServletActionContext.getRequest();   
    HttpServletResponse response = ServletActionContext.getResponse();
     
    servlet
     地址栏里是  <url-pattern>里的。
    为了防止被struts2冲突,需要配置拦截器为*.action或其它即可
     
    Servlet也是在web容器中运行的,Servlet的生命周期容器启动的时候,会加载servlet的class,并new出这个对象,然后,当用户请求这个servlet的时候,容器会调用init方法初始化这个 servlet,这也是整个生命周期中只会调用一次的方法,然后,会调用service方法,由这个方法调用doGet或
    doPost方法来响应用户,然后,容器在可用资源紧张或是长期没有对Servlet发出
    请求的情况下,会销毁这个servlet。

    struts是一个基于mvc模式的一个框架,分别是表示层(view)、控制层(controller)、和模型层(Model)。其表示层使用Struts标签库构建。来自客户的所有需要通过框架的请求统一由叫ActionServlet的servlet接收(ActionServlet Struts已经为我们写好了,只要您应用没有什么特别的要求,它基本上都能满足您的要求),根据接收的请求参数和Struts配置(struts-config.xml)中ActionMapping,将请求送给合适的Action去处理,解决由谁做的问题,它们共同构成Struts的控制器。Action则是Struts应用中真正干活的组件,开发人员一般都要在这里耗费大量的时间,它解决的是做什么的问题,它通过调用需要的业务组件(模型)来完成应用的业务,业务组件解决的是如何做的问题,并将执行的结果返回一个代表所需的描绘响应的jsp(或Action)的ActionForward对象给ActionServlet以将响应呈现给客户。
     
    struts
    切记包数量一定要达到三个!!!
     
       <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        <init-param>
            <param-name>config</param-name>
            <param-value>struts-default.xml,struts-plugin.xml,../struts.xml</param-value>
            </init-param>
        </filter>
     
    注意!!!!!!
    这里的<init-param>是在filter标签内部!!!
    struts2流程:
    Struts2流程 
    1、客户端发送请求 (客户端初始化一个指向Servlet容器(如Tomcat)的请求)
    2、请求经过一系列过滤器(如ActionContextCleanUp、SiteMesh等),ActionContextCleanUp-->FilterDispatcher
    3、FilterDispatcher通过ActionMapper来决定这个Request需要调用哪个Action
    4、如果ActionMapper决定调用某个Action,FilterDispatcher把请求的处理交给ActionProxy,
    5、ActionProxy通过ConfigurationManager询问Struts配置文件(Struts.xml),找到需要调用的Action类。
    6、ActionProxy创建一个ActionInvocation的实例
    7、ActionInvocation调用真正的Action,当然这涉及到相关拦截器的调用(interceptor)
    8、Action执行完毕,ActionInvocation创建Result并返回,返回结果前要做些动作也是可以的
    
    
    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。
    struts拦截器怎么样弄。
     
     

    线程

    反射
    super
    ssh灵活搭建方式
    框架session管理
    算法
    排序
    spring mvc
    spring里的hibernate的数据库配置
    1:先配置数据源
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass">
                <value>net.sourceforge.jdbclogger.JdbcLoggerDriver</value>
            </property>
           <property name="jdbcUrl">
        <value>jdbc:jtds:sqlserver://192.168.0.242:1433/tbodtest</value> 
            </property>
            <property name="user">
                  <value>sayetest</value>  
            </property>
            <property name="password">
                  <value>1234Saye</value>  
            </property>
        
    <property name="testConnectionOnCheckin">
    <value>true</value>
    </property>
    <property name="idleConnectionTestPeriod">
    <value>60</value>
    </property>
        </bean>      
    2:再配置sessionfactory
      <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            <property name="dataSource" ref="dataSource"/>
    <property name="mappingDirectoryLocations"> 
         <list> 
             <value>classpath:com/saye/systemset/depart/model</value>
             <value>classpath:com/saye/tdms/headquarters/category/model</value>
             <value>classpath:com/saye/tdms/headquarters/goodsStorage/model</value>
             <value>classpath:com/saye/tdms/headquarters/goodsChange/model</value>
             <value>classpath:com/saye/tdms/headquarters/express/model</value>
             <value>classpath:com/saye/tdms/headquarters/goodsAllot/model</value>
             <value>classpath:com/saye/tdms/baseData/model</value>
             <value>classpath:com/saye/tdms/store/inventory/model</value>
             <value>classpath:com/saye/tdms/store/badGoods/model</value>
             <value>classpath:com/saye/tdms/headquarters/order/model</value>
             <value>classpath:com/saye/tdms/headquarters/purchase/model</value>
             <value>classpath:com/saye/tdms/headquarters/supplier/model</value>
             <value>classpath:com/saye/tdms/mall/model</value>
         </list> 
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
    <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
    <prop key="hibernate.jdbc.use_scrollable_resultset">true</prop>
    <prop key="hibernate.autoReconnect">true</prop>
    <!--  <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop> -->
    <!--  <prop key="hibernate.dialect">com.saye.commons.dialect.OracleDialect</prop> -->
    <!--  <prop key="hibernate.query.substitutions">true 1, false 0</prop>   -->
    <prop key="show_sql">true</prop>
    </props>
    </property>
        </bean>
    3:创建事务,并注入上面的sessionfactory
    <bean id="transactionMgr" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>
    4:配置事务拦截器,并注入上面的事务:
     <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
        <!--  事务拦截器bean需要依赖注入一个事务管理器 -->
            <property name="transactionManager" ref="transactionMgr"/>
         <property name="transactionAttributes">
        <!--  下面定义事务传播属性-->
        <props>
         <prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
         <prop key="execP_*">PROPAGATION_NOT_SUPPORTED</prop> <!-- 调用存储过程用,非事务方式操作 -->
        </props>
        </property>
    </bean>
    5:自动创建代理事务
    <!-- 定义BeanNameAutoProxyCreator-->
        <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
        <!--  指定对满足哪些bean name的bean自动生成业务代理 -->
        <property name="beanNames">
                <!--  下面是所有需要自动创建事务代理的bean-->
                <list>
                    <value>*Manager</value>
                </list>
                <!--  此处可增加其他需要自动创建事务代理的bean-->
        </property>
            <!--  下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
            <property name="interceptorNames">
                <list>
                    <!-- 此处可增加其他新的Interceptor -->
                    <value>transactionInterceptor</value> 
                    <value>kdmsTransactionInterceptor</value>
                    <value>aemsTransactionInterceptor</value>
                    <value>tdmsHistoryTransactionInterceptor</value>
                </list>
            </property>
        </bean>
    6:创建template并注入工厂和数据源,提供给子类applicationspring使用
    <bean id="daoTemplate" abstract="true">
    <property name="sessionFactory" ref="sessionFactory"/>
    <property name="dataSource" ref="dataSource"/>
    </bean>
     
    7:在子类具体的spring配置文件中
    <!-- 商品管理 -->
    <bean id="goodsDao" class="com.saye.tdms.headquarters.goods.dao.impl.GoodsDaoHibernate" parent="daoTemplate"/>
    <bean id="goodsManager" class="com.saye.tdms.headquarters.goods.service.impl.GoodsManagerImpl">
    <property name="goodsDao" ref="goodsDao"></property>
    <property name="kdmsDaseDataDao" ref="kdmsDaseDataDao"></property>
    </bean>
    因为每个dao的bean都应该注入sessionfactory属性,所以,只需要继承daoTemplate就可以了
     
    剩余问题,如何获取request..
     
    类模型,类加载
    设计模式
    json和js互转
    xml
    java网络编程
    webservice
    正则表达式
    js
    session和cookie
    ckeditor
    算法
    学无止境且激进
     
    oracle:
    导出空表

    1、执行sql修改deferred_segment_creation的值 :alter system set deferred_segment_creation=false;

    2、执行sql:    select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0

    or num_rows is null;

    创建用户:

    create user username identified by pwd;

    grant dba to username;

    删除用户:

    select username,sid,serial# from v$session 

    alter system kill session'532,4562' 

    同一个数据库中通过expdb,impdb导出导入,导出时发现type都没有创建,查看日志

    ORA-39083: 对象类型 TYPE 创建失败, 出现错误:
    ORA-02304: 无效的对象标识符文字
    失败的 sql 为:
    CREATE TYPE "TDD21"."NAME_AND_COUNT_T"   OID '0CBDBCB0D49E75F0E050007F01007A60' IS OBJECT (
      OBJECT_NAME varchar2(30),
      UPDATE_COUNT INTEGER);

    原来在Oracle中,每一个type都会分配出唯一的oid编号

    解决方法导入时加入 transform=oid:n (将旧的id映射成新的)
    impdp esttest/reinspection1234@web_192.168.200.10 directory=dump_esttest dumpfile=dumpscott.dmp logfile=exp.log remap_schema=esttest:tdd21  transform=oid:n 
     
    expdp导出的时候注意:
    先建立directory,建立后如果发现计算机中没有则手动建立
    建立好后在导出语句中写上 as 的名称(expdir 而非 exp):
    SQL> create directory expdir as 'e:/exp';
    目录已创建。
    SQL> grant read,write on directory expdir to public;
    授权成功。
    SQL> select * from dba_directories;
    grant read,write on directory expdir to public;
    expdp cdtis/cdtis@orcl dumpfile=cdtis3.dmp directory=expdir
    impdp eas/kingdee@nskf_localhost directory=db_bak dumpfile=EXPDP.
    DMP FULL=y;
     
    创建并指定表空间
    create tablespace user_data
     
    logging  
     
    datafile 'D:oracleoradataOracle9iuser_data.dbf' 
     
    size 50m  
     
    autoextend on  
     
    next 50m maxsize 20480m  
     
    extent management local;  
    alter user 用户名  IDENTIFIED by 口令  default TABLESPACE 表空间;
    oracle查看用户:
     select username from dba_users
     
    将查询出的某个字段聚集为一列
    stragg(filedname)
    基础:
    多态性:发送消息给某个对象,让该对象自行决定响应何种行为。 通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用
     
     
     
     
    html
     

    System.out.println("message:"+e.getMessage());//获取的是异常的信息。

            System.out.println("toString:"+e.toString());//获取的是异常的名字+异常的信息。

            e.printStackTrace();//打印异常在堆栈中信息;异常名称+异常信息+异常的位置。

     

    jvm

     
    代理
     
     
    这个可以自动生成对象似的循环方式

    Java注释
    @SuppressWarnings({ "rawtypes", "unchecked" })
    rawtypes 标示,当传递泛型参数的时候去掉警告,如下图:
     
    java中泛型的使用方法,具体的见 api中的comparator<T> :
    就好比如说List<T>  list只是一个定义的通用的容器,事先是不知道应该放什么类型的内容的,在list类的内部有变量 add  中  有T类型的变量, 所以放指定的任何变量list都可以收纳
    在定义类的时候,可以在类名后面跟上<T> 在将来具体使用的时候指定具体的类型,这样做的目的是复用代码(同一个变量可以反复使用)

     

    为什么,继承了abstractdaohibernate后就不用再实现ictiydao里面的方法?
     
    善用VO,因为好多时候实体返回类型并不能完全满足需求,而且有时候会被@jsonignore限制!
     
    //         if (orgType.endsWith("admin")) {
    //             gesCustomerReserveVO.set
    //         } else {
    //         customerReserve.setOrgId(UserHelper.orgId());
    //         }
     
    DAO叫数据访问对象
    DTO是数据传输对象
    DAO通常是将非对象数据(如关系数据库中的数据)以对象的方式操纵。
    DTO通常用于不同层(UI层、服务层或者域模型层)直接的数据传输,以隔离不同层,降低层间耦合
    
    
    T类型,万能的类型:
        public static <T> T getObj(String json, Class<T> cls) {
            T t = null;
            try {
                t = JSON.parseObject(json, cls);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return t;
        }
     
    注意:
    方法如果没有加修饰符,默认的为protected,无法访问
     
  • 相关阅读:
    36、基于TCP、UDP协议的嵌套字通信
    34、异常以及网络编程
    作业4月15号
    31、反射与内置方法、元类
    30、多态与鸭子类型以及内置函数
    作业4月9号
    29、继承
    作业4月8号
    28、封装
    27、面向对象
  • 原文地址:https://www.cnblogs.com/marineblog/p/5559227.html
Copyright © 2020-2023  润新知