自由飞翔

我在仰望,java之上

统计

留言簿(2)

我关注的blog

阅读排行榜

评论排行榜

2011年9月28日 #

编码至高法则-高内聚低耦合

     摘要: 此法则适合所有语言,咱们以JavaScript和Java两个角度分析一下这个东东。 一、javascript 有这样的一个页面,js、css代码都写在html页面中。 例如:gnj.html v1版本Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-...  阅读全文

posted @ 2019-09-11 15:59 GavinMiao 阅读(218) | 评论 (0)编辑 收藏

Jgoodies FormLayout 小结


一、列与行的参数都由三个部分组成:对齐方式、固定尺寸、调整方式。
1.对齐方式:
1)列对齐有left, center, right, fill.默认fill
2)行对齐有:top, center, bottom, fill. 其中fill表示填充至整个区域。默认center。
2.固定尺寸:
pref表示preferred size,适当大小,即首选尺寸大小。
min表示minimum size,
dlu 表示dialog units,
px, pt, in, mm, cm)分别表示Pixel, Points, Inches, Millimeter, Centimeter。
3. 调整方式:
二、CellConstraints:
cc.xywh(3, 1, 3, 1):表示3列,1行,colspan=3,rowspan=1
三、FormLayout:
  1.FormLayout layout = new FormLayout(
   new ColumnSpec[]{
     FormSpecs.DEFAULT_COLSPEC,
     FormSpecs.GLUE_COLSPEC,
     FormSpecs.DEFAULT_COLSPEC,
     FormSpecs.GLUE_COLSPEC,
     FormSpecs.DEFAULT_COLSPEC,
     FormSpecs.GLUE_COLSPEC},
   new RowSpec[]{
     FormSpecs.DEFAULT_ROWSPEC,
     FormSpecs.GLUE_ROWSPEC,
     FormSpecs.DEFAULT_ROWSPEC,
     FormSpecs.GLUE_ROWSPEC,
     FormSpecs.DEFAULT_ROWSPEC,
     FormSpecs.GLUE_ROWSPEC
   }
  );
2.

FormLayout layout = new FormLayout( 
        "right:pref, 6dlu, 50dlu, 4dlu, center:50dlu", // columns
        "pref, 3dlu, pref, 3dlu, pref"); // rows   





参考文章:
http://hi.baidu.com/lijunwyf/item/a18d95f719ff01da6225d26f

posted @ 2012-09-29 11:29 GavinMiao 阅读(1314) | 评论 (0)编辑 收藏

Vector浅见

例子:
import java.util.*;
public class TestVector{
 public static void main(String[] args){
  Vector v = new Vector();
  v.add(null);
  v.add(new Integer(1));
  v.add("123");
  
  for(Enumeration e = v.elements();e.hasMoreElements();){
   System.out.println(e.nextElement());
  }
  v.insertElementAt("insert",2);
  v.setElementAt("insert",0);
  
  for(Enumeration e = v.elements();e.hasMoreElements();){
   System.out.println(e.nextElement());
  }
  
 }
}

结果:
null
1
123

insert
1
insert
123
 
结论:
vector中可以放入null;
vector可以放入不同类型的对象;
vector是同步的容量自增长的向量;

posted @ 2012-09-24 08:49 GavinMiao 阅读(308) | 评论 (0)编辑 收藏

火车票订票好办法

一、前提须知:
1.北京铁路局:
直属站15个:北京站北京西站天津站天津西站丰台站丰台西站南仓站塘沽站唐山站石家庄站石家庄南站、邯郸站、阳泉站、北京南站、天津西站。
2.郑州铁路局:
直属车站11个:郑州站、郑州北站、郑州东站、洛阳站、新乡站、开封站、商丘站、月山站、长治北站、长治站。
二、
北京电话订票窍门:1、座机打!;2.用手机加区号打!北京铁路局管内,如唐山区号:打0315-95105105,手机打95105105的有效区号:河北省邯郸0310石家庄0311保定0312张家口0313承德0314唐山0315廊坊0316沧州0317衡水0318邢台0319秦皇岛0335山东德州0534山西阳泉0353天津022。订好之后可以在北京取票!!

posted @ 2012-09-18 07:55 GavinMiao 阅读(369) | 评论 (0)编辑 收藏

异常积累:org.hibernate.StaleStateException

ERROR - Exception executing batch: 
org.hibernate.StaleStateException: Batch update returned unexpected row count fr
om update [0]; actual row count: 0; expected: 1

ERROR - Could not synchronize database state with session
org.hibernate.StaleStateException: Batch update returned unexpected row count fr
om update [0]; actual row count: 0; expected: 1


不注意的话,还真的有点无所适从,Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
这个异常是由于主键设置为自增长,而在我们插入记录的时候设置了ID的值导致的。看下我的Hibernate映射文件中ID的定义:

参考文章:http://hi.baidu.com/shirdrn/blog/item/adec1e82d067ddb86c81191c.html

posted @ 2012-04-18 15:33 GavinMiao 阅读(10571) | 评论 (0)编辑 收藏

java.lang.IllegalStateException: Cannot forward after response has been committed

现象:
页面报500.
原因:
在request.getRequestDispatcher("/success.html").forward(request, response);
后面还有未执行的代码,但是已经提交了响应。

posted @ 2012-04-14 09:08 GavinMiao 阅读(472) | 评论 (0)编辑 收藏

UML初接触

1.UML:unified modeling Language(统一建模语言)
2.草图与蓝图:
前者指:手工绘制的、规范度较低的UML模型;
后者指:case工具绘制的正式的、规范的UML模型;
3.不同可视性的符号:
“+”:public   “#”:protected  “-”:private  “~”:package
4.UML主要包含三种图:静态图、动态图、物理图
5.关联关系:用来表示一个对象持有另外一个对象的引用,或是调用另外一个对象的方法
6.类图:


7.类图之间的关联:
—▷▷  —>持有

posted @ 2012-04-13 11:34 GavinMiao 阅读(313) | 评论 (0)编辑 收藏

面试题(互联网网上商城行业)

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-04-12 22:39 GavinMiao 阅读(108) | 评论 (0)编辑 收藏

不用临时变量交换两个数

方法1:
a=a^b;
b=a^b;
a=a^b;
方法2:
a=a+b;
b=a-b;
a=a-b;

posted @ 2012-04-12 11:27 GavinMiao 阅读(403) | 评论 (0)编辑 收藏

易宝支付面试题(根据网上总结)

1.public class TestKnowleage5 {
public static void main(String[] args){
String strValue = "ABCDEFG";
strValue.substring(3);
System.out.println("result1"+strValue);
strValue.concat("123");
System.out.println("result2"+strValue);
String value = new String("ABCDEFG");
System.out.println(strValue==value);
}
}

运行结果:
result1ABCDEFG
result2ABCDEFG
false
2.public class Test{
    public static void main(String[] args){
         int x = 100;
int y = 200;
if(x == y)
System.out.println("not equal");
else
System.out.println("equal");
    }
}

运行结果:
equal

3.public class TestKnowleage5 {
public static void main(String[] args){
try{
new TestKnowleage5().methodA(5);
}catch(IOException e){
System.out.println("caught IOException");
}catch(Exception e){
System.out.println("caught Exception");
}finally{
System.out.println("no Exception");
}
}
public void methodA(int i) throws IOException{
if(i%2 != 0){
throw new IOException("methodA IOException");
}
}
}

运行结果:
caught IOException
no Exception

4.public class TestKnowleage5 {
static boolean isTrue(){
System.out.println("isTrue");
return true;
}
static boolean isFalse(){
System.out.println("isFalse");
return false;
}
public static void main(String[] args){
if(isTrue() || isFalse()){
System.out.println("|| operate return true");
}
if(isFalse() & isTrue()){
System.out.println("& operate return true");
}
}
}

运行结果:
isTrue
|| operate return true
isFalse
isTrue

5.public class TestKnowleage5{
public static void main(String args[]){
MyThread t = new MyThread();
t.run();
t.start();
System.out.println("A");
}
}
class MyThread extends Thread{
public void run(){
try{
Thread.currentThread().sleep(3000);
}catch(InterruptedException e){
}
System.out.println("B");
}
}
运行结果:
BBA或
BAB
6.class A{
void fun1(){
System.out.println(fun2());
}
int fun2(){
return 123;
}
}
public class TestKnowleage5  extends A{
int fun2(){
return 456;
}
public static void main(String[] args){
A a;
TestKnowleage5 b = new TestKnowleage5();
b.fun1();
a = b;
a.fun1();
}
}

运行结果:
456
456
7.class A{
int val;
public int getVal() {
return val;
}
public void setVal(int val) {
this.val = val;
}
}
public class TestKnowleage5{
public static void main(String[] args){
A data = new A();
ArrayList list = new ArrayList();
for(int i=100;i<103;i++){
data.setVal(i);
list.add(data);
}
int j = 0;
while(j<list.size()){
A tmp = (A)list.get(j);
System.out.println("list("+j+")="+tmp.getVal());
j++;
}
}
}

运行结果:
list(0)=102
list(1)=102
list(2)=102

8.hibernate导入大量数据时,为了避免内存中产生大量对象,在编码时注意什么,如何去除?

9.视图与表的区别
10.触发器有哪几种类型
11.
事务操作有那几个步骤
12.写出对应正则表达式:
1)1-6位字母或数字;
[a-zA-Z0-9]{1,6}
2)手机号(只能是139或159开头,11位数字)
1[35][9][0-9]{8}
13.字符串反转:new StringBuilder(str).reverse().toString();
14.写程序:1+2²+3²+...+n²
int func(int n){
    return n==1?1:func(n-1)+n*n
}

15.写一个延迟加载的单例模式:
public class SingleTon{
    private static  SingleTon  instance = null;
    private SingleTon(){}
    public static SingleTon getInstance(){
        if(instance == null){
                synchronized(""){
                    if(instance == null){return new SingleTon();}
                }
        }
        return instance;
    }
}

16.
JSP的9种内置对象:
request:
HttpServletRequest类的实例,
客户端的请求信息被封装在request对象中
response:
HttpServletResponse类的实例,
response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。
out:
out对象是JspWriter类的实例,是向客户端输出内容常用的对象
session:
session对象指的是客户端与服务器的一次会话,从客户端连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例
page:
page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例
application:
ServletContext类的实例,
application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭
exception:
exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象
pageContext:
pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本类名也叫pageContext
config:
config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)
17.session和cookie的区别?
18.JDBC的操作步骤?

posted @ 2012-04-11 11:32 GavinMiao 阅读(1534) | 评论 (0)编辑 收藏

面试题(移动通信方面)

1.方法重载与多态,简述;
2.什么是设计模式?使用过哪些?
3.列出熟悉的java开源项目及简述;
4.一组radio,用alert弹出当前所选的是第几个radio?用原生javascript;
5.function showme(){
Book.prototype.abc = function(){
alert('456');
}
var abook = new Book(1,2);
Book.abc = function(){
alert('123');
}
abook.abc();
Book.abc();
abc();//此方法调用浏览器会报错,未定义
}
function Book(a,b){
this.a = a;
this.b = b;
Book.abc = function(){
alert('def');
}
this.abc = function(){
alert('xyz');
}
abc = function(){
alert('@@@@@@');
}
var abc = function(){
alert('$$$$$$');
}
}

点击按钮调用showme(),页面显示结果为:
第一个弹出框:xyz
第二个弹出框:123

6.线程的四种状态?
7.ext有哪些组件?ext如何与后台交互?
8.HashMap放入、查找、删除,将所有value放入一个数组,得到map中所有内容;List添加、查找、删除;
9.List<Student> student(name,age) 比较oldList<Student>和newList<student>,按名字比较,获得新增的、修改的、删除学生列表;
10.使用过哪些xml技术?怎么实现的?
11.java异常:throws、throw、try、catch、finally,举例,如何处理异常
12.字符串反转:
public class TestKnowleage5 {
public static void main(String[] args){
System.out.println(reverse("abc"));
System.out.println(reverse2("abc"));
System.out.println(reverse3("abc"));
}
public static String reverse(String str){
return new StringBuffer(str).reverse().toString();
}
public static String reverse2(String str){
char[] chs = str.toCharArray();
char[] re = new char[chs.length];
for(int i = 0 ; i<chs.length;i++){
re[i] = chs[chs.length - i - 1]; 
}
return new String(re);
}
public static String reverse3(String str){
char[] chs = str.toCharArray();
String re = ""; 
for(int i = 0;i<chs.length;i++){
re += chs[chs.length - 1 -i];
}
return re;
}
}

posted @ 2012-04-10 22:39 GavinMiao 阅读(524) | 评论 (0)编辑 收藏

面试题(ERP行业)

//此句,编译无法通过,Cannot make a static reference to the non-static field b
1.arrayList、linkedList、vector的区别
2.
写几种J2EE规范并简要描述
3.什么是设计模式?用过哪些设计模式?
4.OO的四大特性是哪些?并简要描述
5.方法重载、多态概念及简要描述;
6.sql常用的优化方法有哪些?
7.sleep()与wait()的区别?
8.
public class TestException {
public static void main(String[] args) {
int i = 1;
switch(i){
case 0:
System.out.println(0);
break;
case 1:
System.out.println(1);
default:
System.out.println(4);
case 2:
System.out.println(2);
case 3:
System.out.println(3);
}
}
}
运行结果:
1
4
2
3
9.HashTable和HashMap的区别
10.怎样理解mvc模式?
11.抽象类、接口的区别?
12.智力题:
有1-7号,7块地,S、U、V、W、X 5个遗产继承者,
S若继承2号,不能继承3号;
3号和4号不能同时继承;
S若继承一块或多块地,则U不能继承
1块地不能被2人合分;

问:若S继承2号地,剩余3个人中,不能同时哪2块地?
A:1和6 B:1和7 c:3和7 d:1和5 e:1和3
13.
public class TestKnowleage5 {
static int a;
int b,c=0;
public static void main(String[] args){
a++;
b++;//此句,编译无法通过,Cannot make a static reference to the non-static field b
c++; //此句,编译无法通过,cannot make a static reference to the non-static field c
}
}


参考文章:

posted @ 2012-04-10 21:59 GavinMiao 阅读(513) | 评论 (0)编辑 收藏

用友面试题(参考网上总结而出)

1,有三个jsp页面:a.jsp b.jsp c.jsp,流程是a.jsp--> b.jsp--> c.jsp,其中a.jsp提交的数据要在c.jsp中访问,用最简单的办法怎么做?不用session。
在b.jsp中放N个hidden隐藏域保存a.jsp中的数据,一起提交到c.jsp,在c.jsp中取出。2.sql server支持集群么?
支持,不过属于热备份类型,不能做负载均衡。不过符合你的条件
首先系统做集群,数据库文件放到磁盘阵列里,双机或多机共同访问磁盘阵列,就可以了,可以集群后做负载均衡;
3.HashTable与HashMap的区别:
1)HashMap非线程安全,HashTable线程安全;
2)HashMap可放一条key为空的记录,任意记录的value可为空,hashTable不可以;
3)hashMap去掉了contains方法,增加了containsKey和containsValue方法;
4.如何理解mvc模式:
mvc是sun提出的model2开发模式,将控制、视图、模型进行了分离;提高了可维护性、扩展性、可移植性、组件的可复用性;
5.SingleTon:
6.对象序列化的含义:
java序列化技术可以使你将一个对象的状态写入一个byte流里,并且可以从其它地方把该byte流里的数据读出来,重新构造一个相同的对象。
这种机制允许你将对象通过网络传播,并且随时可以把对象持久化到数据库、文件等系统里,java的序列化技术是RMI、EJB等技术的基础;
实现方法:implements Serializable标记为可序列化,然后用ObjectOutputStream和ObjectInputStream读写;
7.数据库中的锁包含哪些?
排它锁和共享锁
8.jsp和servlet的区别:
1)简单来说:jsp就是含有java代码的html,servlet就是含有html的java代码;
2)jsp最终被解释成servlet,编译再执行,jsp不过是servlet的另一种编写形式;
3)jsp擅长表示,servlet擅长数据处理,在mvc中jsp处于视图层,servlet处于控制层;
9.oracle在数据库中的交集怎么表示:
1)用intersect操作符 2)用in 语句
9.JNDI、JMS、JTA、RMI:

JNDI:java naming and directory interface java命名目录接口
JMS:java messing service java消息服务
JTA:java transaction api java事务api
RMI:
Remote Method Invocation 远程方法调用

10.事务:

