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:\oracle\oradata\Oracle9i\user_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,无法访问
 
posted @ 2016-06-04 17:53  oceanyang  阅读(196)  评论(0编辑  收藏  举报