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
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;
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;
oracle查看用户:
select username from dba_users
将查询出的某个字段聚集为一列
stragg(filedname)
基础:
多态性:发送消息给某个对象,让该对象自行决定响应何种行为。 通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用
html
System.out.println("message:"+e.getMessage());//获取的是异常的信息。
System.out.println("toString:"+e.toString());//获取的是异常的名字+异常的信息。
e.printStackTrace();//打印异常在堆栈中信息;异常名称+异常信息+异常的位置。
jvm
代理
![](https://images2015.cnblogs.com/blog/640134/201606/640134-20160604175046211-1901393035.png)
这个可以自动生成对象似的循环方式
Java注释
@SuppressWarnings({ "rawtypes", "unchecked" })
rawtypes 标示,当传递泛型参数的时候去掉警告,如下图:
![](https://images2015.cnblogs.com/blog/640134/201606/640134-20160604175127274-117383468.png)
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,无法访问