1)ACID属性:
A:atomic 原子性
C:consistent 一致性
I:isolation 隔离性
D:duration 持久性
2)概念:事务就是一系列操作,它们完成一项任务。只要这些操作里有一项没成功,事务就操作失败,发生回滚事件。即撤销前面的操作,这样可以保证数据的一致性。而且可以把操作放在缓存里,等所有操作都成功就提交数据库,这样保证费时的操作都是有效操作。
3)隔离级别 4)传播行为
参考文档:http://wenku.baidu.com/view/56a532eb856a561252d36f81.html

posted @ 2012-04-09 11:32 GavinMiao 阅读(1066) | 评论 (0)编辑 收藏

面试题(某呼叫中心)

1.String b = new String("1"+"2"); -->4个
2.Customer(id,name,phone,country);每个客户均有地区(country)属性,每个地区可有1或多个客户,查询拥有超过10名客户的地区的列表;
3.public interface TreeNode{
    String getName();
    List getChildren();
}
 写一个print()方法,打印各级节点名称.

4.String与StringBuffer的区别?
String
5.ajax名词解释,它的核心价值及原理;
6.事务的概念及名词解释;
7.数据库表之间有几种关系,并举例;
8.Filter的原理,常见用例;
9.视图与表的区别?触发器类型有哪些类型?
10.建表及各种约束;
11.hibernate导入大量数据时,为了避免内存中产生大量对象,在编码时注意什么,如何去除?

posted @ 2012-04-07 00:14 GavinMiao 阅读(752) | 评论 (0)编辑 收藏

String面试题

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-04-06 18:26 GavinMiao 阅读(81) | 评论 (0)编辑 收藏

面试题(通信行业公司)

一、unix:
1.ps -ef|grep tomcat
2.mkdir dir
3.打tar包:tar -cvf XXX.tar XXX
4.解压tar包:tar -xvf XXX.tar
二、java
1.HashMap和HashTable的区别:
HashMap不是线程安全的,
HashTable是线程安全的
HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。
HashTable使用Enumeration,HashMap使用Iterator。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。
Hashtable是基于陈旧的Dictionary类,完成了Map接口;HashMap是Java 1.2引进的Map接口的一个实现(HashMap继承于AbstractMap,AbstractMap完成了Map接口)。
HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
哈希值的使用不同,HashTable直接使用对象的hashCode。
2.什么是java的序列化?如何实现java的序列化:

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

序列化的实现:将需要被序列化的类实现Serializable接口,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

3.什么是java的单例模式?写一个单例模式;
单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

  代码清单1:饿汉式单例类

public class EagerSingleton 

    private static final EagerSingleton m_instance = new EagerSingleton(); 

   /** 
   * 私有的默认构造方法 
   */
 
   private EagerSingleton() { } 

   /** 
   * 静态方法获得单例 
   */ 
   public static EagerSingleton getInstance() 
   {
      return m_instance; 
   }
}

代码清单2:懒汉式单例类

package com.javapatterns.singleton.demos;
public class LazySingleton
{
    private static LazySingleton m_instance = null;


    /**
    * 私有的默认构造方法,保证外界无法直接实例化
    */
    private LazySingleton() { }


    /**
    * 静态方法,返还此类的惟一实例
    */
    public synchronized static LazySingleton getInstance()
    {
        if (m_instance == null)
        {
            m_instance = new LazySingleton();
        }
        return m_instance;
    }
}

4.静态块与构造器在继承中的执行顺序:

public class TestExeuteOrder {

public static void main(String[] args) {
Parent p = new ChildTest();
p = new ChildTest();

}

}
class ChildTest extends Parent{
static{
System.out.println("in child static");
}
public ChildTest(){
System.out.println("in child construtor");
}
}

class Parent{
static{
System.out.println("in parent static");
}
public Parent(){
System.out.println("in parent construtor");
}
}
运行结果:
in parent static
in child static
in parent construtor
in child construtor
in parent construtor
in child construtor
5.成员内部类:
public class TestExeuteOrder{
class Inner{
void test(){
if(TestExeuteOrder.this.flag){
System.out.println("what a funny");
}
}
}
private boolean flag = true;
public TestExeuteOrder(){
new Inner().test();
}
public static void main(String[] args){
new TestExeuteOrder();
}
}
运行结果:
what a funny
6.参数传递:
public class TestExeuteOrder{

public static void main(String[] args){
String a = "ello";
TestExeuteOrder t = new TestExeuteOrder();
t.change(a);
System.out.println(a);
}
public void change(String str){
str += "H";
}
}
结果:
ello
7.参数传递2:
public class TestExeuteOrder{

public static void main(String[] args){
StringBuffer x = new StringBuffer("A");
StringBuffer y = new StringBuffer("B");
change(x,y);
System.out.println(x+" "+y);
}
public static void change(StringBuffer a,StringBuffer b){
a.append(b);
b = a;
}
}
结果为:
AB B
8.

public class TestExeuteOrder{
public static void main(String[] args){
String a = "good";
char[] b = new char[]{'a','b','c'};
method(a,b);
System.out.println("a="+a+"------>b="+new String(b));
}
public static void method(String a,char[] b){
a = "Test ok";
b[0] = 'g';
}
}
结果:
a=good------>b=gbc
三、SQL:

 

1.存储过程与函数的区别:
1)前者,程序头部声明用的是procedure;后者,程序头部声明用的是function;
2)前者,不需要描述返回类型,后者需要;
3)前者可以作为一个独立的pl/sql语句来执行;后者不能独立运行,必须作为表达式的一部分条用;
4)sql语句中不可调用procedure,但可以调用function;
2.查询student表中name重复的记录:

select * from student where name in(select name from student group by sname having count(*) >1);

3.table表中有两列A,B,如果A>B选择A,如果A<B,选择B:

select( case when s1.A>s1.B then s1.A  when s1.A<s1.B then s1.B end) re from student s1;

 

posted @ 2012-03-30 16:00 GavinMiao 阅读(733) | 评论 (0)编辑 收藏

异常积累:NoClassDefFoundError: org/hibernate/ConnectionReleaseMode Error creating bean with name 'sessionFactory'

jar包不全,更新lib目录后,不再报错。

posted @ 2012-03-28 16:06 GavinMiao 阅读(388) | 评论 (0)编辑 收藏

公司口碑及待遇评价的网站

1.公司速查手册 :http://www.b1.tooyard.com/
2.分智网:http://www.fenzhi.com/  
3.我评it:http://wopingit.com/   
4.企业点评网:http://www.71dp.com/   
5.中国企业评价网: http://www.ceea.net.cn/  
6.公司点评网:http://www.gsdpw.com/  
7.企业付费邀请面试:http://www.tradecv.com/

posted @ 2012-03-27 23:13 GavinMiao 阅读(1047) | 评论 (1)编辑 收藏

ftp-java实现

一、利用框架:
1.jre下的rt.jar中sun.net.ftpClient
2.common net 中的ftp包
二、ftp协议认识:
参考规范:RFC 959
1.文件传输协议:file transfer protocol (ftp)
2.名词解释:
DTP:
数据传输过程
EOR:记录尾
PI:协议解释器
NTV:
网络虚拟终端
NVFS:
网络虚拟文件系统
3.
控制连接是建立在USER-PIT和SERVER-PI之间用于交换命令与应答的通信链路。
4.
数据连接是传输数据的全双工连接。传输数据可以发生在服务器DTP和用户DTP之间也可以发生在两个服务器DTP之间。
5.
数据连接只传输数据,控制连接传送命令和响应。
6.
FTP使用Telnet协议进行控制连接
7.




参考文章:http://blog.csdn.net/williamzhou/article/details/215293 

posted @ 2012-03-26 18:03 GavinMiao 阅读(377) | 评论 (0)编辑 收藏

ssh集成中session的管理(转载)

     摘要: 文章来源:http://www.iteye.com/topic/7339711.通过getSession()方法获得session进行操作 Java代码  public class Test  extends HibernateDaoSupport{      ...  阅读全文

posted @ 2012-03-23 15:33 GavinMiao 阅读(4713) | 评论 (0)编辑 收藏

spring2.0学习笔记

一、setter DI:
<bean>
    <property name="">
        <ref bean="bean的name或id"/>
    </property>
    <property name="">
        <!--内部bean-->
        <bean></bean>
    </property>
    <property name="">
        <ref local="只能是同一文件的bean的id"/>
    </property>
    <!--idref元素用来引用其它bean的id,spring会验证id是否存在-->
    <property name="">
        <idref bean=""/>
    </property>
    <!--idref元素的local属性用来引用其它bean的id,spring会验证id是否存在,并且验证与引用的bean是否在同一文件-->
    <property name="">
        <idref local=""/>
    </property>
    <property name="">
        <value></value>
    </property>
    <property name="" ref=""/>
    <property name="" value=""/>
    <property name="">
        <null/>
    </property>
    <property name="">
            <props>
                <prop key=""></prop>
                 <prop key=""></prop>
            </props>
    </property>

    <property name="">
        <list>
            <value></value>
            <ref bean=""/>    
        </list>
    </property>

    <property name="">
        <set>
            <value></value>
            <ref bean=""/>    
        </set>
    </property>

    <property name="">
        <map>
            <entry>
                <key>
                    <value></value>
                </key>
                <value></value>
            </entry>
            <entry key="" value=""/><!--推荐-->
            <entry key="">
                <value>
                </value>
            </entry>
            <entry key-ref="" value-ref=""/>
            <entry>
                <key>
                    <value></value>
                </key>
                <ref bean=""/>
            </entry>
        </map>
    </property>
</bean>
二、contructor DI:
<bean>
    <constructor-arg>
        <ref bean=""/>
    </constructor-arg>
    <constructor-arg ref="bean的name或id"/>
    <constructor-arg value=""/>
    <constructor-arg type="" value=""/>
    <constructor-arg index="" value=""/><!--首选-->
</bean>

posted @ 2012-03-22 17:52 GavinMiao 阅读(338) | 评论 (0)编辑 收藏

spring1.1学习笔记

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-03-21 17:34 GavinMiao 阅读(60) | 评论 (0)编辑 收藏

spring2.5新特性

1.spring2.5完全支持java1.6
2.完全支持Java EE 5
3.spring2.5提供了完整的annotation集合:@Autowired,以及对JSR-250注解@Resource,@PostConstruct,@PreDestroy
4.在classpath中自动搜索带有annotation的组件。
5.spring2.5加入了对bean(...)pointcut元素的支持,在spring定义的bean命名中对指定的命名进行匹配
6.在spring应用中使用AspectJ加载时织入context:load-time-weaver
7.增加,通过context:load-time-weaver和tx:annotation-driven mode="aspectj"联合使用的注解驱动的事务管理
8.对JPA,升级到支持Open JPA1.0
9.2.5显著的扩充了SimpleJdbcTemplate的功能,引入了SimpleJdbcCall和SimpleJdbcInsert操作对象
10,web层,增加了基于注解的Controller
11.spring2.5引入了基于annotation的MVC编程模型,使用@RequestMapping、@RequestParam、@ModelAttribute等等
12.增加对tiles2的支持
13.引入了sping TestContext Framework,它提供了注解驱动的单元和集成测试支持

posted @ 2012-03-20 17:57 GavinMiao 阅读(539) | 评论 (0)编辑 收藏

spring2.0新特性

1.
引入request scope、session scope和可自定义的scope(hooks)
2.
引入了XML 
Schema的namespace,
简化了配置,包括了对bean属性的各种简化,AOP配置的简化,事务配置的简化,JNDI配置的简化等方面
3.spring2.0集成了AspectJ切入点(pointcut)语言和@AspectJ切面(aspect)声明类型
4.支持@AspectJ注解定义切面
5.提供了JPA的抽象层
6.对于JMS,spring2.0提供异步接受消息
7.对于jdbc,增加了NamedParameterJdbcTemplate、SimpleJdbcTemplate
8.对java1.5的支持,结合AspectJ使用@Transactional、使用AspectJ来为domain object进行依赖注入、@AspectJ、@Required、SimpleJdbcTemplate

posted @ 2012-03-20 17:37 GavinMiao 阅读(291) | 评论 (0)编辑 收藏

window下dos窗口中文乱码解决办法


进入注册表:
HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe
新建DWORD值,然后重命名为:CodePage,修改其值为十进制的936

posted @ 2012-03-20 11:16 GavinMiao 阅读(534) | 评论 (0)编辑 收藏

java中的位运算应用

1, a & 0xff 可得到a对应而二进制的最后8位;
2,左移n位--》表示乘以2的N次方
3,  右移n位-->表示除以2的N次方

posted @ 2012-03-19 16:36 GavinMiao 阅读(361) | 评论 (0)编辑 收藏

spring整合struts2

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-03-16 14:55 GavinMiao 阅读(21) | 评论 (0)编辑 收藏

spring2.0整合struts1(转载)

     摘要: 文章来源:http://hi.baidu.com/liuzhe041/blog/item/e12251dcf2ffe053ccbf1ad2.htmlspring 和struts整合 有3种方式,推荐用第三种。下面一一介绍,不管使用哪种方式,都需要在web.xml 中配置 spring的 监听器Java代码 <context-param>   &n...  阅读全文

posted @ 2012-03-16 10:14 GavinMiao 阅读(276) | 评论 (0)编辑 收藏

spring整合hibernate(annotation方式)

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-03-15 11:08 GavinMiao 阅读(72) | 评论 (0)编辑 收藏

spring整合hibernate

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-03-14 17:42 GavinMiao 阅读(67) | 评论 (0)编辑 收藏

java播放wav的基础代码(转载)

 文章来源:http://hi.baidu.com/breezedancer/blog/item/7eebb499680d8f086e068cb9.html 

import javax.sound.sampled.*;
import java.io.*;
public class TestMusic{
 
 private AudioFormat format;
    private byte[] samples;
 
 public static void main(String args[])throws Exception{
  TestMusic sound =new TestMusic("1.wav");
  InputStream stream =new ByteArrayInputStream(sound.getSamples());
        // play the sound
        sound.play(stream);
        // exit
        System.exit(0);
 }
 
    public TestMusic(String filename) {
        try {
            // open the audio input stream
            AudioInputStream stream =AudioSystem.getAudioInputStream(new File(filename));
            format = stream.getFormat();
            // get the audio samples
            samples = getSamples(stream);
        }
        catch (UnsupportedAudioFileException ex) {
            ex.printStackTrace();
        }
        catch (IOException ex) {
            ex.printStackTrace();
        }
   }
   
   public byte[] getSamples() {
        return samples;
    }
   
     private byte[] getSamples(AudioInputStream audioStream) {
        // get the number of bytes to read
        int length = (int)(audioStream.getFrameLength() * format.getFrameSize());

        // read the entire stream
        byte[] samples = new byte[length];
        DataInputStream is = new DataInputStream(audioStream);
        try {
            is.readFully(samples);
        }
        catch (IOException ex) {
            ex.printStackTrace();
        }

        // return the samples
        return samples;
    }
 
 public void play(InputStream source) {

        // use a short, 100ms (1/10th sec) buffer for real-time
        // change to the sound stream
        int bufferSize = format.getFrameSize() *
            Math.round(format.getSampleRate() / 10);
        byte[] buffer = new byte[bufferSize];

        // create a line to play to
        SourceDataLine line;
        try {
            DataLine.Info info =
                new DataLine.Info(SourceDataLine.class, format);
            line = (SourceDataLine)AudioSystem.getLine(info);
            line.open(format, bufferSize);
        }
        catch (LineUnavailableException ex) {
            ex.printStackTrace();
            return;
        }

        // start the line
        line.start();

        // copy data to the line
        try {
            int numBytesRead = 0;
            while (numBytesRead != -1) {
                numBytesRead =
                    source.read(buffer, 0, buffer.length);
                if (numBytesRead != -1) {
                   line.write(buffer, 0, numBytesRead);
                }
            }
        }
        catch (IOException ex) {
            ex.printStackTrace();
        }

        // wait until all data is played, then close the line
        line.drain();
        line.close();

    }


}

posted @ 2012-03-14 14:30 GavinMiao 阅读(1464) | 评论 (0)编辑 收藏

informix小知识

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-03-13 17:05 GavinMiao 阅读(62) | 评论 (0)编辑 收藏

延迟加载

也叫延迟检索或懒加载
一.实现方式:
1.*hbm.xml中的class元素的lazy属性设置为true;
2.*hbm.xml中的set元素的lazy属性设置为true;
3.
@[One|Many]ToOne](fetch=FetchType.LAZY) @LazyToOne(PROXY) @Fetch(SELECT)
@[One|Many]ToOne](fetch=FetchType.EAGER) @LazyToOne(FALSE) @Fetch(JOIN)
@ManyTo[One|Many](fetch=FetchType.LAZY) @LazyCollection(TRUE)@Fetch(SELECT)
@ManyTo[One|Many](fetch=FetchType.EAGER) @LazyCollection(FALSE) @Fetch(JOIN)

参考文章:

posted @ 2012-03-13 10:46 GavinMiao 阅读(345) | 评论 (0)编辑 收藏

hibernate注意点

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-03-13 09:53 GavinMiao 阅读(63) | 评论 (0)编辑 收藏

commit()与flush()的区别

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-03-13 09:23 GavinMiao 阅读(74) | 评论 (0)编辑 收藏

load与get的区别

1.如果数据库没有匹配的记录,load()方法可能会抛出无法恢复的异常(unrecoverable exception);get()方法会返回null;
2.load可以使用延迟加载;get不可以;


load与get的工作原理:
get方法首先查询session缓存,没有的话查询二级缓存,最后查询数据库;
若设置了lazy=true,load方法创建时首先查询session缓存,没有就创建代理,实际使用数据时才查询二级缓存和数据库;
未设置lazy=true时,与get方法相同;
注意:
到底使用谁:如果不确定是否有匹配的行存在,应该使用get方法。

posted @ 2012-03-13 09:02 GavinMiao 阅读(265) | 评论 (0)编辑 收藏

Linux系统参数查询命令

查看操作系统版本:
head -n 1 /etc/issue
Red Hat Enterprise Linux Server release 6.0 (Santiago)
查看cpu信息:
cat /proc/cpuinfo
model name      : Intel(R) Xeon(R) CPU           E5450  @ 3.00GHz
查看内存使用情况:
free -m
查看各分区使用情况:
df -h 
查看指定目录的大小
du -sh <目录名>
查看内存总量:
grep MemTotal /proc/meminfo
查看空闲内存量:
grep MemFree /proc/meminfo
查看实时的内存情况:
top

posted @ 2012-03-12 15:06 GavinMiao 阅读(607) | 评论 (0)编辑 收藏

呼叫中心企业

参考:http://www.ctiforum.com/expo/2012/ccec2012spring/010.htm 

华为技术有限公司
阿尔卡特朗讯
Genesys,阿尔卡特朗讯旗下公司
Dialogic公司
中国联通
中国电信集团号百信息服务有限公司
北京英立讯科技有限公司
杭州远传通信技术有限公司
奥迪坚通讯系统(上海)有限公司
缤特力贸易(苏州)有限公司
新太科技股份有限公司
深圳市东进通讯技术股份有限公司
Teleopti
广州市毅航通信技术有限公司
潮流网络技术有限公司
杭州三汇信息工程有限公司
亿迅(中国)软件有限公司
大唐高鸿数据网络技术股份有限公司
深圳市友邻通讯设备有限公司
北京易才博普奥管理顾问有限公司
北京天润融通科技有限公司
广州市杰音通讯科技有限公司
北京直真信通科技有限公司
广州市北恩电声技术有限公司
北京七星蓝图科技有限公司
北京科特尔泰讯科技有限公司
北京云端时代科技有限公司
北京宏盛高新技术有限公司
北京纽曼腾飞科技有限公司

posted @ 2012-03-09 15:26 GavinMiao 阅读(278) | 评论 (0)编辑 收藏

javascript面向对象

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-03-09 11:14 GavinMiao 阅读(85) | 评论 (0)编辑 收藏

不同厂商JDK下载网址



各厂商JDK官网下载地址: 
1、Oracle JDK,介质分32位和64位,分Linux、Solaris、Windows平台 
http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u26-download-400750.html 
2、HP JDK,介质不分32位和64位,分PA和IA平台 
https://h20392.www2.hp.com/portal/swdepot/displayProductInfo.do?productNumber=HPUXJDKJRE60 
3、IBM JDK,介质分32位和64位 
https://www.ibm.com/developerworks/java/jdk/aix/service.html#i1 


参考文章:
http://shuwen.iteye.com/blog/1149992

posted @ 2012-03-08 15:30 GavinMiao 阅读(866) | 评论 (0)编辑 收藏

转载:Response.ContentType 详细列表

文章来源:http://www.cnblogs.com/chenghm2003/archive/2008/10/19/1314703.html

不同的ContentType 会影响客户端所看到的效果.默认的ContentType为 text/html 也就是网页格式.
代码如:
<% response.ContentType ="text/html" %> 
<!--#i nclude virtual="/ContentType.html" -->

显示的为网页,而
<% response.ContentType ="text/plain" %> 
<!--#i nclude virtual="/sscript/ContentType.html" -->

则会显示html原代码.

以下为一些常用的 ContentType
GIF images 
<% response.ContentType ="image/gif" %> 
<!--#i nclude virtual="/myimage.gif" -->

JPEG images 
<% response.ContentType ="image/jpeg" %> 
<!--#i nclude virtual="/myimage.jpeg" -->

TIFF images 
<% response.ContentType ="image/tiff" %> 
<!--#i nclude virtual="/myimage.tiff" -->

MICROSOFT WORD document 
<% response.ContentType ="application/msword" %> 
<!--#i nclude virtual="/myfile.doc" -->

RTF document 
<% response.ContentType ="application/rtf" %> 
<!--#i nclude virtual="/myfile.rtf" -->

MICROSOFT EXCEL document 
<% response.ContentType ="application/x-excel" %> 
<!--#i nclude virtual="/myfile.xls" -->

MICROSOFT POWERPOINT document 
<% response.ContentType ="application/ms-powerpoint" %> 
<!--#i nclude virtual="/myfile.pff" -->

PDF document 
<% response.ContentType ="application/pdf" %> 
<!--#i nclude virtual="/myfile.pdf" -->

ZIP document 
<% response.ContentType ="application/zip" %> 
<!--#i nclude virtual="/myfile.zip" -->



下面是更详细的ContentType
'ez' => 'application/andrew-inset', 
'hqx' => 'application/mac-binhex40', 
'cpt' => 'application/mac-compactpro', 
'doc' => 'application/msword', 
'bin' => 'application/octet-stream', 
'dms' => 'application/octet-stream', 
'lha' => 'application/octet-stream', 
'lzh' => 'application/octet-stream', 
'exe' => 'application/octet-stream', 
'class' => 'application/octet-stream', 
'so' => 'application/octet-stream', 
'dll' => 'application/octet-stream', 
'oda' => 'application/oda', 
'pdf' => 'application/pdf', 
'ai' => 'application/postscript', 
'eps' => 'application/postscript', 
'ps' => 'application/postscript', 
'smi' => 'application/smil', 
'smil' => 'application/smil', 
'mif' => 'application/vnd.mif', 
'xls' => 'application/vnd.ms-excel', 
'ppt' => 'application/vnd.ms-powerpoint', 
'wbxml' => 'application/vnd.wap.wbxml', 
'wmlc' => 'application/vnd.wap.wmlc', 
'wmlsc' => 'application/vnd.wap.wmlscriptc', 
'bcpio' => 'application/x-bcpio', 
'vcd' => 'application/x-cdlink', 
'pgn' => 'application/x-chess-pgn', 
'cpio' => 'application/x-cpio', 
'csh' => 'application/x-csh', 
'dcr' => 'application/x-director', 
'dir' => 'application/x-director', 
'dxr' => 'application/x-director', 
'dvi' => 'application/x-dvi', 
'spl' => 'application/x-futuresplash', 
'gtar' => 'application/x-gtar', 
'hdf' => 'application/x-hdf', 
'js' => 'application/x-javascript', 
'skp' => 'application/x-koan', 
'skd' => 'application/x-koan', 
'skt' => 'application/x-koan', 
'skm' => 'application/x-koan', 
'latex' => 'application/x-latex', 
'nc' => 'application/x-netcdf', 
'cdf' => 'application/x-netcdf', 
'sh' => 'application/x-sh', 
'shar' => 'application/x-shar', 
'swf' => 'application/x-shockwave-flash', 
'sit' => 'application/x-stuffit', 
'sv4cpio' => 'application/x-sv4cpio', 
'sv4crc' => 'application/x-sv4crc', 
'tar' => 'application/x-tar', 
'tcl' => 'application/x-tcl', 
'tex' => 'application/x-tex', 
'texinfo' => 'application/x-texinfo', 
'texi' => 'application/x-texinfo', 
't' => 'application/x-troff', 
'tr' => 'application/x-troff', 
'roff' => 'application/x-troff', 
'man' => 'application/x-troff-man', 
'me' => 'application/x-troff-me', 
'ms' => 'application/x-troff-ms', 
'ustar' => 'application/x-ustar', 
'src' => 'application/x-wais-source', 
'xhtml' => 'application/xhtml+xml', 
'xht' => 'application/xhtml+xml', 
'zip' => 'application/zip', 
'au' => 'audio/basic', 
'snd' => 'audio/basic', 
'mid' => 'audio/midi', 
'midi' => 'audio/midi', 
'kar' => 'audio/midi', 
'mpga' => 'audio/mpeg', 
'mp2' => 'audio/mpeg', 
'mp3' => 'audio/mpeg', 
'aif' => 'audio/x-aiff', 
'aiff' => 'audio/x-aiff', 
'aifc' => 'audio/x-aiff', 
'm3u' => 'audio/x-mpegurl', 
'ram' => 'audio/x-pn-realaudio', 
'rm' => 'audio/x-pn-realaudio', 
'rpm' => 'audio/x-pn-realaudio-plugin', 
'ra' => 'audio/x-realaudio', 
'wav' => 'audio/x-wav', 
'pdb' => 'chemical/x-pdb', 
'xyz' => 'chemical/x-xyz', 
'bmp' => 'image/bmp', 
'gif' => 'image/gif', 
'ief' => 'image/ief', 
'jpeg' => 'image/jpeg', 
'jpg' => 'image/jpeg', 
'jpe' => 'image/jpeg', 
'png' => 'image/png', 
'tiff' => 'image/tiff', 
'tif' => 'image/tiff', 
'djvu' => 'image/vnd.djvu', 
'djv' => 'image/vnd.djvu', 
'wbmp' => 'image/vnd.wap.wbmp', 
'ras' => 'image/x-cmu-raster', 
'pnm' => 'image/x-portable-anymap', 
'pbm' => 'image/x-portable-bitmap', 
'pgm' => 'image/x-portable-graymap', 
'ppm' => 'image/x-portable-pixmap', 
'rgb' => 'image/x-rgb', 
'xbm' => 'image/x-xbitmap', 
'xpm' => 'image/x-xpixmap', 
'xwd' => 'image/x-xwindowdump', 
'igs' => 'model/iges', 
'iges' => 'model/iges', 
'msh' => 'model/mesh', 
'mesh' => 'model/mesh', 
'silo' => 'model/mesh', 
'wrl' => 'model/vrml', 
'vrml' => 'model/vrml', 
'css' => 'text/css', 
'html' => 'text/html', 
'htm' => 'text/html', 
'asc' => 'text/plain', 
'txt' => 'text/plain', 
'rtx' => 'text/richtext', 
'rtf' => 'text/rtf', 
'sgml' => 'text/sgml', 
'sgm' => 'text/sgml', 
'tsv' => 'text/tab-separated-values', 
'wml' => 'text/vnd.wap.wml', 
'wmls' => 'text/vnd.wap.wmlscript', 
'etx' => 'text/x-setext', 
'xsl' => 'text/xml', 
'xml' => 'text/xml', 
'mpeg' => 'video/mpeg', 
'mpg' => 'video/mpeg', 
'mpe' => 'video/mpeg', 
'qt' => 'video/quicktime', 
'mov' => 'video/quicktime', 
'mxu' => 'video/vnd.mpegurl', 
'avi' => 'video/x-msvideo', 
'movie' => 'video/x-sgi-movie', 
'ice' => 'x-conference/x-cooltalk' 


posted @ 2012-03-07 13:13 GavinMiao 阅读(243) | 评论 (0)编辑 收藏

throws与throw的区别

1.throw是语句抛出一个异常,throws是方法抛出异常;
2.throws可声明多个异常,用逗号分割;
3.throws可单独使用,throw必须与try-catch-finally或throws搭配使用;
4.throws表示可能抛出哪些异常,throw是必定抛出这个异常;

posted @ 2012-03-06 09:48 GavinMiao 阅读(338) | 评论 (0)编辑 收藏

flex入门知识


一、
1、下载flex SDK:
http://opensource.adobe.com/wiki/display/flexsdk/Flex+SDK 
2、将flexSDK_home/bin加入path环境变量
3、创建mxml文件
4、编译mxml文件:
dos 命令:mxmlc --strict=true --file-specs exer.mxml
5、运行SWF文件:
用Adope flash player运行;

注意:
要查看编译时生成as文件,可使用命令:
mxmlc --keep-generated-actionscript --strict=true --file-specs exer.mxml
二、

posted @ 2012-03-02 15:14 GavinMiao 阅读(315) | 评论 (0)编辑 收藏

java.lang.NoSuchFieldError: deferredExpression

java.lang.NoSuchFieldError: deferredExpression at org.apache.taglibs.standard.tag.common.core.ForEachSupport.release(ForEachSupport.java:178) at org.apache.jasper.runtime.TagHandlerPool.release(TagHandlerPool.java:166) at org.apache.jsp.index_jsp._jspDestroy(index_jsp.java:31)
java ee 5 libraries带了一个jstl-1.2.jar
Reference Libraries里面还有jstl-1.1.2.jar
删除一个就OK

posted @ 2012-02-29 17:23 GavinMiao 阅读(1832) | 评论 (0)编辑 收藏

java小知识注意项

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-02-22 17:35 GavinMiao 阅读(39) | 评论 (0)编辑 收藏

CLASS_PATH认识

作用:JRE按CLASS_PATH指定的路径搜索类文件;
注意:
1.一般设置:
CLASS_PATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
2.jdk 1.5以上版本可以不用设置此环境变量;

posted @ 2012-02-22 13:51 GavinMiao 阅读(299) | 评论 (0)编辑 收藏

POI学习

POI所有组件:


posted @ 2012-02-22 10:01 GavinMiao 阅读(286) | 评论 (0)编辑 收藏

tomcat对jsp、servlet版本要求

Apache Tomcat version 5.5 implements the Servlet 2.4 and JavaServer Pages 2.0 specifications  
Apache Tomcat version 6.0 implements the Servlet 2.5 and JavaServer Pages 2.1 specifications 
Apache Tomcat version 7.0 implements the Servlet 3.0 and JavaServer Pages 2.2 
specifications




如果某jar包的META-INF目录下存在对应的tld文件,那么对于JSP1.2+的web 容器,
若把此jar包放在WEB-INF/lib目录下,可以直接引用标签,
不用再web.xml里面配置taglib;

posted @ 2012-02-14 16:31 GavinMiao 阅读(234) | 评论 (0)编辑 收藏

(转载)hiernate 参数

原文地址:http://www.ideagrace.com/html/doc/2007/01/30/08608.html

属性名用途
hibernate.dialect一个Hibernate Dialect类名允许Hibernate针对特定的关系数据库生成优化的SQL. 取值 full.classname.of.Dialect
hibernate.show_sql输出所有SQL语句到控制台. 有一个另外的选择是把org.hibernate.SQL这个log category设为debug。 eg. true | false
hibernate.format_sql在log和console中打印出更漂亮的SQL。 取值 true | false
hibernate.default_schema在生成的SQL中, 将给定的schema/tablespace附加于非全限定名的表名上. 取值 SCHEMA_NAME
hibernate.default_catalog在生成的SQL中, 将给定的catalog附加于非全限定名的表名上. 取值 CATALOG_NAME
hibernate.session_factory_nameSessionFactory创建后,将自动使用这个名字绑定到JNDI中. 取值 jndi/composite/name
hibernate.max_fetch_depth为单向关联(一对一, 多对一)的外连接抓取(outer join fetch)树设置最大深度. 值为0意味着将关闭默认的外连接抓取. 取值 建议在03之间取值
hibernate.default_batch_fetch_size为Hibernate关联的批量抓取设置默认数量. 取值 建议的取值为48, 和16
hibernate.default_entity_mode为由这个SessionFactory打开的所有Session指定默认的实体表现模式. 取值 dynamic-mapdom4jpojo
hibernate.order_updates强制Hibernate按照被更新数据的主键,为SQL更新排序。这么做将减少在高并发系统中事务的死锁。 取值 true | false
hibernate.generate_statistics如果开启, Hibernate将收集有助于性能调节的统计数据. 取值 true | false
hibernate.use_identifer_rollback如果开启, 在对象被删除时生成的标识属性将被重设为默认值. 取值 true | false
hibernate.use_sql_comments如果开启, Hibernate将在SQL中生成有助于调试的注释信息, 默认值为false取值 true | false

表 3.4.  Hibernate JDBC和连接(connection)属性

属性名用途
hibernate.jdbc.fetch_size非零值,指定JDBC抓取数量的大小 (调用Statement.setFetchSize()).
hibernate.jdbc.batch_size非零值,允许Hibernate使用JDBC2的批量更新. 取值 建议取530之间的值
hibernate.jdbc.batch_versioned_data如果你想让你的JDBC驱动从executeBatch()返回正确的行计数 , 那么将此属性设为true(开启这个选项通常是安全的). 同时,Hibernate将为自动版本化的数据使用批量DML. 默认值为falseeg. true | false
hibernate.jdbc.factory_class选择一个自定义的Batcher. 多数应用程序不需要这个配置属性. eg. classname.of.Batcher
hibernate.jdbc.use_scrollable_resultset允许Hibernate使用JDBC2的可滚动结果集. 只有在使用用户提供的JDBC连接时,这个选项才是必要的, 否则Hibernate会使用连接的元数据. 取值 true | false
hibernate.jdbc.use_streams_for_binary在JDBC读写binary (二进制)serializable (可序列化) 的类型时使用流(stream)(系统级属性). 取值 true | false
hibernate.jdbc.use_get_generated_keys在数据插入数据库之后,允许使用JDBC3 PreparedStatement.getGeneratedKeys() 来获取数据库生成的key(键)。需要JDBC3+驱动和JRE1.4+, 如果你的数据库驱动在使用Hibernate的标 识生成器时遇到问题,请将此值设为false. 默认情况下将使用连接的元数据来判定驱动的能力. 取值 true|false
hibernate.connection.provider_class自定义ConnectionProvider的类名, 此类用来向Hibernate提供JDBC连接. 取值 classname.of.ConnectionProvider
hibernate.connection.isolation设置JDBC事务隔离级别. 查看java.sql.Connection来了解各个值的具体意义, 但请注意多数数据库都不支持所有的隔离级别. 取值 1, 2, 4, 8
hibernate.connection.autocommit允许被缓存的JDBC连接开启自动提交(autocommit) (不建议). 取值 true | false
hibernate.connection.release_mode指定Hibernate在何时释放JDBC连接. 默认情况下,直到Session被显式关闭或被断开连接时,才会释放JDBC连接. 对于应用程序服务器的JTA数据源, 你应当使用after_statement, 这样在每次JDBC调用后,都会主动的释放连接. 对于非JTA的连接, 使用after_transaction在每个事务结束时释放连接是合理的. auto将为JTA和CMT事务策略选择after_statement, 为JDBC事务策略选择after_transaction取值 on_close | after_transaction | after_statement | auto
hibernate.connection.<propertyName>将JDBC属性propertyName传递到DriverManager.getConnection()中去.
hibernate.jndi.<propertyName>将属性propertyName传递到JNDI InitialContextFactory中去.

表 3.5.  Hibernate缓存属性

属性名用途
hibernate.cache.provider_class自定义的CacheProvider的类名. 取值 classname.of.CacheProvider
hibernate.cache.use_minimal_puts以频繁的读操作为代价, 优化二级缓存来最小化写操作. 在Hibernate3中,这个设置对的集群缓存非常有用, 对集群缓存的实现而言,默认是开启的. 取值 true|false
hibernate.cache.use_query_cache允许查询缓存, 个别查询仍然需要被设置为可缓存的. 取值 true|false
hibernate.cache.use_second_level_cache能用来完全禁止使用二级缓存. 对那些在类的映射定义中指定<cache>的类,会默认开启二级缓存. 取值 true|false
hibernate.cache.query_cache_factory自定义实现QueryCache接口的类名, 默认为内建的StandardQueryCache取值 classname.of.QueryCache
hibernate.cache.region_prefix二级缓存区域名的前缀. 取值 prefix
hibernate.cache.use_structured_entries强制Hibernate以更人性化的格式将数据存入二级缓存. 取值 true|false

表 3.6.  Hibernate事务属性

属性名用途
hibernate.transaction.factory_class一个TransactionFactory的类名, 用于Hibernate Transaction API (默认为JDBCTransactionFactory). 取值 classname.of.TransactionFactory
jta.UserTransaction一个JNDI名字,被JTATransactionFactory用来从应用服务器获取JTA UserTransaction取值 jndi/composite/name
hibernate.transaction.manager_lookup_class一个TransactionManagerLookup的类名 - 当使用JVM级缓存,或在JTA环境中使用hilo生成器的时候需要该类. 取值 classname.of.TransactionManagerLookup
hibernate.transaction.flush_before_completion如果开启, session在事务完成后将被自动清洗(flush)。 现在更好的方法是使用自动session上下文管理。取值 true | false
hibernate.transaction.auto_close_session如果开启, session在事务完成后将被自动关闭。 现在更好的方法是使用自动session上下文管理。取值 true | false

表 3.7.  其他属性

属性名用途
hibernate.current_session_context_class为"当前" Session指定一个(自定义的)策略。eg. jta | thread | custom.Class
hibernate.query.factory_class选择HQL解析器的实现. 取值 org.hibernate.hql.ast.ASTQueryTranslatorFactory or org.hibernate.hql.classic.ClassicQueryTranslatorFactory
hibernate.query.substitutions将Hibernate查询中的符号映射到SQL查询中的符号 (符号可能是函数名或常量名字). 取值 hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC
hibernate.hbm2ddl.autoSessionFactory创建时,自动检查数据库结构,或者将数据库schema的DDL导出到数据库. 使用 create-drop时,在显式关闭SessionFactory时,将drop掉数据库schema. 取值 validate | update | create | create-drop
hibernate.cglib.use_reflection_optimizer开启CGLIB来替代运行时反射机制(系统级属性). 反射机制有时在除错时比较有用. 注意即使关闭这个优化, Hibernate还是需要CGLIB. 你不能在hibernate.cfg.xml中设置此属性. 取值 true | false

3.4.1.  SQL方言

你应当总是为你的数据库将hibernate.dialect属性设置成正确的 org.hibernate.dialect.Dialect子类. 如果你指定一种方言, Hibernate将为上面列出的一些属性使用合理的默认值, 为你省去了手工指定它们的功夫.

表 3.8.  Hibernate SQL方言 (hibernate.dialect)

RDBMS方言
DB2org.hibernate.dialect.DB2Dialect
DB2 AS/400org.hibernate.dialect.DB2400Dialect
DB2 OS390org.hibernate.dialect.DB2390Dialect
PostgreSQLorg.hibernate.dialect.PostgreSQLDialect
MySQLorg.hibernate.dialect.MySQLDialect
MySQL with InnoDBorg.hibernate.dialect.MySQLInnoDBDialect
MySQL with MyISAMorg.hibernate.dialect.MySQLMyISAMDialect
Oracle (any version)org.hibernate.dialect.OracleDialect
Oracle 9i/10gorg.hibernate.dialect.Oracle9Dialect
Sybaseorg.hibernate.dialect.SybaseDialect
Sybase Anywhereorg.hibernate.dialect.SybaseAnywhereDialect
Microsoft SQL Serverorg.hibernate.dialect.SQLServerDialect
SAP DBorg.hibernate.dialect.SAPDBDialect
Informixorg.hibernate.dialect.InformixDialect
HypersonicSQLorg.hibernate.dialect.HSQLDialect
Ingresorg.hibernate.dialect.IngresDialect
Progressorg.hibernate.dialect.ProgressDialect
Mckoi SQLorg.hibernate.dialect.MckoiDialect
Interbaseorg.hibernate.dialect.InterbaseDialect
Pointbaseorg.hibernate.dialect.PointbaseDialect
FrontBaseorg.hibernate.dialect.FrontbaseDialect
Firebirdorg.hibernate.dialect.FirebirdDialect

表 3.9.  Hibernate日志类别

类别功能
org.hibernate.SQL在所有SQL DML语句被执行时为它们记录日志
org.hibernate.type为所有JDBC参数记录日志
org.hibernate.tool.hbm2ddl在所有SQL DDL语句执行时为它们记录日志
org.hibernate.pretty在session清洗(flush)时,为所有与其关联的实体(最多20个)的状态记录日志
org.hibernate.cache为所有二级缓存的活动记录日志
org.hibernate.transaction为事务相关的活动记录日志
org.hibernate.jdbc为所有JDBC资源的获取记录日志
org.hibernate.hql.AST在解析查询的时候,记录HQL和SQL的AST分析日志
org.hibernate.secure为JAAS认证请求做日志
org.hibernate为任何Hibernate相关信息做日志 (信息量较大, 但对查错非常有帮助)

表 3.10. JTA TransactionManagers

Transaction工厂类应用程序服务器
org.hibernate.transaction.JBossTransactionManagerLookupJBoss
org.hibernate.transaction.WeblogicTransactionManagerLookupWeblogic
org.hibernate.transaction.WebSphereTransactionManagerLookupWebSphere
org.hibernate.transaction.WebSphereExtendedJTATransactionLookupWebSphere 6
org.hibernate.transaction.OrionTransactionManagerLookupOrion
org.hibernate.transaction.ResinTransactionManagerLookupResin
org.hibernate.transaction.JOTMTransactionManagerLookupJOTM
org.hibernate.transaction.JOnASTransactionManagerLookupJOnAS
org.hibernate.transaction.JRun4TransactionManagerLookupJRun4
org.hibernate.transaction.BESTransactionManagerLookupBorland ES

posted @ 2012-02-14 15:07 GavinMiao 阅读(349) | 评论 (0)编辑 收藏

(转载)System.getProperty()

     摘要: 文章来源:http://www.blogjava.net/javafield/archive/2008/01/05/172952.htmlSystem.getProperty() 1public class Information {    2    public st...  阅读全文

posted @ 2012-02-13 16:52 GavinMiao 阅读(375) | 评论 (0)编辑 收藏

ibatis扩展example类对数据库分页的实现(转载)

     摘要: 文章来源:http://blog.csdn.net/lu_yongchao/article/details/6209166mysql:sql代码:select  *  from   user   where ... order   by ....  阅读全文

posted @ 2012-02-03 10:05 GavinMiao 阅读(3188) | 评论 (0)编辑 收藏

异常积累:org.hibernate.hql.ast.QuerySyntaxError: User is not mapped. [from User where username=?]

org.hibernate.hql.ast.QuerySyntaxError: User is not mapped. [from User where username=?]
at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:63)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:196)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:130)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:83)
at org.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:427)
at org.hibernate.impl.SessionImpl.getQueries(SessionImpl.java:884)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:834)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
at org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:603)
at com.demo.hibernate.dao.UserDAOImpl.select(UserDAOImpl.java:19)
at com.demo.hibernate.service.UserServiceImpl.login(UserServiceImpl.java:21)
at com.demo.hibernate.test.UserServiceTest.testLogin(UserServiceTest.java:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by:  User is not mapped.
at org.hibernate.hql.ast.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:85)
at org.hibernate.hql.ast.FromElementFactory.addFromElement(FromElementFactory.java:77)
at org.hibernate.hql.ast.FromClause.addFromElement(FromClause.java:67)
at org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:217)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:2830)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2719)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:513)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:371)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:201)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:151)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:189)
... 28 more
原因:

hibernate.cfg.xml映射.<mapping resource=""/>的配置

类似原因还可能有:
 
hql是写的是table名,不是POJO对象

posted @ 2012-01-19 11:02 GavinMiao 阅读(6134) | 评论 (0)编辑 收藏

java相关下载网址

hibernate:
http://sourceforge.net/projects/hibernate/files/
struts
1:
http://archive.apache.org/dist/struts/  
struts2:

posted @ 2012-01-18 11:35 GavinMiao 阅读(318) | 评论 (0)编辑 收藏

异常积累: HttpURLConnection POST 出现 java.io.FileNotFoundException错误

原因:url未加“\”转义。url格式不正确导致。

posted @ 2012-01-13 13:44 GavinMiao 阅读(750) | 评论 (0)编辑 收藏

Flex入门学习


第一步:看http://www.deepcast.net/wiki/flex  
第二步:看http://www.why100000.com/_articles/show_a_article.asp?tab=tabOtherLanguage&autoid=5(Mcromedia Flex标记语言)
Flex学习网站:
1.
Adobe Flex 2 Component Explorer: 官方的,展示了各种组件的用法,入门必看。   http://examples.adobe.com/flex2/inproduct/sdk/explorer/explorer.html 
2.
很好的一个Flex资源站点 http://www.cflex.net/ 主要看右边一栏
3.http://flexbox.mrinalwadhwa.com/ 
一个收集了网上很多开源组件的站点,是进阶学习的好帮手
4.http://code.google.com/p/flexlib/ 
也是一个开源Flex组件站点,不过与FlexBox不同的是,这个是原创,而FlexBox只是收集。
5.http://www.adobe.com/devnet/flex.html 
Adobe Flex开发者中心,经常会有一些好的教程出现。
6.http://labs.adobe.com/
7.
Flex.org:http://www.flex.org/  官方的,基本上应有尽有。
8.
http://examples.adobe.com/flex2/consulting/styleexplorer/Flex2StyleExplorer.html 
用来设计程序样式风格的工具,很好用,现在源代码已经可以下载。
9.http://www.merhl.com/flex2_samples/filterExplorer/ 
用来调节各种滤镜(filter),非官方的,源代码提供下载。
10.http://wenku.baidu.com/view/739d962e453610661ed9f4c5.html


参考文章:http://blog.csdn.net/microrain/article/details/1601303





posted @ 2011-12-29 10:34 GavinMiao 阅读(277) | 评论 (0)编辑 收藏

转载:在JavaScript中调用Flex方法

文章来源:http://www.cnblogs.com/liuzhong/archive/2011/06/27/2091294.html
一、在JavaScript中调用Flex方法
在Flex中可以用ExternalInterface来调用Flex的方法,途径是
1.通过在Flex应用可调用方法列表中添加指定的公用方法。 在Flex应用中通过调用addCallback()可以把一个方法添加到此列表中。addCallback将一个ActionScript的方法注册为一个JavaScript和VBScript可以调用的方法。
addCallback()函数的定义如下:
addCallback(function_name:String, closure:Function):void
function_name参数就是在Html页面中脚本调用的方法名。closure参数是要调用的本地方法,这个参数可以是一个方法也可以是对象实例。

举个例子:
<mx:Script>
    import flash.external.*;
    public function myFunc():Number {
        return 42;
    }
    public function initApp():void {
        ExternalInterface.addCallback("myFlexFunction",myFunc);
    }
</mx:Script>

2.那么在Html页面中,先获得SWF对象的引用,也就是用<object .../>声明的Swf的Id属性 ,比如说是MyFlexApp。然后就可以用以下方式调用Flex中的方法。
<SCRIPT language='JavaScript' charset='utf-8'>
    function callApp() {
        var x = MyFlexApp.myFlexFunction(); 
        alert(x);
    }
</SCRIPT>
<button onclick="callApp()">Call App</button>



二、在Flex中调用 JavaScript
你可以调用Html页面中的JavaScript,通过与JavaScript的交互,可以改变Style,调用远程方法。还可以将数据传递给Html页面,处理后再返回给Flex,完成这样的功能主要有两种方法:ExternalInterface()和navigateToUrl()。
在Flex中调用JavaScript最简单的方法是使用ExternalInterface(),可以使用此API调用任意JavaScript,传递参数,获得返回值,如果调用失败,Flex抛出一个异常。
ExternalInterface封装了对浏览器支持的检查,可以用available属性来查看。
ExternalInterface的使用非常简单,语法如下:
flash.external.ExternalInterface.call(function_name: String[, arg1, ...]):Object;
参数function_name是要调用的JavaScript的函数名,后面的参数是JavaScript需要的参数。
举个例子说明如何调用JavaScript函数
Flex应用中,添加如下方法:
<mx:Script>
<?xml version="1.0" encoding="iso-8859-1"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Script>
        import flash.external.*;
    
        public function callWrapper():void {
            var f:String = "changeDocumentTitle";
            var m:String = ExternalInterface.call(f,"New Title");
            trace(m); 
        }
    </mx:Script>
    <mx:Button label="Change Document Title" click="callWrapper()"/>
</mx:Application>
Html页面中有如下函数定义:
<SCRIPT LANGUAGE="JavaScript">
    function changeDocumentTitle(a) {
        window.document.title=a;
        return "successful";
    }
</SCRIPT>

posted @ 2011-12-29 00:51 GavinMiao 阅读(369) | 评论 (0)编辑 收藏

转载:http响应码介绍

文章来源:


HTTP 1.1状态代码及其含义

100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新)

101 Switching Protocols 服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新)

200 OK 一切正常,对GET和POST请求的应答文档跟在后面。

201 Created 服务器已经创建了文档,Location头给出了它的URL。

202 Accepted 已经接受请求,但处理尚未完成。

203 Non-Authoritative Information 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝(HTTP 1.1新)。

204 No Content 没有新文档,浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。

205 Reset Content 没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容(HTTP 1.1新)。

206 Partial Content 客户发送了一个带有Range头的GET请求,服务器完成了它(HTTP 1.1新)。

300 Multiple Choices 客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在Location应答头指明。

301 Moved Permanently 客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。

302 Found 类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。注意,在HTTP1.0中对应的状态信息是“Moved Temporatily”。
出现该状态代码时,浏览器能够自动访问新的URL,因此它是一个很有用的状态代码。

注意这个状态代码有时候可以和301替换使用。例如,如果浏览器错误地请求http://host/~user(缺少了后面的斜杠),有的服务器返回301,有的则返回302。

严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。请参见307。

303 See Other 类似于301/302,不同之处在于,如果原来的请求是POST,Location头指定的重定向目标文档应该通过GET提取(HTTP 1.1新)。

304 Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。

305 Use Proxy 客户请求的文档应该通过Location头所指明的代理服务器提取(HTTP 1.1新)。

307 Temporary Redirect 和302(Found)相同。许多浏览器会错误地响应302应答进行重定向,即使原来的请求是POST,即使它实际上只能在POST请求的应答是303时才能重定向。由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GET和POST请求;如果是307应答,则浏览器只能跟随对GET请求的重定向。(HTTP 1.1新)

400 Bad Request 请求出现语法错误。

401 Unauthorized 客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求。

403 Forbidden 资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。

404 Not Found 无法找到指定位置的资源。这也是一个常用的应答。

405 Method Not Allowed 请求方法(GET、POST、HEAD、Delete、PUT、TRACE等)对指定的资源不适用。(HTTP 1.1新)

406 Not Acceptable 指定的资源已经找到,但它的MIME类型和客户在Accpet头中所指定的不兼容(HTTP 1.1新)。

407 Proxy Authentication Required 类似于401,表示客户必须先经过代理服务器的授权。(HTTP 1.1新)

408 Request Timeout 在服务器许可的等待时间内,客户一直没有发出任何请求。客户可以在以后重复同一请求。(HTTP 1.1新)

409 Conflict 通常和PUT请求有关。由于请求和资源的当前状态相冲突,因此请求不能成功。(HTTP 1.1新)

410 Gone 所请求的文档已经不再可用,而且服务器不知道应该重定向到哪一个地址。它和404的不同在于,返回407表示文档永久地离开了指定的位置,而404表示由于未知的原因文档不可用。(HTTP 1.1新)

411 Length Required 服务器不能处理请求,除非客户发送一个Content-Length头。(HTTP 1.1新)

412 Precondition Failed 请求头中指定的一些前提条件失败(HTTP 1.1新)。

413 Request Entity Too Large 目标文档的大小超过服务器当前愿意处理的大小。如果服务器认为自己能够稍后再处理该请求,则应该提供一个Retry-After头(HTTP 1.1新)。

414 Request URI Too Long URI太长(HTTP 1.1新)。

416 Requested Range Not Satisfiable 服务器不能满足客户在请求中指定的Range头。(HTTP 1.1新)

500 Internal Server Error 服务器遇到了意料不到的情况,不能完成客户的请求。

501 Not Implemented 服

posted @ 2011-12-22 14:39 GavinMiao 阅读(1019) | 评论 (0)编辑 收藏

jquery插件编写参考

(function($){
    $.fn.yourName = function(options){
        //各种属性、参数
        }
        var options = $.extend(defaults, options);
        this.each(function(){
        //插件实现代码
        });
    };
})(jQuery);

参考文章:

posted @ 2011-12-13 15:32 GavinMiao 阅读(301) | 评论 (0)编辑 收藏

MyEclipse修改项目名称

项目上右击鼠标-->Properties-->MyEclipse-->Web-->Content Root-->Web content-root-->改成你想要的项目名 即可

posted @ 2011-12-03 23:37 GavinMiao 阅读(7620) | 评论 (1)编辑 收藏

mysql设置编码格式

ALTER DATABASE `databasename` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
ALTER TABLE `tableName` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
ALTER TABLE `tableName` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL 
create table()ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='哈喽啦'
show variables like 'collation_%';
SHOW VARIABLES LIKE 'character%';
SET character_set_client = utf8 ; 
set character_set_server = utf8;
set character_set_connection = utf8;
set character_set_database = utf8;
set character_set_results = utf8;
set character_set_system = utf8;

set collation_connection='utf8_general_ci';
set collation_database=
'utf8_general_ci';
set collation_server='utf8_general_ci';

posted @ 2011-12-01 21:52 GavinMiao 阅读(928) | 评论 (0)编辑 收藏

mysql重启命令

/etc/rc.d/init.d/mysql restart 

posted @ 2011-12-01 21:20 GavinMiao 阅读(269) | 评论 (0)编辑 收藏

rpm及liunx下mysql安装及卸载

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2011-12-01 13:24 GavinMiao 阅读(66) | 评论 (0)编辑 收藏

liunx解压、打包

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2011-12-01 13:09 GavinMiao 阅读(79) | 评论 (0)编辑 收藏

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

解决办法:
cd /etc/init.d
mysqld --user=root start

参考文章:
http://apps.hi.baidu.com/share/detail/854577 
今天服务器遇到了一个很熟悉的问题输入#mysql -u root -pERROR 2002 (HY000):Can't connect to local MySQL server随即上网找寻答案根据大家提供的方法我逐一尝试
方案1.
1.#ps -A|grep mysql 显示类似:1829 ? 00:00:00 mysqld_safe
1876 ? 00:00:31 mysqld
2.#kill -9 1829 
3.#kill -9 1876
4.#/etc/init.d/mysql restart
5.#mysql -u root -p 他的麻烦解决了,我的还没解决!
继续找方案2
先查看 /etc/rc.d/init.d/mysqld status 看看m y s q l 是否已经启动.
另外看看是不是权限问题.
------------------------------------------------------------------------------------
[root@localhost beinan]#chown -R mysql:mysql /var/lib/mysql
[root@localhost beinan]# /etc/init.d/mysqld start
启动 MySQL: [ 确定 ]
[root@localhost lib]# mysqladmin -uroot password '123456'
[root@localhost lib]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 4.1.11

Type 'help;' or '\h' for help. Type '\c' to clear the buffe他的也解决了,我的麻烦还在继续,依然继续寻找
方案3
问题解决了,竟然是max_connections=1000 他说太多了,然后改成500也说多,无奈删之问题解决了。还是不行
方案4 /var/lib/mysql 所有文件权限 改成mysql.mysql 不行不行方案5
摘要:解决不能通过mysql.sock连接MySQL问题 这个问题主要提示是,不能通过 '/tmp/mysql.sock'连到服务器,而php标准配置正是用过'/tmp/mysql.sock',但是一些mysql安装方法将 mysql.sock放在/var/lib/mysql.sock或者其他的什么地方,你可以通过修改/etc/my.cnf文件来修正它,打开文件,可 以看到如下的东东:
[mysqld] 
socket=/var/lib/mysql.sock 
改一下就好了,但也会引起其他的问题,如mysql程序连不上了,再加一点: 
[mysql] 
socket=/tmp/mysql.sock 
或者还可以通过修改php.ini中的配置来使php用其他的mysql.sock来连,这个大家自己去找找

或者用这样的方法:
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

成功了,就是这样ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

OK!



以上资料是网上的资料
我今天遇到的情况是我使用的mysqld_safe --user=mysql &重启mysql发现无法启动mysql,最后用
/etc/init.d/mysqld start启动成功

posted @ 2011-12-01 11:46 GavinMiao 阅读(13985) | 评论 (1)编辑 收藏

转载:tomcat各种配置及编码设置

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2011-12-01 10:49 GavinMiao 阅读(73) | 评论 (0)编辑 收藏

XP 用命令查看和杀死进程

1:查看8080端口占用情况:
C:\Documents and Settings\Administrator>netstat -aon | findstr "8080"
  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       3608

2:查看进程

C:\Documents and Settings\Administrator>tasklist | findstr "3608"
javaw.exe                   3608 Console                 0     69,484 K

3.杀进程:
tskill 3608

posted @ 2011-11-28 15:28 GavinMiao 阅读(567) | 评论 (0)编辑 收藏

页面utf-8,jsp提交中文action中乱码

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2011-11-25 15:11 GavinMiao 阅读(85) | 评论 (0)编辑 收藏

转载:java断言Assertion

     摘要: 文章来源:http://www.cnblogs.com/woodslee/articles/165669.html 一、 Assertion的语法和语义J2SE 1.4在语言上提供了一个新特性,就是assertion(断言)功能,它是该版本在Java语言方面最大的革新。在软件开发中,assertion是一种经典的调试、测试方式,本文将深入解析assertion功能的使用以及其设...  阅读全文

posted @ 2011-11-25 13:20 GavinMiao 阅读(770) | 评论 (0)编辑 收藏

tree和menu控件

Xtree
download及demo页面:http://webfx.eae.net/dhtml/xtree/index.html
api页面:
http://webfx.eae.net/dhtml/xtree/api.html 

参考文章:
http://apps.hi.baidu.com/share/detail/45745962
大量开源menu控件:http://www.open-open.com/ajax/Menu.htm
easy
ui Menu及ext tree等;

posted @ 2011-11-24 15:22 GavinMiao 阅读(285) | 评论 (0)编辑 收藏

iframe页面调用父页面的js函数 (转载)


假若iframe所在的页面here.html有个JS函数为:wode(),它位于页面的<script></script>这个节

然后iframe的src,即里面的页面为:other.html,那么我们在other.html里面就可以如下调用here.html里面的wode这个函数:window.parent.wode();


对于父页面的控件的引用就如法炮制:window.parent.document.getElementById('xxxx')
来自: http://hi.baidu.com/%D3%DA%EA%BB%CC%ED/blog/item/a8384000e1ddec0f1c9583e6.html

posted @ 2011-11-24 12:03 GavinMiao 阅读(816) | 评论 (0)编辑 收藏

mysql导入导出表结构及表数据及执行sql文件

在mysql中执行sql文件的命令 : source  d:\myprogram\database\db.sql;
连接MYSQL:
mysql -h主机地址 -u用户名 -p用户密码
修改密码:
mysqladmin -u用户名 -p旧密码 password 新密码

从数据库导出数据库文件:

1.将数据库mydb导出到e:\MySQL\mydb.sql文件中:

打开开始->运行->输入cmd 进入命令行模式

  1. c:\>MySQLdump -h localhost -u root -p mydb >e:\MySQL\mydb.sql 

然后输入密码,等待一会导出就成功了,可以到目标文件中检查是否成功。

2.将数据库mydb中的mytable导出到e:\MySQL\mytable.sql文件中:

  1. c:\>MySQLdump -h localhost -u root -p mydb mytable>e:\MySQL\mytable.sql 

3.将数据库mydb的结构导出到e:\MySQL\mydb_stru.sql文件中:

  1. c:\>MySQLdump -h localhost -u root -p mydb --add-drop-table >e:\MySQL\mydb_stru.sql 

-h localhost可以省略,其一般在虚拟主机上用

四.从外部文件MySQL导入数据到数据库中:

从e:\MySQL\mydb2.sql中将文件中的SQL语句导入数据库中:

1.从命令行进入MySQL,然后用命令CREATE DATABASE mydb2;创建数据库mydb2。

2.退出MySQL 可以输入命令exit;或者quit;

3.在CMD中输入下列命令:

  1. c:\>MySQL -h localhost -u root -p mydb2 < e:\MySQL\mydb2.sql 

然后输入密码,就OK了。

五.下面谈一下关于导入文件大小限制问题的解决:

默认情况下:MySQL导入文件大小有限制的,最大为2M,所以当文件很大时候,直接无法导入,下面就这个问题的解决列举如下:

1.在php.ini中修改相关参数:

影响MySQL导入文件大小的参数有三个:

  1. memory_limit=128M,upload_max_filesize=2M,post_max_size=8M 

修改upload_ ......

参考文章:
http://database.51cto.com/art/201005/200739.htm

posted @ 2011-11-22 10:54 GavinMiao 阅读(8820) | 评论 (0)编辑 收藏

转载:解决 java.util.MissingResourceException: Can't find bundle for base name com...config, locale zh_CN 错误

文章来源:http://blog.csdn.net/nickshen3/article/details/1698261 
ResourceBundle.getBundle("com.cheng.scrap.config") tells the classloader to load a resource named "config" with package "com.cheng.scrap."  Its fully-qualified-resource-name is"com.cheng.scrap.config"


posted @ 2011-11-17 15:28 GavinMiao 阅读(3618) | 评论 (0)编辑 收藏

MyEclipse + Tomcat项目重命名

文章来源:
问题描述:
原来项目名称是shopping,部署到tomcat后直接输入地址端口后加项目名http://localhost:8080/shopping就可以浏览主页了,后来我把项目名改成shoppingCar,重新部署到tomcat后发现部署过去的项目还是shopping而不是shoppingCar
解决方案:
在MyEclipse里面只把项目重命名是不行的,还要修改以下内容:
项目→properties→MyEclipse→Web下修改Web Context-root的名字为重命名之后的名字即可。

posted @ 2011-11-15 15:09 GavinMiao 阅读(426) | 评论 (0)编辑 收藏

转载:在项目中使用多个数据源-多sessionFactory方案

适用范围:适合SSH架构访问多个数据库,数据库的类型和表结构不必相同,且没有跨库事务的情况(跨库事务最好用分布式事务处理)。

文章来源:http://apps.hi.baidu.com/share/detail/15756344

实现方式:我们可以在spring的配置文件中配置多个sessionFactory,如:
<bean id="aDataSource"
   class="org.apache.commons.dbcp.BasicDataSource"
   destroy-method="close">
   <property name="driverClassName">
    <value>${adriver}</value>
   </property>
   <property name="url">
    <value>${aurl}</value>
   </property>
   <property name="username">
    <value>${ausername}</value>
   </property>
   <property name="password">
    <value>${apassword}</value>
   </property>
</bean>
<bean id="bDataSource"
   class="org.apache.commons.dbcp.BasicDataSource"
   destroy-method="close">
   <property name="driverClassName">
    <value>${bdriver}</value>
   </property>
   <property name="url">
    <value>${burl}</value>
   </property>
   <property name="username">
    <value>${busername}</value>
   </property>
   <property name="password">
    <value>${bpassword}</value>
   </property>
</bean>
<bean id="cDataSource"
   class="org.apache.commons.dbcp.BasicDataSource"
   destroy-method="close">
   <property name="driverClassName">
    <value>${cdriver}</value>
   </property>
   <property name="url">
    <value>${curl}</value>
   </property>
   <property name="username">
    <value>${cusername}</value>
   </property>
   <property name="password">
    <value>${cpassword}</value>
   </property>
</bean>

 

<!-- Hibernate SessionFactorys -->
<bean id="aSessionFactory"
   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
   <property name="dataSource">
    <ref local="aDataSource" />
   </property>
   <property name="mappingResources">
    <list>
     <value>
      .hbm.xml文件
     </value>
    </list>
   </property>
   <property name="hibernateProperties">
    <props>
     <prop key="hibernate.dialect">
      ${ahibernate.dialect}
     </prop>
     <prop key="hibernate.show_sql">true</prop>
     <prop key="format_sql">true</prop>
    </props>
   </property>
</bean>

<bean id="bSessionFactory"
   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
   <property name="dataSource">
    <ref local="bDataSource" />
   </property>
   <property name="mappingResources">
    <list>
     <value>
      .hbm.xml文件
     </value>
    </list>
   </property>
   <property name="hibernateProperties">
    <props>
     <prop key="hibernate.dialect">
      ${bhibernate.dialect}
     </prop>
     <prop key="hibernate.show_sql">true</prop>
     <prop key="format_sql">true</prop>
    </props>
   </property>
</bean>

<bean id="cSessionFactory"
   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
   <property name="dataSource">
    <ref local="cDataSource" />
   </property>
   <property name="mappingResources">
    <list>
     <value>
       .hbm.xml文件
     </value>
    </list>
   </property>
   <property name="hibernateProperties">
    <props>
     <prop key="hibernate.dialect">
      ${chibernate.dialect}
     </prop>
     <prop key="hibernate.show_sql">true</prop>
     <prop key="format_sql">true</prop>
    </props>
   </property>
</bean>

<bean id="sessionFactory" class="com.cintel.dcp.datasource.MultiSessionFactory">
   <property name="sessionFactory"><ref local="aSessionFactory"/></property>
</bean>
注意:最后一个com.cintel.dcp.datasource.MultiSessionFactory要自己实现,它实现了SessionFactory接口和ApplicationContext接口,如下:
package com.cintel.dcp.datasource;

import java.io.Serializable;
import java.sql.Connection;
import java.util.Map;
import java.util.Set;

import javax.naming.NamingException;
import javax.naming.Reference;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException;
import org.hibernate.Interceptor;
import org.hibernate.SessionFactory;
import org.hibernate.StatelessSession;
import org.hibernate.classic.Session;
import org.hibernate.engine.FilterDefinition;
import org.hibernate.metadata.ClassMetadata;
import org.hibernate.metadata.CollectionMetadata;
import org.hibernate.stat.Statistics;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class MultiSessionFactory implements SessionFactory, ApplicationContextAware {
private static final long serialVersionUID = 2064557324203496378L;
private static final Log log = LogFactory.getLog(MultiSessionFactory.class);
private ApplicationContext applicationContext = null;
private SessionFactory sessionFactory = null;

public ApplicationContext getApplicationContext() {
   return applicationContext;
}

public void setApplicationContext(ApplicationContext applicationContext) {
   this.applicationContext = applicationContext;
}

public SessionFactory getSessionFactory(String sessionFactoryName) {
   log.debug("sessionFactoryName:"+sessionFactoryName);
   try{
    if(sessionFactoryName==null||sessionFactoryName.equals("")){
     return sessionFactory;
    }
    return (SessionFactory)this.getApplicationContext().getBean(sessionFactoryName);
   }catch(NoSuchBeanDefinitionException ex){
    throw new RuntimeException("There is not the sessionFactory <name:"+sessionFactoryName+"> in the applicationContext!");
   }
}

public SessionFactory getSessionFactory() {
   String sessionFactoryName = CustomerContextHolder.getCustomerType();
   return getSessionFactory(sessionFactoryName);
}

public void setSessionFactory(SessionFactory sessionFactory) {
   this.sessionFactory = sessionFactory;
}


/* (non-Javadoc)
* @see org.hibernate.SessionFactory#close()
*/
public void close() throws HibernateException {
   getSessionFactory().close();
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#evict(java.lang.Class)
*/
public void evict(Class persistentClass) throws HibernateException {
   getSessionFactory().evict(persistentClass);
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#evict(java.lang.Class, java.io.Serializable)
*/
public void evict(Class persistentClass, Serializable id) throws HibernateException {
   getSessionFactory().evict(persistentClass, id);
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#evictCollection(java.lang.String)
*/
public void evictCollection(String roleName) throws HibernateException {
   getSessionFactory().evictCollection(roleName);
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#evictCollection(java.lang.String, java.io.Serializable)
*/
public void evictCollection(String roleName, Serializable id) throws HibernateException {
   getSessionFactory().evictCollection(roleName, id);
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#evictEntity(java.lang.String)
*/
public void evictEntity(String entityName) throws HibernateException {
   getSessionFactory().evictEntity(entityName);
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#evictEntity(java.lang.String, java.io.Serializable)
*/
public void evictEntity(String entityName, Serializable id) throws HibernateException {
   getSessionFactory().evictEntity(entityName, id);
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#evictQueries()
*/
public void evictQueries() throws HibernateException {
   getSessionFactory().evictQueries();
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#evictQueries(java.lang.String)
*/
public void evictQueries(String cacheRegion) throws HibernateException {
   getSessionFactory().evictQueries(cacheRegion);
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#getAllClassMetadata()
*/
public Map getAllClassMetadata() throws HibernateException {
   return getSessionFactory().getAllClassMetadata();
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#getAllCollectionMetadata()
*/
public Map getAllCollectionMetadata() throws HibernateException {
   return getSessionFactory().getAllCollectionMetadata();
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#getClassMetadata(java.lang.Class)
*/
public ClassMetadata getClassMetadata(Class persistentClass) throws HibernateException {
   return getSessionFactory().getClassMetadata(persistentClass);
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#getClassMetadata(java.lang.String)
*/
public ClassMetadata getClassMetadata(String entityName) throws HibernateException {
   return getSessionFactory().getClassMetadata(entityName);
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#getCollectionMetadata(java.lang.String)
*/
public CollectionMetadata getCollectionMetadata(String roleName) throws HibernateException {
   return getSessionFactory().getCollectionMetadata(roleName);
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#getCurrentSession()
*/
public Session getCurrentSession() throws HibernateException {
   return getSessionFactory().getCurrentSession();
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#getDefinedFilterNames()
*/
public Set getDefinedFilterNames() {
   return getSessionFactory().getDefinedFilterNames();
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#getFilterDefinition(java.lang.String)
*/
public FilterDefinition getFilterDefinition(String filterName) throws HibernateException {
   return getSessionFactory().getFilterDefinition(filterName);
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#getStatistics()
*/
public Statistics getStatistics() {
   return getSessionFactory().getStatistics();
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#isClosed()
*/
public boolean isClosed() {
   return getSessionFactory().isClosed();
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#openSession()
*/
public Session openSession() throws HibernateException {
   return getSessionFactory().openSession();
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#openSession(java.sql.Connection)
*/
public Session openSession(Connection connection) {
   return getSessionFactory().openSession(connection);
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#openSession(org.hibernate.Interceptor)
*/
public Session openSession(Interceptor interceptor) throws HibernateException {
   return getSessionFactory().openSession(interceptor);
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#openSession(java.sql.Connection, org.hibernate.Interceptor)
*/
public Session openSession(Connection connection, Interceptor interceptor) {
   return getSessionFactory().openSession(connection, interceptor);
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#openStatelessSession()
*/
public StatelessSession openStatelessSession() {
   return getSessionFactory().openStatelessSession();
}
/* (non-Javadoc)
* @see org.hibernate.SessionFactory#openStatelessSession(java.sql.Connection)
*/
public StatelessSession openStatelessSession(Connection connection) {
   return getSessionFactory().openStatelessSession(connection);
}
/* (non-Javadoc)
* @see javax.naming.Referenceable#getReference()
*/
public Reference getReference() throws NamingException {
   return getSessionFactory().getReference();
}
}


然后我用一个常量类来标识sessionFactory
public class DynamicDataSourceType {
public static final String A= "aSessionFactory";
public static final String B= "bSessionFactory";
public static final String C= "cSessionFactory";
}

最后一个关键类:用来存放当前正在使用的sessionFactory
public class CustomerContextHolder {

private static final ThreadLocal contextHolder = new ThreadLocal();

public static void setCustomerType(String customerType) {
   Assert.notNull(customerType, "customerType cannot be null");
   contextHolder.set(customerType);
}

public static String getCustomerType() {
   return (String) contextHolder.get();
}

public static void clearCustomerType() {
   contextHolder.remove();
}
}

可以在action、service、dao中进行数据库切换,切换方式:
CustomerContextHolder.setCustomerType(DynamicDataSourceType.A);

以上思路来自javaEye论坛的一个高手,在此标识感谢

posted @ 2011-11-14 16:11 GavinMiao 阅读(848) | 评论 (0)编辑 收藏

转载:动态切换数据源(spring+hibernate)

文章来源:

起因:在当前我手上的一个项目中需要多个数据源,并且来自于不同类型的数据库... 因为很多历史原因.这个项目的住数据源是MySQL,整个系统的CURD都是操作的这个数据库.

但是还有另外两个用于数据采集的数据库: MSSQL,ACCESS.还好只是用于数据采集,在事务上可以不要跨数据库了,这一点节省了好多的工作量.环境:我搭建的测试环境是 spring2.5.6+hibernate3.2
思路:动态切换数据源确切的来说是在同一类型数据库的情况下的。意思就是说 , 在系统中的使用的数据库分布在多台数据库服务器或者在同台服务器上的多个数据库. 在运行时期间根据某种标识符来动态的选择当前操作的数据库.     1.数据源是相同类型的数据库: 一个SessionFactory+动态数据源+一个事务管理器     2.数据源是不同类型的数据库: 根据类型 配置多套SessionFactory模拟:两个mysql数据源+一个Access数据源
实现
1.切换数据源需要标识符,标识符是Object类型
package lhp.example.context;
public enum DBType {
dataSource1, dataSource2;
}

2.然后创建一个用于切换数据源(设置或者获得上下文)的工具类
package lhp.example.context;

public class ContextHolder {
private static final ThreadLocal<Object> holder = new ThreadLocal<Object>();

public static void setDbType(DBType dbType) {
holder.set(dbType);
}

public static DBType getDbType() {
return (DBType) holder.get();
}

public static void clearDbType() {
holder.remove();
}
}

3.创建动态数据源类,继承org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource这个类.
package lhp.example.context;

import java.util.logging.Logger;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

public class DynamicDataSource extends AbstractRoutingDataSource {
public static final Logger logger = Logger.getLogger(DynamicDataSource.class.toString());

@Override
protected Object determineCurrentLookupKey() {
DBType key = ContextHolder.getDbType();//获得当前数据源标识符
//logger.info("当前数据源 :" + key);
return key;
}

}

4.然后配置多个数据源
<!-- 数据源1 : mysql -->
<bean id="dataSource1" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/dec" />
<property name="user" value="root" />
<property name="password" value="" />
</bean>
<!-- 数据源2 : mysql -->
<bean id="dataSource2" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/lms" />
<property name="user" value="root" />
<property name="password" value="" />
</bean>

<!-- 数据源3 : access -->
<bean id="dataSource3" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="sun.jdbc.odbc.JdbcOdbcDriver" />
<property name="jdbcUrl" value="jdbc:odbc:accessTest" />
<property name="user" value="administrator" />
<property name="password" value="XLZX0309" />
</bean>

<!-- mysql 动态数据源设置-->
<bean id="mysqlDynamicDataSource" class="lhp.example.context.DynamicDataSource">
<property name="targetDataSources">
<!-- 标识符类型 -->
<map key-type="lhp.example.context.DBType">
<entry key="dataSource1" value-ref="dataSource1" />
<entry key="dataSource2" value-ref="dataSource2" />
</map>
</property>
<property name="defaultTargetDataSource" ref="dataSource1" />
</bean>

5.配置sessionFactory
<!-- mysql sessionFactory -->
<bean id="mysqlSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="mysqlDynamicDataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop><!--create validate -->
<prop key="hibernate.query.substitutions">true 1, false 0</prop>
</props>
</property>
</bean>

<!-- access sessionFactory -->
<bean id="aceessSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource3" />
<property name="hibernateProperties">
<props>
<!-- access 语法和MSSQL相似 所以用的MSSQL方言,或者可以使用第三方方言 -->
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.jdbc.batch_size">30</prop>
<prop key="hibernate.jdbc.fetch_size">50</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">false</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop><!--create validate -->
<prop key="hibernate.query.substitutions">true 1, false 0</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
<!-- <prop key="hibernate.cache.use_second_level_cache">true</prop> -->
<!-- <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop> -->
<!-- <prop key="hibernate.cache.use_query_cache">true</prop> -->
<!-- <prop key="hibernate.generate_statistics">true</prop> -->
<!-- <prop key="hibernate.cache.provider_configuration_file_resource_path">classpath:ehcache.xml</prop> -->
</props>
</property>
</bean>

6.测试用例
package lhp.example.junit;

import static org.junit.Assert.*;
import java.sql.DatabaseMetaData;
import lhp.example.context.ContextHolder;
import lhp.example.context.DBType;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ServiceTest {
private ApplicationContext context;
//三个数据源的URL
private String dataSource1_URL = "jdbc:mysql://127.0.0.1:3306/dec";
private String dataSource2_URL = "jdbc:mysql://127.0.0.1:3306/lms";
private String dataSource3_URL = "jdbc:odbc:accessTest";
private SessionFactory mysqlSessionFactory;
private SessionFactory aceessSessionFactory;

@Before
public void setUp() throws Exception {
// 选择数据源初始化spring
ContextHolder.setDbType(DBType.dataSource1);
//
String[] xmlFiles = new String[] {
"applicationContext-dataSource.xml",
"applicationContext-hibernate.xml",
"applicationContext-spring.xml" };
//
context = new ClassPathXmlApplicationContext(xmlFiles);
//
mysqlSessionFactory = (SessionFactory) context.getBean("mysqlSessionFactory");
aceessSessionFactory = (SessionFactory) context.getBean("aceessSessionFactory");
}

@SuppressWarnings("deprecation")
@Test
public void mysqlDataSourceTest() {
try {

Session mysqlSession = mysqlSessionFactory.openSession();
// 获得数据库元数据
DatabaseMetaData meatData = mysqlSession.connection().getMetaData();

// 默认启动数据源 dataSource1
//断言当前数据源URL是否是dataSource1的URL
assertEquals(dataSource1_URL, meatData.getURL());

// 切换到数据源 dataSource2
ContextHolder.setDbType(DBType.dataSource2);
mysqlSession = mysqlSessionFactory.openSession();
meatData = mysqlSession.connection().getMetaData();
//断言当前数据源URL是否是dataSource2的URL
assertEquals(dataSource2_URL, meatData.getURL());

} catch (Exception e) {
e.printStackTrace();
}
}

@SuppressWarnings("deprecation")
@Test
public void accessDataSourceTest() {
try {
Session accessSession = aceessSessionFactory.openSession();
// 获得数据库元数据
DatabaseMetaData meatData = accessSession.connection().getMetaData();
//断言当前数据源URL是否是dataSource3的URL
assertEquals(dataSource3_URL, meatData.getURL());


} catch (Exception e) {
e.printStackTrace();
}
}

}

posted @ 2011-11-14 15:37 GavinMiao 阅读(787) | 评论 (0)编辑 收藏

liunx版本查询、创建用户及用户组

1.liunx版本查询:
lsb_release -a或者
 cat /etc/issue或者
cat /etc/redhat-release 
2.
创建用户

useradd
-u  uid,例如:500
-G  附加组
-g  主要组 
-d  家目录 /home/mysql
-s  默认登录shell 例如:/bin/bash
eg:useradd -u 500 -g majorGroup -G  minorGroup -d  /home/username -s /bin/bash USERNAME
userdel -r(连同家目录一起删了)
eg2:useradd -g mysql  -d  /home/test -s /bin/bash test
3.创建组:groupadd

posted @ 2011-11-10 12:08 GavinMiao 阅读(321) | 评论 (0)编辑 收藏

异常积累:java.lang.UnsupportedOperationException (转载)

文章来源:http://hi.baidu.com/%C2%CC%B0%D3%D0%C4%C9%F1%B2%BB%C4%FE/blog/item/139b9b17a3c3b44621a4e935.html    
在使用Arrays.asList()后调用add,remove这些method时出 现java.lang.UnsupportedOperationException异常。这是由于Arrays.asList() 返回java.util.Arrays$ArrayList, 而不是ArrayList。Arrays$ArrayList和ArrayList都是继承AbstractList,remove,add等 method在AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。ArrayList override这些method来对list进行操作,但是Arrays$ArrayList没有override remove(),add()等,所以throw UnsupportedOperationException。
例如:

String[] s = {
"one", "two", "three", "four", "five",
"six", "seven", "eight", "nine", "ten",
};

List a = Arrays.asList(s);

解决办法:List b = new ArrayList(a);然后再去执行add和remove;

posted @ 2011-11-08 20:13 GavinMiao 阅读(1125) | 评论 (0)编辑 收藏

查询:informix数据库端口

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2011-11-08 14:55 GavinMiao 阅读(63) | 评论 (0)编辑 收藏

转载:解决org.hibernate.exception.GenericJDBCException: Cannot open connection

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2011-11-07 12:36 GavinMiao 阅读(31) | 评论 (0)编辑 收藏

异常积累:java.lang.IllegalStateException: No value for key [com.gavin.datasource.M ultiSessionFactory@19fc33d] bound to thread [http-8080-10]

原因:有一个请求将 session .close;
解决办法:
将getSession().close();改为releaseSession(getSession());

posted @ 2011-10-28 09:55 GavinMiao 阅读(3129) | 评论 (1)编辑 收藏

异常积累:org.hibernate.exception.SQLGrammarException: could not execute query-hibernate解释后的sql语句有问题

错误信息
Hibernate: 
    select
        first 0 agentstate0_.id as id2_,
        agentstate0_.agentid as agentid2_,
        agentstate0_.agentpassword as agentpas3_2_,
        agentstate0_.agenttype as agenttype2_,
        agentstate0_.apptype as apptype2_,
        agentstate0_.autoidle as autoidle2_,
        agentstate0_.autoworkinterval as autowork7_2_,
        agentstate0_.autoworkon as autoworkon2_,
        agentstate0_.devicenumber as devicenu9_2_,
        agentstate0_.donotdistribute as donotdi10_2_,
        agentstate0_.group_id as group11_2_,
        agentstate0_.phonetype as phonetype2_ 
    from
        cts_agentinfo agentstate0_ 
    where
        agentstate0_.group_id='999999'
WARN - SQL Error: -201, SQLState: 42000
ERROR - A syntax error has occurred.
ERROR - Error:
org.hibernate.exception.SQLGrammarException: could not execute query
原因1:hibernate方言有问题
原因2:hibernate设置分页的first与max为0;

posted @ 2011-10-27 14:33 GavinMiao 阅读(9287) | 评论 (1)编辑 收藏

异常积累:org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFact ory (Locale not supported.)

tomcat启动时报错,原因如下:
url=jdbc:informix-sqli://192.168.2.114:8888/test:INFORMIXSERVER=testdb1;NEWLOCALE=en_us;NEWCODESET=zh_cn.gb;
中的字符集错误,应改为:
url=jdbc:informix-sqli://192.168.2.114:8888/test:INFORMIXSERVER=testdb1;NEWLOCALE=GB2312,en_us;NEWCODESET=GB2312,8859-1,819;

posted @ 2011-10-26 10:13 GavinMiao 阅读(8842) | 评论 (0)编辑 收藏

informix 命令积累1

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2011-10-26 09:58 GavinMiao 阅读(59) | 评论 (0)编辑 收藏

tomcat 调内存

一、java.lang.OutOfMemoryError: PermGen space 错误解决办法:
修改TOMCAT_HOME/bin/catalina.sh 
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: 
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m 
二、java.lang.OutOfMemoryError: Java heap space 错误解决办法:
解决方法:手动设置Heap size 
修改TOMCAT_HOME/bin/catalina.sh 
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: 
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:MaxNewSize=256m"

注意:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。 

posted @ 2011-10-26 09:51 GavinMiao 阅读(334) | 评论 (0)编辑 收藏

异常积累:org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (转载)

  1. 转载:文章来源:http://lucky16.iteye.com/blog/673903

    此异常是由于Spring提供的Open Session In View而引起的。
    开启OpenSessionInViewFilter这个过滤器的时候FlushMode就已经被默认设置为了MANUAL,如果FlushMode是MANUAL或NEVEL,在操作过程中 hibernate会将事务设置为readonly,所以在增加、删除或修改操作过程中会出现该错误 
    <
    filter>  
  2.        <filter-name>hibernateFilter</filter-name>  
  3.        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>  
  4.           <init-param>  
  5.                <param-name>flushMode</param-name>  
  6.                <param-value>AUTO</param-value>  
  7.            </init-param> 
  8.        <init-param>  
  9.            <param-name>singleSession</param-name>  
  10.            <param-value>true</param-value>  
  11.        </init-param>  
  12.    </filter>  
  13.    <filter-mapping>  
  14.        <filter-name>hibernateFilter</filter-name>  
  15.        <url-pattern>/*</url-pattern>  
  16.    </filter-mapping> 

posted @ 2011-10-21 11:38 GavinMiao 阅读(9859) | 评论 (2)编辑 收藏

异常积累: nested exception is org.hibernate.SessionException: Session is closed解决方案

参考文章:http://blog.csdn.net/xiangsuixinsheng/article/details/6451752
这种方式获得的session在方法执行结束之后不会自动关闭连接,也就是说我们必须通过session.close()或者releaseSession(session)来手动进行关闭,否则会造成内存泄露或者连接耗尽等问题。手动关闭: 

之后,如果对某方法进行事务控制,那么spring框架会自动为我们关闭session,此种情况(session.close())下再执行上述代码,会抛出如下异常:org.springframework.orm.hibernate3.HibernateSystemException:
 Session is closed; nested exception is org.hibernate.SessionException: Session is closed 
提示session已经关闭。但是如果在代码中通过releaseSession(session)的方法来关闭session,则不会抛出异常。

posted @ 2011-10-21 11:20 GavinMiao 阅读(2651) | 评论 (1)编辑 收藏

spring事务--注解--片段

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2011-10-21 01:07 GavinMiao 阅读(64) | 评论 (0)编辑 收藏

转载:Hibernate Annotation 联合主键三种写法

     摘要: 文章来源:http://laodaobazi.iteye.com/blog/903236 Hibernate Annotation 联合主键有三种写法 :第一种:Jlee01.java代码:Java代码  package com.jlee03.compositeId;    import java.io.Se...  阅读全文

posted @ 2011-10-20 19:21 GavinMiao 阅读(63) | 评论 (0)编辑 收藏

linux:统计指定文件中包含某字符串的行数、字数和字节数

  1.  grep  'bb' example | wc       

     结果:2       7      21 

posted @ 2011-10-20 11:41 GavinMiao 阅读(1019) | 评论 (0)编辑 收藏

sql面试题

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2011-10-20 11:34 GavinMiao 阅读(81) | 评论 (0)编辑 收藏

转载:mysql表连接总结

文章来源:http://blog.sina.com.cn/s/blog_3d48dbb70100hyz4.html
作者:涛涛
首先my sql 不支持oracle的(+) 
内连接: 只连接匹配的行
左外连接: 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行
右外连接: 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行
全外连接: 包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。
交叉连接  生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个
行都一一匹配
举个例子吧。
表A
id   name 
1    张
2    李
3    王
表B
id   address   A_id
1    北京      1
2    上海      3
3    南京      10
包容性:A表包容B表,左连接左表是全的.(left join 或 left outer join )
SQL语句如下:
SELECT A.name, B.address
FROM A
LEFT JOIN B ON A.id = B.A_id
查询结果为:
name     address
张     北京
李     NULL
王     上海
包容性:B表包容A表,右连接右表是全的.(right join 或 right outer join )
SQL语句如下:
SELECT A.name, B.address
FROM A
RIGHT JOIN B ON A.id = B.A_id
查询结果为:
name     address
张     北京
王     上海
NULL     南京
排他性:A,B表中至少有1个匹配时,才返回行。两表的交集
SQL语句如下:
select A.name,B.address from A
inner join B
on A.id = B.A_id
查询结果为:
name     address
张     北京
王     上海
inner join  内连接等价于下面的sql:
SELECT A.name, B.address
FROM A, B
WHERE A.id = B.A_id
注释:全外连接返回参与连接的两个数据集合中的全部数据,无论它们是否具有与之相匹配的行。在功能上,它等价于
对这两个数据集合分别进行左外连接和右外连接,然后再使用消去重复行的并操作将上述两个结果集合并为一个结果集
。(full join 或 full outer join )
SQL语句如下:
select * from A
full join B
查询结果为:
id     name     id     address A_id
1     张     1     北京     1
2     李     1     北京     1
3     王     1     北京     1
1     张     2     上海     3
2     李     2     上海     3
3     王     2     上海     3
1     张     3     南京     10
2     李     3     南京     10
3     王     3     南京     10
注释:返回3*3=9条记录,即笛卡尔积
SQL语句如下:
SELECT * FROM A
CROSS JOIN B
查询结果为:
id     name     id     address A_id
1     张     1     北京     1
2     李     1     北京     1
3     王     1     北京     1
1     张     2     上海     3
2     李     2     上海     3
3     王     2     上海     3
1     张     3     南京     10
2     李     3     南京     10
3     王     3     南京     10
CROSS JOIN等价于:
select * from A,B
注意:
1. on A.id = B.id 等同于 using(id)//这里字段名要相同
2. 当 MySQL 在从一个表中检索信息时,你可以提示它选择了哪一个索引。  
如果 EXPLAIN 显示 MySQL 使用了可能的索引列表中错误的索引,这个特性将是很有用的。  
通过指定 USE INDEX (key_list),你可以告诉 MySQL 使用可能的索引中最合适的一个索引在表中查找记录行。  
可选的二选一句法 IGNORE INDEX (key_list) 可被用于告诉 MySQL 不使用特定的索引。    
效率问题:
1.inner join比left join快
注:inner join  内连接等价于下面的sql: SELECT A.name, B.address FROM A, B WHERE A.id = B.A_id
所以一般要用一般的连接就可以了.
2.连接字段建索引
多表外连接
select   A.*,B.f1,B.f2,B.fn,C.f1,C.f2,C.fn   from   A    
  left   join   B   on   A.id=B.id    
  left   join   C   on   C.id=A.id  
  where .......

posted @ 2011-10-20 11:24 GavinMiao 阅读(6481) | 评论 (1)编辑 收藏

异常积累:java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2011-10-14 15:54 GavinMiao 阅读(78) | 评论 (0)编辑 收藏

异常积累:java.lang.IllegalArgumentException: element is limited to 1 occ urrence

此异常表示:同一个元素只能出现一次,
<session-config>在xml中出现了多次。

posted @ 2011-10-13 11:20 GavinMiao 阅读(636) | 评论 (0)编辑 收藏

操控pdf

hehe,待续........

posted @ 2011-09-30 01:29 GavinMiao 阅读(230) | 评论 (0)编辑 收藏

操控xls

sorry,今天列个提纲,待续....

posted @ 2011-09-30 01:29 GavinMiao 阅读(248) | 评论 (0)编辑 收藏

操控word

解析word........

posted @ 2011-09-30 01:28 GavinMiao 阅读(194) | 评论 (0)编辑 收藏

操作json

json认识:
待续.......

posted @ 2011-09-30 01:27 GavinMiao 阅读(298) | 评论 (0)编辑 收藏

操作properties

properties解析.....

posted @ 2011-09-30 01:27 GavinMiao 阅读(251) | 评论 (0)编辑 收藏

操作xml

待续........

posted @ 2011-09-30 01:25 GavinMiao 阅读(236) | 评论 (0)编辑 收藏

转载:JAVA异常机制介绍/如何正确的进行JAVA异常处理

 文章来源:
 作者:Maverick
 blog:http://blog.csdn.net/zhaohuabing  

1  引言
在JAVA语言出现以前,传统的异常处理方式多采用返回值来标识程序出现的异常情况,这种方式虽然为程序员所熟悉,但却有多个坏处。首先,一个API可以返回任意的返回值,而这些返回值本身并不能解释该返回值是否代表一个异常情况发生了和该异常的具体情况,需要调用API的程序自己判断并解释返回值的含义。其次,并没有一种机制来保证异常情况一定会得到处理,调用程序可以简单的忽略该返回值,需要调用API的程序员记住去检测返回值并处理异常情况。这种方式还让程序代码变得晦涩冗长,当进行IO操作等容易出现异常情况的处理时,你会发现代码的很大部分用于处理异常情况的switch分支,程序代码的可读性变得很差。
上面提到的问题,JAVA的异常处理机制提供了很好的解决方案。通过抛出JDK预定义或者自定义的异常,能够表明程序中出现了什么样的异常情况;而且JAVA的语言机制保证了异常一定会得到恰当的处理;合理的使用异常处理机制,会让程序代码清晰易懂。
2 JAVA异常的处理机制
    当程序中抛出一个异常后,程序从程序中导致异常的代码处跳出,java虚拟机检测寻找和try关键字匹配的处理该异常的catch块,如果找到,将控制权交到catch块中的代码,然后继续往下执行程序,try块中发生异常的代码不会被重新执行。如果没有找到处理该异常的catch块,在所有的finally块代码被执行和当前线程的所属的ThreadGroup的uncaughtException方法被调用后,遇到异常的当前线程被中止。
3 JAVA异常的类层次
JAVA异常的类层次如下图所示:

图1 JAVA异常的类层次
Throwable是所有异常的基类,程序中一般不会直接抛出Throwable对象,Exception和Error是Throwable的子类,Exception下面又有RuntimeException和一般的Exception两类。可以把JAVA异常分为三类:
        第一类是Error,Error表示程序在运行期间出现了十分严重、不可恢复的错误,在这种情况下应用程序只能中止运行,例如JAVA 虚拟机出现错误。Error是一种unchecked Exception,编译器不会检查Error是否被处理,在程序中不用捕获Error类型的异常;一般情况下,在程序中也不应该抛出Error类型的异常。
        第二类是RuntimeException, RuntimeException 是一种unchecked Exception,即表示编译器不会检查程序是否对RuntimeException作了处理,在程序中不必捕获RuntimException类型的异常,也不必在方法体声明抛出RuntimeException类。RuntimeException发生的时候,表示程序中出现了编程错误,所以应该找出错误修改程序,而不是去捕获RuntimeException。
        第三类是一般的checked Exception,这也是在编程中使用最多的Exception,所有继承自Exception并且不是RuntimeException的异常都是checked Exception,如图1中的IOException和ClassNotFoundException。JAVA 语言规定必须对checked Exception作处理,编译器会对此作检查,要么在方法体中声明抛出checked Exception,要么使用catch语句捕获checked Exception进行处理,不然不能通过编译。checked Exception用于以下的语义环境:

(1) 该异常发生后是可以被恢复的,如一个Internet连接发生异常被中止后,可以重新连接再进行后续操作。
(2) 程序依赖于不可靠的外部条件,该依赖条件可能出错,如系统IO。
(3) 该异常发生后并不会导致程序处理错误,进行一些处理后可以继续后续操作。

4 JAVA异常处理中的注意事项
合理使用JAVA异常机制可以使程序健壮而清晰,但不幸的是,JAVA异常处理机制常常被错误的使用,下面就是一些关于Exception的注意事项:

1. 不要忽略checked Exception
请看下面的代码:
try
{
  method1();  //method1抛出ExceptionA
}
catch(ExceptionA e)
{
    e.printStackTrace();
}
上面的代码似乎没有什么问题,捕获异常后将异常打印,然后继续执行。事实上在catch块中对发生的异常情况并没有作任何处理(打印异常不能是算是处理异常,因为在程序交付运行后调试信息就没有什么用处了)。这样程序虽然能够继续执行,但是由于这里的操作已经发生异常,将会导致以后的操作并不能按照预期的情况发展下去,可能导致两个结果:
一是由于这里的异常导致在程序中别的地方抛出一个异常,这种情况会使程序员在调试时感到迷惑,因为新的异常抛出的地方并不是程序真正发生问题的地方,也不是发生问题的真正原因;
另外一个是程序继续运行,并得出一个错误的输出结果,这种问题更加难以捕捉,因为很可能把它当成一个正确的输出。
那么应该如何处理呢,这里有四个选择:

(1) 处理异常,进行修复以让程序继续执行。
(2) 重新抛出异常,在对异常进行分析后发现这里不能处理它,那么重新抛出异常,让调用者处理。
(3) 将异常转换为用户可以理解的自定义异常再抛出,这时应该注意不要丢失原始异常信息(见5)。
(4) 不要捕获异常。

因此,当捕获一个unchecked Exception的时候,必须对异常进行处理;如果认为不必要在这里作处理,就不要捕获该异常,在方法体中声明方法抛出异常,由上层调用者来处理该异常。

2. 不要一次捕获所有的异常
请看下面的代码:
try
{
  method1();  //method1抛出ExceptionA
    method2();  //method1抛出ExceptionB
    method3();  //method1抛出ExceptionC
}
catch(Exception e)
{
    ……
}
这是一个很诱人的方案,代码中使用一个catch子句捕获了所有异常,看上去完美而且简洁,事实上很多代码也是这样写的。但这里有两个潜在的缺陷,一是针对try块中抛出的每种Exception,很可能需要不同的处理和恢复措施,而由于这里只有一个catch块,分别处理就不能实现。二是try块中还可能抛出RuntimeException,代码中捕获了所有可能抛出的RuntimeException而没有作任何处理,掩盖了编程的错误,会导致程序难以调试。
下面是改正后的正确代码:
try
{
  method1();  //method1抛出ExceptionA
    method2();  //method1抛出ExceptionB
    method3();  //method1抛出ExceptionC
}
catch(ExceptionA e)
{
    ……
}
catch(ExceptionB e)
{
    ……
}
catch(ExceptionC e)
{
    ……
}


3. 使用finally块释放资源
    finally关键字保证无论程序使用任何方式离开try块,finally中的语句都会被执行。在以下三种情况下会进入finally块:
(1) try块中的代码正常执行完毕。
(2) 在try块中抛出异常。
(3) 在try块中执行return、break、continue。
因此,当你需要一个地方来执行在任何情况下都必须执行的代码时,就可以将这些
代码放入finally块中。当你的程序中使用了外界资源,如数据库连接,文件等,必须将释放这些资源的代码写入finally块中。
必须注意的是,在finally块中不能抛出异常。JAVA异常处理机制保证无论在任何情况下必须先执行finally块然后在离开try块,因此在try块中发生异常的时候,JAVA虚拟机先转到finally块执行finally块中的代码,finally块执行完毕后,再向外抛出异常。如果在finally块中抛出异常,try块捕捉的异常就不能抛出,外部捕捉到的异常就是finally块中的异常信息,而try块中发生的真正的异常堆栈信息则丢失了。
请看下面的代码:

Connection  con = null;
try
{
    con = dataSource.getConnection();
    ……
}
catch(SQLException e)
{
    ……
    throw e;//进行一些处理后再将数据库异常抛出给调用者处理
}
finally
{
    try
    {
        con.close();
    }
    catch(SQLException e)
{
    e.printStackTrace();
    ……
}
}
运行程序后,调用者得到的信息如下
java.lang.NullPointerException
 at myPackage.MyClass.method1(methodl.java:266)
而不是我们期望得到的数据库异常。这是因为这里的con是null的关系,在finally语句中抛出了NullPointerException,在finally块中增加对con是否为null的判断可以避免产生这种情况。

4. 异常不能影响对象的状态
异常产生后不能影响对象的状态,这是异常处理中的一条重要规则。 在一个函数
中发生异常后,对象的状态应该和调用这个函数之前保持一致,以确保对象处于正确的状态中。
如果对象是不可变对象(不可变对象指调用构造函数创建后就不能改变的对象,即
    创建后没有任何方法可以改变对象的状态),那么异常发生后对象状态肯定不会改变。如果是可变对象,必须在编程中注意保证异常不会影响对象状态。有三个方法可以达到这个目的:
(1) 将可能产生异常的代码和改变对象状态的代码分开,先执行可能产生异常的代码,如果产生异常,就不执行改变对象状态的代码。
(2) 对不容易分离产生异常代码和改变对象状态代码的方法,定义一个recover方法,在异常产生后调用recover方法修复被改变的类变量,恢复方法调用前的类状态。
(3) 在方法中使用对象的拷贝,这样当异常发生后,被影响的只是拷贝,对象本身不会受到影响。

5. 丢失的异常
请看下面的代码:
public void method2()
{
try
{
    ……
    method1();  //method1进行了数据库操作
}
catch(SQLException e)
{
    ……
    throw new MyException(“发生了数据库异常:”+e.getMessage);
}
}
public void method3()
{
    try
{
    method2();
}
catch(MyException e)
{
    e.printStackTrace();
    ……
}
}
上面method2的代码中,try块捕获method1抛出的数据库异常SQLException后,抛出了新的自定义异常MyException。这段代码是否并没有什么问题,但看一下控制台的输出:
MyException:发生了数据库异常:对象名称 'MyTable' 无效。
at MyClass.method2(MyClass.java:232)
at MyClass.method3(MyClass.java:255)
原始异常SQLException的信息丢失了,这里只能看到method2里面定义的MyException的堆栈情况;而method1中发生的数据库异常的堆栈则看不到,如何排错呢,只有在method1的代码行中一行行去寻找数据库操作语句了,祈祷method1的方法体短一些吧。
JDK的开发者们也意识到了这个情况,在JDK1.4.1中,Throwable类增加了两个构造方法,public Throwable(Throwable cause)和public Throwable(String message,Throwable cause),在构造函数中传入的原始异常堆栈信息将会在printStackTrace方法中打印出来。但对于还在使用JDK1.3的程序员,就只能自己实现打印原始异常堆栈信息的功能了。实现过程也很简单,只需要在自定义的异常类中增加一个原始异常字段,在构造函数中传入原始异常,然后重载printStackTrace方法,首先调用类中保存的原始异常的printStackTrace方法,然后再调用super.printStackTrace方法就可以打印出原始异常信息了。可以这样定义前面代码中出现的MyException类:
public class MyExceptionextends Exception
{
    //构造函数
    public SMException(Throwable cause)
    {
        this.cause_ = cause;
    }

    public MyException(String s,Throwable cause)
    {
        super(s);
        this.cause_ = cause;
    }
    //重载printStackTrace方法,打印出原始异常堆栈信息
    public void printStackTrace()
    {
        if (cause_ != null)
        {
            cause_.printStackTrace();
        }
        super.printStackTrace(s);
    }

    public void printStackTrace(PrintStream s)
    {
        if (cause_ != null)
        {
            cause_.printStackTrace(s);
        }
        super.printStackTrace(s);
    }

    public void printStackTrace(PrintWriter s)
    {
        if (cause_ != null)
        {
            cause_.printStackTrace(s);
        }
        super.printStackTrace(s);
    }
     //原始异常
     private Throwable cause_;
}

6. 不要使用同时使用异常机制和返回值来进行异常处理
下面是我们项目中的一段代码
try
{
    doSomething(); 
}
catch(MyException e)
{
if(e.getErrcode == -1)
{
    ……
}
if(e.getErrcode == -2)
{
   ……
}
……
}
假如在过一段时间后来看这段代码,你能弄明白是什么意思吗?混合使用JAVA异常处理机制和返回值使程序的异常处理部分变得“丑陋不堪”,并难以理解。如果有多种不同的异常情况,就定义多种不同的异常,而不要像上面代码那样综合使用Exception和返回值。
修改后的正确代码如下:
try
{
    doSomething();  //抛出MyExceptionA和MyExceptionB
}
catch(MyExceptionA e)
{
……
}
catch(MyExceptionB e)
{
    ……
}


7. 不要让try块过于庞大
出于省事的目的,很多人习惯于用一个庞大的try块包含所有可能产生异常的代码,
这样有两个坏处:
阅读代码的时候,在try块冗长的代码中,不容易知道到底是哪些代码会抛出哪些异常,不利于代码维护。
使用try捕获异常是以程序执行效率为代价的,将不需要捕获异常的代码包含在try块中,影响了代码执行的效率。

posted @ 2011-09-30 01:08 GavinMiao 阅读(344) | 评论 (0)编辑 收藏

MyEclipse添加注释模板

     摘要: 参考文章:http://apps.hi.baidu.com/share/detail/34719991  打开MyEclipse1windows-preferences-Java-Code style-Code Templates2然后导入就行了3 注释模板的xml文件解释:例子:<?xml version="1.0" encoding="UTF-8"?><t...  阅读全文

posted @ 2011-09-29 19:59 GavinMiao 阅读(4151) | 评论 (0)编辑 收藏

ActionMessage与ActionError

参考文章:http://hi.baidu.com/develop_skill/blog/item/e09b2d8664cddf2dc75cc36b.html

 如果是想获取error的话,name = org.apache.struts.action.ERROR
 如果是想获取message的话, name = org.apache.struts.action.ACTION_MESSAGE

1.src目录下新建属性文件HtmlErrors.properties,里面有一些key=walue
2.
在struts-config.xml中加入 <message-resources key="HtmlErrors" parameter="HtmlErrors"/>
3.
在action类中声明ActionMessages 属性,并且在setServlet方法 中初始化之 messages = new ActionMessages();
在execute中,添加message:
messages.add("message",new ActionMessage("key")); this.saveErrors(request,messages);//注意此处必须是saveErrors,用saveMessages无效
4.
在jsp文件中加入:
<logic:messagesPresent> <html:errors property="message" bundle="HtmlErrors"> </html:errors> </logic:messagesPresent>

ActionMessages以一个HashMap存储ActionMessage.Map中的key是一个标识,其对应的value是一个List对象,所有的ActionMessage存储在List中.也就是说key标识了一组ActionMessage.

  • ActionMessage 
    • ActionMessage(String key)
      该方法接受一个字符串,字符串是在资源文件种配置的key值,必须在配置文件中进行相关配置.
    • ActionMessage(String key,Object value)
      ActionMessage(String key,Object value0,Object value1)
      ActionMessage(String key,Object value0,Object value1,Object value2)
      ActionMessage(String key,Object value0,Object value1,Object value2,Object value3)
      上面4个方法第一个参数同样是资源文件中配置的key值,同样必须在配置文件中进行相关配置.后面的参数为资源文件中key所对应的信息中需要的参数
    • ActionMessage(String key,Object[] values)
      这种方法第一个参数同上,第二个参数接受一个Object数组,其中保存key在资源文件中对应信息需要的参数.
    • ActionMessage(String msg,false 这个方法显示自定义消息,即消息输出内容为msg。
  • ActionMessages
    • ActionMessages.add(String property,ActionMessage message)
      第一个参数property对应于<html:messages>标签中的property属性
      , property的值一般采用ActionMessages类中的静态常量ActionMessages.GLOBAL_MESSAGE,也可以自己定义一个key.
    • 该方法执行时,先判断ActionMessages中有没有该key,如果没有就新添加对key-List键值对;如果有同样的key,就先获取该key对应的Value并转换为List对象,然后将(ActionMessage)message添加进List对象中.
    • ActionMessages.add(ActionMessages ams)
      该方法将参数中保存的ActionMessage合并到调用ActionMessages中.
  • Action及其所有子类
    • addMessages(HttpServletRequest request,ActionMessages messages)
      该方法首先检查request对象中是否有ActionMessages对象,如果有对象,则将接收的ActionMessages合并到request中,如果没有,用setAttribute(Globals.MESSAGE_KEY,messages)方法将messages添加进去.如果一个Action中需要显示多条错误信息,推荐使用该方法.
      (Globals.MESSAGE_KEY ="org.apache.struts.action.ACTION_MESSAGE")
    • saveMessages(HttpServletRequest request,ActionMessages messages)
      该方法保存messages时,如果request中已经有一个ActionMessages对象,则用新的覆盖原有的.不推荐使用该方法,该方法容易发生丢失信息的情况.
    • addErrors()和saveErrors()
      这两个方法与addMessages()和saveMessages()相似,不过在HttpServletRequest.setAttribute()时的参数不一样,这两个方法是:setAttribute(Globals.ERROR_KEY,messages)添加的.(Globals.ERROR_KEY = "org.apache.struts.action.ERROR")
           在request中添加的ActionMessages在页面显示时,用<html:messages>标签进行显示, <html:messages>
id必须指定id属性.<html:messages>标签作用是遍历ActionMessages对象中的所有     ActionMessage.类似<logic:iterator>,每次循环都定义一个名称为id指定的页面范围的bean,然后用     <bean:write>标签进行输出.
bundle绑定一个MessageResources,不指定的时候从上下文中配置的资源中检索.一般不指定bundle属性.
locale指定本地化信息,不指定时和Session的本地化信息相同,一般不用指定.
name指定ActionMessages对象在request中的key.不指定时,默认用GLOBALS.ERROR_KEY="org.apache.struts.action.ERROR",用Action.addMessages()方法添加的信息将不被显示,用Action.addErrors()方法添加的信息才会被显示.一般不指定.
property指定哪些ActionMessage将被显示,与ActionMessages.addMessage(String property,ActionMessage am)中的property参数相对应.不指定的时候显示所有信息.
header指定一个资源信息key,在显示ActionMessages前打印到页面上,可选.
footer指定一个资源信息key,在显示完ActionMessages后打印到页面上,可选.
message

取值为true/false,默认为false.为false或不指定时,在request中查找key=Globals.ERROR_KEY的ActionMessages bean.当该属性设置为true时,在request中查找key=Globals.MESSAGE_KEY的ActionMessages bean,同时name属性的值将被忽略. 
注:true显示 this.addMessages(request,messages); 里面的消息,
false显示 this.addErrors(request, messages)的消息。

 <html:messages>的message属性如果设定为true,会输出ActionMessages中所储存的讯息,Message表示一个提示讯息,也许使用者输入了不正确的资讯,例如在输入名称与密码时打错了字,程式要提示使用者他们输入了不正确的讯息。 
    <html:messages>的message属性如果不设定为true,会输出ActionErrors中所储存的讯息,Error代表的是一个操作方面的错误,例如错误操作导致使用者名称或密码为空(当然也许也是故意的)。

示例:(struts 1.3)

ActionForm中:

ActionMessages messages = new ActionMessages();
    messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("messages.username.required"));
    addMessages(request,messages);
   
    ActionErrors errors = new ActionErrors();
    errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("errors.username.required"));
    addErrors(request,errors);
   
    return mapping.getInputForward();

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

JSP页面显示:

<html:messages id="outMessage" message="true" header="messages.header" footer="messages.footer">
    <bean:write name="outMessage"/>
   </html:messages>
   <html:messages id="outError" message="false" header="errors.header" footer="errors.footer">
    <bean:write name="outError"/>
   </html:messages>

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

ApplicationResources.properties配置文件:

messages.header=<h2><font color="red">
messages.footer=</font></h2>
messages.username.required=ActionMessage:the name is null

errors.header=<h2><font color="blue">
errors.footer=</font></h2>
errors.username.required=ActionError:the name is null


posted @ 2011-09-29 11:59 GavinMiao 阅读(1224) | 评论 (0)编辑 收藏

异常积累:java.lang.IllegalArgumentException

ERROR - Error:
java.lang.IllegalArgumentException: Invalid property name 'userInfoContext'
at org.apache.struts.action.DynaActionForm.getDynaProperty(DynaActionForm.java:
603)
---》错误行:UserInfoContext userInfoContext = (UserInfoContext) domainForm.get("userInfoContext");
原因:struts.xml中有两个UserInfoContext类,引用错误。
参考文章:http://hi.baidu.com/9prior/blog/item/9cabe7fba2cc9e1f6c22eb6c.html
这种异常也有可能是:actionform中的某个属性在form-bean的form-property没有配置。

posted @ 2011-09-28 15:18 GavinMiao 阅读(503) | 评论 (0)编辑 收藏

fmt:message与fmt:fmt:setBundle

参考文章:

http://cainwise.iteye.com/blog/369836

 
<fmt:message
> 
标签属性和说明 

 

 

属性
描述
key
资源配置文件的指定
bundle
若使用 <fmt:setBundle> 保存了资源配置文件,该属性就可以从保存的资源配置文件中进行查找
var
将显示信息保存为一个变量
scope
变量的作用范围

 

<fmt:bundle>  <fmt:setBundle> 标签属性和说明 

 

 

属性
描述
basename
资源配置文件的指定,只需要指定文件名而无须扩展名,二组标签共有的属性
var
 <fmt:setBundle> 独有的属性,用于保存资源配置文件为一个变量
scope
 变量的作用范围

 

eg1:
  1. <body>  
  2.   <%request.setAttribute("language","zh_CN"); %>//这里可以从客户端选择的语言那里获取  
  3.     <fmt:setLocale value="${language}"/>//这里是设置显示页面的语言  
  4.     <fmt:setBundle basename="message" var="messages"/>//这里是获取到国际化文件  
  5.         <fmt:bundle basename="message">  
  6.             <fmt:message key="com.name"/>//获取key第一种方式  
  7.             <br>  
  8.             <fmt:message key="com.name" bundle="${messages}"></fmt:message>//获取key第二种方式  
  9.         </fmt:bundle>  
  10.   </body>  
















posted @ 2011-09-28 14:08 GavinMiao 阅读(5080) | 评论 (0)编辑 收藏

用命令打开windows常用软件

mspaint 画图板 
mstsc 远程桌面连接
notepad 打开记事本
winmsd.exe 查看系统信息
Sndvol32 音量控制程序
diskmgmt.msc 磁盘管理器
cleanmgr 垃圾整理
conf 启动netmeeting聊天工具
cleanmgr.exe 磁盘清理 
calc.exe 计算器
regedt32 注册表编辑器

posted @ 2011-09-28 09:40 GavinMiao 阅读(295) | 评论 (0)编辑 收藏

电脑使用技巧:windows自带定时关机

转载:http://bbs.yhcgo.com/read.php?tid-77128.html

1.Windows XP的定时关机命令是由Shutdown.exe程序来控制的,位于Windows\System32文件夹中。
如果想让Windows 2000也实现同样的效果,可以把Shutdown.exe复制到系统目录下。

系统根目录:C:\windows\下;
2.winows+r打开“运行”输入框,然后输入以下命令:
at 22:00 Shutdown -s           --->无倒计时框,到
22:00点提示关机
shutdown.exe -s -t 3600 -->60分钟后,以
倒计时的方式关机
Shutdown -s -t 1320 -->
指定系统在22分钟后自动关闭
3.
如果想取消的话,可以在运行中输入“shutdown -a”。另外输入“shutdown -i”,则可以打开设置自动关机对话框,对自动关机进行设置。 
4.
Shutdown.exe的参数:
-r:关机并重启
-t 时间:设置关机倒计时
“-s”就表示关闭本地计算机
“-a”表示取消关机操作
-i:显示图形用户界面,但必须是Shutdown的第一个选项

posted @ 2011-09-28 09:16 GavinMiao 阅读(541) | 评论 (0)编辑 收藏