??xml version="1.0" encoding="utf-8" standalone="yes"?>
3、?tng)DateFormat:抽象cjava.util.CalendarQ它z的一个子cMؓ(f)java.util.GregorianCalendar (tng)
Q注Q如果有朋友对具体类和抽象类不了(jin)解,可以参考相关Java资料Q?br />
现在对以上三个类q行如下分析Q?br />
一、对Datecȝ分析 (tng)
Date (tng)cMJDK (tng)1.0开始进化, (tng)当时它只包含?jin)几个简单的处理日期数据的方法。?tng)由于这些方法实用性差Q现在基本上被CalendarcM各方法所代替?jin)。这U改q目的是Z(jin)更好的处理日期数据国际化格式。?tng)Date (tng)cd际上只是一个包裹类, (tng)它包含一个长整型数据, (tng)表示的是从GMT(格林治标准旉)1970q? (tng)1 (tng)月??0:00:00q一M前或者是之后l历的毫U数. (tng)
Z(jin)加深对Datecȝ理解Q列丑֦下一个简单例子来说明Date的用:(x) (tng)
import (tng)java.util.Date; (tng)
public (tng)class (tng)DateTest1 (tng){ (tng)
public (tng)static (tng)void (tng)main(String[] (tng)args) (tng){ (tng)
/** (tng)Get (tng)the (tng)system (tng)Date (tng)**/ (tng)
Date (tng)date (tng)= (tng)new (tng)Date(); (tng)
System.out.println(date.getTime()); (tng)
} (tng)
} (tng)
pȝ输出如下l果Q?br />1001803809710 (tng)
在这个例子中,值得我们注意的是我们使用?jin)Date (tng)构造函数创Z个日期对? (tng)在没有Q何参数的情况下,q个构造函C(x)自动调用System.currentTimeMillis() (tng)Ҏ(gu)来获取当前系l日?。?br />
二、对DateFormatcȝ分析 (tng)
如果我们希望定制日期数据的格? (tng)比如昄的日期格式ؓ(f)Q?006q?6?3日,抽象cjava.util.Calendar和它的子cjava.util.GregorianCalendar能完成这一功能。?br />下面的例子展CZ(jin)如何完成q个工作: (tng)
import (tng)java.util.SimpleDateFormat; (tng)
import (tng)java.util.Date; (tng)
public (tng)class (tng)DateTest2 (tng){ (tng)
public (tng)static (tng)void (tng)main(String[] (tng)args) (tng){ (tng)
SimpleDateFormat (tng)format (tng)= (tng)new (tng)SimpleDateFormat("yyyyqMM月dd?,Locale.US); (tng)
Date (tng)date (tng)= (tng)new (tng)Date(); (tng)
System.out.println(bartDateFormat.format(date)); (tng)
} (tng)
} (tng)
只要通过向SimpleDateFormat (tng)的构造函C递格式字W串" (tng)yyyyqMM月dd?, (tng)我们可以指明自己想要的格式. (tng)其中yyyy是年QMM是月, (tng)dd是日. (tng)字符的个数决定了(jin)日期是如何格式化的,如果格式?yyyyqMM月dd?׃(x)昄 (tng)06q?6?3日;如果?yy-MM-dd"显C?6-06-23。?br />
三、对Calendar (tng)cȝ分析 (tng)
如果惌|、获取、操U一个日期对象的各个特定部分Q比如获得小? (tng)? (tng)分钟、计一个月的某一天说星期几等{。这L(fng)情况需要抽象类java.util.Calendar和它的子cL处理。ؓ(f)?jin)能清楚地说明问题,列D下面的例? (tng)它的功能是计第十个星期五是13? (tng)
import (tng)java.util.GregorianCalendar; (tng)
import (tng)java.util.Date; (tng)
import (tng)java.text.DateFormat; (tng)
public (tng)class (tng)CalendarTest{ (tng)
public (tng)static (tng)void (tng)main(String[] (tng)args) (tng){ (tng)
DateFormat (tng)dateFormat (tng)= (tng)DateFormat.getDateInstance(DateFormat.FULL); (tng)
GregorianCalendar (tng)cal (tng)= (tng)new (tng)GregorianCalendar(); (tng)
/** (tng)Set (tng)the (tng)date (tng)and (tng)time (tng)of (tng)our (tng)calendar (tng)to (tng)the (tng)system&s (tng)date (tng)and (tng)time (tng)**/ (tng)
cal.setTime(new (tng)Date()); (tng)
System.out.println("System (tng)Date: (tng)" (tng)+ (tng)dateFormat.format(cal.getTime())); (tng)
/** (tng)Set (tng)the (tng)day (tng)of (tng)week (tng)to (tng)FRIDAY (tng)**/ (tng)
cal.set(GregorianCalendar.DAY_OF_WEEK, (tng)GregorianCalendar.FRIDAY); (tng)
System.out.println("After (tng)Setting (tng)Day (tng)of (tng)Week (tng)to (tng)Friday: (tng)" (tng)+ (tng)
dateFormat.format(cal.getTime())); (tng)
int (tng)friday13Counter (tng)= (tng)0; (tng)
while (tng)(friday13Counter (tng)<= (tng)10) (tng){ (tng)
/** (tng)Go (tng)to (tng)the (tng)next (tng)Friday (tng)by (tng)adding (tng)7 (tng)days. (tng)**/ (tng)
cal.add(GregorianCalendar.DAY_OF_MONTH, (tng)7); (tng)
/** (tng)I(yng)f (tng)the (tng)day (tng)of (tng)month (tng)is (tng)13 (tng)we (tng)have (tng)another (tng)Friday (tng)the (tng)13th. (tng)**/ (tng)
if (tng)(cal.get(GregorianCalendar.DAY_OF_MONTH) (tng)== (tng)13) (tng){ (tng)
friday13Counter++; (tng)
System.out.println(dateFormat.format(cal.getTime())); (tng)
} (tng)
} (tng)
} (tng)
} (tng)
输出l果? (tng)
System (tng)Date: (tng)Saturday, (tng)September (tng)29, (tng)2005 (tng)
四、ȝ (tng)
在Java通过一下三个类的用,一般可以满_UŞ式的日期使用。实际上QJava中日期用的Ҏ(gu)q有很多Q如果有兴趣的朋友请参考JDK帮助手册。?br />http://www.javaresearch.org/article/55424.htm
]]>
Statement (tng)stmt (tng)= (tng)con.createStatement();
ResultSet (tng)rs (tng)= (tng)stmt.executeQuery("SELECT (tng)* (tng)FROM (tng)user (tng)WHERE (tng)username='aa'");
stmt.executeUpdate("UPDATE (tng)user (tng)SET (tng)lastdatetime=now() (tng)where (tng)username='aa'"); (tng)
q是一个用L(fng)录时Q经常用到的代码Q先是根据用户名aa查找该用L(fng)详细信息Q然后再更新该用L(fng)最后登录时_(d)lastdatetimeQ。这q个里面Q我们用?jin)两个sql语句Q这个是我一直用的方法,但是如果用JDBC2.0l我们提供的便利Q我们只要写一条sql够?jin),其他的都交给jdbcQ看下面的代码:(x) (tng)
Statement (tng)stmt2 (tng)= (tng)con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet (tng)rs2 (tng)= (tng)stmt.executeQuery("SELECT (tng)* (tng)FROM (tng)user (tng)WHERE (tng)username='aa'");
rs2.next();
rs2.updateDate("lastdatetime", (tng)new (tng)Date(Calendar.getInstance().getTimeInMillis()));
rs2.updateRow(); (tng)
q里面最主要的特征就是ResultSet.TYPE_FORWARD_ONLY和ResultSet.CONCUR_UPDATABLEQ通过初始化Statement时传不同的参敎ͼ可以对ResultSetq行不用的错作限制。con.createStatement的时候,有三U可以掉用的函数Q?
1、createStatement();
2、createStatement(int (tng)resultSetType, (tng)int (tng)resultSetConcurrency)
3、createStatement(int (tng)resultSetType, (tng)int (tng)resultSetConcurrency, (tng)int (tng)resultSetHoldability) (tng)
其中resultSetType可选值是Q?
(tng) (tng) (tng)1、ResultSet.TYPE_FORWARD_ONLY (tng) (tng)在ResultSet中只能先前移动游标,
(tng) (tng) (tng)2、ResultSet.TYPE_SCROLL_INSENSITIVE (tng)在ResultSet中可以随?j)所Ʋ的先前向后Ud游标Q?
(tng) (tng) (tng)3、ResultSet.TYPE_SCROLL_SENSITIVE (tng)在ResultSet中可以随?j)所Ʋ的先前向后Ud游标Q同时ResultSet的值有所改变的时候,他可以得到改变后的最新的?
其中resultSetConcurrency可选值是Q?
(tng) (tng) (tng)1、ResultSet.CONCUR_READ_ONLY (tng) (tng)在ResultSet中的数据记录是只ȝQ可以修?
(tng) (tng) (tng)2、ResultSet.CONCUR_UPDATABLE (tng) (tng)在ResultSet中的数据记录可以L修改Q然后更C(x)数据?
其中resultSetHoldability可选值是Q?
(tng) (tng) (tng)1、ResultSet.HOLD_CURSORS_OVER_COMMIT (tng)表示修改提交?不关闭ResultSet的游?
(tng) (tng) (tng)2、ResultSet.CLOSE_CURSORS_AT_COMMIT (tng) (tng)表示修改提交?关闭ResultSet的游标?
对于查询操作W一U初始化Ҏ(gu)createStatement()Q相当于W二U方法的createStatement(ResultSet.TYPE_FORWARD_ONLY, (tng)ResultSet.CONCUR_READ_ONLY)Q第三种Ҏ(gu)的createStatement(ResultSet.TYPE_FORWARD_ONLY, (tng)ResultSet.CONCUR_READ_ONLY, (tng)ResultSet.CLOSE_CURSORS_AT_COMMIT) (tng)
下面写一Ddemo的代码,我把一些特征函数都用出来,但是只是用来查考和说明名灵zL的。?
(tng)Statement (tng)stmt2 (tng)= (tng)con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
(tng)ResultSet (tng)rs2 (tng)= (tng)stmt.executeQuery("SELECT (tng)* (tng)FROM (tng)user");
(tng)rs2.next();
(tng)rs2.updateDate("lastdatetime", (tng)new (tng)Date(Calendar.getInstance().getTimeInMillis()));
(tng)rs2.updateRow();
(tng)rs2.afterLast();
(tng)while(rs2.previous()){ (tng)/**....*/ (tng)}
(tng)rs.beforeFirst();
(tng)while(rs2.next()){ (tng) (tng)/**....*/ (tng)}
(tng)rs.last();
(tng)rs.first();
(tng)rs.absolute(5); (tng)//游标Ud到第5?
(tng)rs.absolute(-1); (tng) (tng)//游标Ud到最后一?
(tng)rs.relative(-5); (tng) (tng)//游标向上Ud5?
(tng)rs.relative(2); (tng) (tng) (tng)//游标向下Ud2?
(tng)rs.deleteRow(); (tng)//删除当前?
(tng)rs.last(); (tng) (tng)//游标Ud到最?
(tng)rs.updateString("summary", (tng)"This (tng)is (tng)..."); (tng)//讄更新的字D?
(tng)rs.cancelRowUpdates(); (tng) (tng)//取消刚才输入的更?
(tng)rs.getRow(); (tng)//得到当前行号
(tng)rs.moveToInsertRow(); (tng) (tng)//游标Ud到要新增的那条记录上
(tng)rs.updateInt("id", (tng)1);
(tng)rs.updateString(2, (tng)"my (tng)name");
(tng)rs.insertRow(); (tng)//插入新记录?
JDBC2.0提供的还有一个功能就是数据库的批量操作:(x) (tng)
(tng) (tng)con.setAutoCommit(false);
(tng) (tng)Statement (tng)stmt3 (tng)= (tng)con.createStatement();
(tng) (tng)stmt3.addBatch("insert (tng).....");
(tng) (tng)stmt3.addBatch("insert (tng).....");
(tng) (tng)int[] (tng)rows (tng)= (tng)stmt3.executeBatch();
(tng) (tng)con.commit(); (tng)
但是有一点要注意Qstmt3.executeBatch()他不?x)自动给你回滚数据操作,当你?条update语句的时候,如果W三条发生错误,那么无法自动回滚前两条update语句的媄(jing)响,所以一定要自己手工q行事务理。?
在?zhn)的事务中使用?tng)Savepoint (tng)
JDBC3.0中最令h兴奋的附加特点就是?tng)Savepoint (tng)?jin)。有时候需要的是对事务多一点的控制Q而不是在当前的事务中单地Ҏ(gu)一个改变进行回滚。在JDBC3.0下,(zhn)就可以通过 (tng)Savepoint (tng)获得q种控制。Savepoint (tng)接口允许(zhn)将事务分割为各个逻辑断点Q以控制有多事务需要回滚。看下面的代码:(x) (tng)
conn.setAutoCommit(false); (tng)
conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); (tng)
Statement (tng)stmt (tng)= (tng)conn.createStatement(); (tng)
int (tng)rows (tng)= (tng)stmt.executeUpdate( (tng)"INSERT (tng)I(yng)NTO (tng)authors (tng)(first_name, (tng)last_name) (tng)valueS(′Lewis? (tng)′Carroll?"); (tng)
Savepoint (tng)svpt (tng)= (tng)conn.setSavepoint("NewAuthor"); (tng)
try{
(tng)rows (tng)= (tng)stmt.executeUpdate( (tng)"UPDATE (tng)authors (tng)set (tng)type (tng)= (tng)′fiction′?tng)WHERE (tng)last_name (tng)= (tng)′Carroll?); (tng)
}catch(Exception (tng)e){
(tng)conn.rollback(svpt);
(tng)rows (tng)= (tng)stmt.executeUpdate( (tng)" (tng)update (tng).......... (tng)other (tng)sql (tng)");
}
conn.commit(); (tng)
上面代码昄Q当UPDATE (tng)authorsp|的时候,pȝ事务回滚UPDATE (tng)authors的sql的媄(jing)响,而INSERT (tng)I(yng)NTO (tng)authors的sql仍然有效 (tng)
(g)索自动生的关键字?/b> (tng)
Z(jin)解决对获取自动生的或自动增加的关键字的值的需求,JDBC (tng)3.0现在获取这U值变得很L。要定M所产生的关键字的|只要单地在语句的 (tng)execute() (tng)Ҏ(gu)中指定一个可选的标记QStatement.RETURN_GENERATED_KEYS和Statement.NO_GENERATED_KEYS。在执行q条语句后,所产生的关键字的值就?x)通过从?tng)Statement (tng)的实例方法?tng)getGeneratedKeys() (tng)来检索?tng)ResultSet (tng)而获得。ResultSet (tng)包含?jin)每个所产生的关键字的列。看下面代码Q?
Statement (tng)stmt (tng)= (tng)conn.createStatement(); (tng)
stmt.executeUpdate("INSERT (tng)I(yng)NTO (tng)authors (tng)(first_name, (tng)last_name) (tng)valueS (tng)(′George? (tng)′Orwell?", (tng)Statement.RETURN_GENERATED_KEYS); (tng)
ResultSet (tng)rs (tng)= (tng)stmt.getGeneratedKeys(); (tng)
if (tng)( (tng)rs.next() (tng)) (tng){ (tng)
(tng)int (tng)key (tng)= (tng)rs.getInt(); (tng)
}
http://www.netskycn.com/article/articleId2913.html
]]>
ClassNotFoundException
(tng) (tng) (tng) ClassNotFoundException 是最常见的类装入异常cd。它发生在装入阶Dc(din)Java 规范?ClassNotFoundException 的描q是q样的:(x)
(tng) (tng) (tng) 当应用程序试N过cȝ字符串名Uͼ使用以下三种Ҏ(gu)装入c,但却找不到指定名U的cd义时抛出该异常?br /> (tng) (tng) (tng) * c?Class 中的 forName() Ҏ(gu)?br /> (tng) (tng) (tng) * c?ClassLoader 中的 findSystemClass() Ҏ(gu)?br /> (tng) (tng) (tng) * c?ClassLoader 中的 loadClass() Ҏ(gu)?br /> (tng) (tng) (tng) 所以,如果昑ּ地装入类的尝试失败,那么抛?ClassNotFoundException?br /> (tng) (tng) (tng) q些异常修复h通常比较单。可以用 (tng) verbose 选项(g)查类路径Q确保用的c\径设|正。如果类路径讄正确Q但是仍然看到这个错误,那么是需要的cdc\径中不存在。要修复q个问题Q可以把cȝ动到c\径中指定的目录或 JAR 文g中,或者把cL在的位置d到类路径中?br />
NoClassDefFoundError
(tng) (tng) (tng) NoClassDefFoundError 是类装入器在装入阶段抛出的另一个常见异常。JVM 规范?NoClassDefFoundError 的定义如下:(x)
(tng) (tng) (tng) 如果 Java 虚拟机或 ClassLoader 实例试图装入cd义(作ؓ(f)正常的方法调用的一部分Q或者作Z?new 表达式创建新实例的一部分Q,但却没有扑ֈcd义时抛出该异常?br /> (tng) (tng) (tng) 当目前执行的cdl编译,但是找不到它的定义时Q会(x)存在 searched-for cd义?
(tng) (tng) (tng) 实际上,q意味着 NoClassDefFoundError 的抛出,是不成功的隐式类装入的结果?br /> (tng) (tng) (tng) 单说来,是引用的类在类路径中没有找到?br />ClassCastException
(tng) (tng) (tng) c装入器能够抛出的另一个异常是 ClassCastException。它是在cd比较中发C兼容cd的时候抛出的。JVM 规范指定 ClassCastException 是:(x)
(tng) (tng) (tng) 该异常的抛出Q表明代码企图把对象的类型{换成一个子c,而该对象q不是这个子cȝ实例?
UnsatisfiedLinkError
(tng) (tng) (tng) 在把本地Ҏ(gu)调用链接到对应的本机定义Ӟc装入器扮演着重要角色。如果程序试图装入一个不存在或者放错的本机库时Q在链接阶段的解析过E会(x)发生 UnsatisfiedLinkError。JVM 规范指定 UnsatisfiedLinkError 是:(x)
(tng) (tng) (tng) 对于声明?native 的方法,如果 Java 虚拟机找不到和它对应的本a定义Q就?x)抛(gu)异常?
(tng) (tng) (tng) 当调用本机方法时Q类装入器会(x)试装入定义?jin)该?gu)的本机库。如果找不到q个库,׃(x)抛出q个错误?br /> (tng) (tng) (tng) 本机库的装入p?System.loadLibrary() Ҏ(gu)的类的类装入器启?Q根据用的c装入器Q会(x)搜烦(ch)不同的位|:(x)
(tng) (tng) (tng) * 对于?bootstrap c装入器装入的类Q搜?sun.boot.library.path?br /> (tng) (tng) (tng) * 对于由扩展类装入器装入的c,先搜?java.ext.dirsQ然后是 sun.boot.library.pathQ然后是 java.library.path?br /> (tng) (tng) (tng) * 对于ql类装入器装入的c,搜烦(ch) sun.boot.library.pathQ然后是 java.library.path?br />ClassCircularityError
(tng) (tng) (tng) JVM 规范指定 ClassCircularityError 的抛出条件是Q?br /> (tng) (tng) (tng) cL接口׃是自q类或超接口而不能被装入?
(tng) (tng) (tng) q个错误是在链接阶段的解析过E中抛出的。这个错误有点奇怪,因ؓ(f) Java ~译器不允许发生q种循环情况。但是,如果独立地编译类Q然后再把它们放在一P可能发生这个错误?br />ClassFormatError
JVM 规范指出Q抛?ClassFormatError 的条件是Q?br /> (tng) (tng) (tng) 负责指定所h的编译类或接口的二进制数据Ş式有误?
(tng) (tng) (tng) q个异常是在c装入的链接阶段的校验过E中抛出。如果字节码发生?jin)更改,例如ȝ本号或次版本号发生?jin)更改Q那么二q制数据的Ş式就?x)有误。例如,如果对字节码故意做了(jin)更改Q或者在通过|络传送类文g时现Z(jin)错误Q那么就可能发生q个异常?br /> (tng) (tng) (tng) 修复q个问题的惟一Ҏ(gu)是获得字节码的正确副本Q可能需要重新进行编译?br />ExceptionInInitializerError
Ҏ(gu) JVM 规范Q抛?ExceptionInInitializer 的情冉|Q?br /> (tng) (tng) (tng) * 如果初始化器H然完成Q抛Z些异?EQ而且 E 的类不是 Error 或者它的某个子c,那么׃(x)创徏 ExceptionInInitializerError cȝ一个新实例Qƈ?E 作ؓ(f)参数Q用q个实例代替 E?br /> (tng) (tng) (tng) * 如果 Java 虚拟囑ֈ建类 ExceptionInInitializerError 的新实例Q但是因为出?Out-Of-Memory-Error 而无法创建新实例Q那么就抛出 OutOfMemoryError 对象作ؓ(f)代替?br />http://www.aygfsteel.com/zyl/archive/2007/02/04/97881.html
]]>
(tng)< filter >
(tng) (tng) (tng) (tng) < filter-name > Set Character Encoding </ filter-name >
(tng) (tng) (tng) (tng) < filter-class > org.springframework.web.filter.CharacterEncodingFilter </ filter-class >
(tng) (tng) (tng) (tng) < init-param >
(tng) (tng) (tng) (tng) (tng) (tng) < param-name > encoding </ param-name >
(tng) (tng) (tng) (tng) (tng) (tng) < param-value > GBK </ param-value >
(tng) (tng) (tng) (tng) </ init-param >
(tng) (tng) (tng) (tng) < init-param >
(tng) (tng) (tng) (tng) (tng) (tng) < param-name > ignore </ param-name >
(tng) (tng) (tng) (tng) (tng) (tng) < param-value > true </ param-value >
(tng) (tng) (tng) (tng) </ init-param >
(tng) (tng) </ filter >
(tng) (tng) < filter-mapping >
(tng) (tng) (tng) (tng) < filter-name > Set Character Encoding </ filter-name >
(tng) (tng) (tng) (tng) < url-pattern > *.do </ url-pattern >
(tng) (tng) </ filter-mapping >
(tng) (tng) < filter-mapping >
(tng) (tng) (tng) (tng) < filter-name > Set Character Encoding </ filter-name >
(tng) (tng) (tng) (tng) < url-pattern > *.jsp </ url-pattern >
(tng) (tng) </ filter-mapping >
(tng) (tng) < filter-mapping >
(tng) (tng) (tng) (tng) < filter-name > Set Character Encoding </ filter-name >
(tng) (tng) (tng) (tng) < url-pattern > *.html </ url-pattern >
(tng) (tng) </ filter-mapping >
(tng) (tng) < filter-mapping >
(tng) (tng) (tng) (tng) < filter-name > Set Character Encoding </ filter-name >
(tng) (tng) (tng) (tng) < url-pattern > *.htm </ url-pattern >
(tng) (tng) </ filter-mapping >
的,有用
(tng)<% request.setCharacterEncoding( " GBK " ); %>
的,q有?/p>
(tng)<% @ page contentType = " text/html; charset=GBK " (tng) pageEncoding = " GBK " %>
<meta http-equiv="content-type" content="text/html; charset=GBK">
?q可以用
(tng)<% (tng) String name (tng) = (tng) (tng) new (tng) String(request.getParameter( " name " ).getBytes( " 8859_1 " ), (tng) " GB2312 " ); (tng) %>
昨天在做项目的q程中,发现用URL传request参数的时候,在第二个面上得Cؕ码的问题。把上面几种Ҏ(gu)都试?jin)一下还是不行。仔l追t了(jin)一下,发现在页面的源代码上中文是正常的Q一直到URLq是中文正常Q可是在后台的Action里面log出来成?jin)ؕ码?jin)Q于是猜x在request装的过E中把中文变成ؕ码了(jin)Q以致于后台直接是取到的ؕ码。在后台Action中Set入中文,面上正常显C,说明Struts的中文已l不存在问题。剩下的Q应该就只有doGet和doPostҎ(gu)的问题(sh)(jin)。找?jin)一下tomcat的配|文Ӟ发现只要在server.xml中:(x)
(tng) (tng) (tng) (tng) (tng) <!-- (tng) Define a non-SSL HTTP/1.1 Connector on port 8080 (tng) -->
(tng) (tng) (tng) (tng) < Connector (tng) port ="8080" (tng) maxHttpHeaderSize ="8192"
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) maxThreads ="150" (tng) minSpareThreads ="25" (tng) maxSpareThreads ="75"
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) enableLookups ="false" (tng) redirectPort ="8443" (tng) acceptCount ="100"
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) connectionTimeout ="20000" (tng) disableUploadTimeout ="true" />
(tng) (tng) (tng) (tng) <!-- (tng) Note : To disable connection timeouts, set connectionTimeout value
(tng) (tng) (tng) (tng) to 0 (tng) -->
改ؓ(f)
(tng) (tng) (tng) (tng) (tng) <!-- (tng) Define a non-SSL HTTP/1.1 Connector on port 8080 (tng) -->
(tng) (tng) (tng) (tng) < Connector (tng) port ="8080" (tng) maxHttpHeaderSize ="8192"
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) maxThreads ="150" (tng) minSpareThreads ="25" (tng) maxSpareThreads ="75"
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) enableLookups ="false" (tng) redirectPort ="8443" (tng) acceptCount ="100"
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) connectionTimeout ="20000" (tng) disableUploadTimeout ="true" (tng) URIEncoding ="GBK"/>
(tng) (tng) (tng) (tng) <!-- (tng) Note : To disable connection timeouts, set connectionTimeout value
(tng) (tng) (tng) (tng) to 0 (tng) -->
是加上URIEncoding="GBK"׃事大吉了(jin)?br />
再加上一条:(x)
<session-factory>
<property name="hibernate.connection.url">jdbc:jtds:sqlserver://192.168.0.3:1433;DatabaseName=HomeConsume;charset=GBK</property>
<property name="hibernate.cglib.use_reflection_optimizer">true</property>
<property name="hibernate.connection.password">sju</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>
<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
<mapping resource="net/magicyang/homeconsume/pojo/Test.hbm.xml" />
<mapping resource="net/magicyang/homeconsume/pojo/Consumeinfo.hbm.xml" />
<mapping resource="net/magicyang/homeconsume/pojo/Consumetype.hbm.xml" />
</session-factory>
xQ应该再困难的ؕ码问题都解决?jin)吧。就是要在页面上、数据库中、request里、doGet、doPostҎ(gu)里面都是中文Q看你还有什么地方躲Q?
可是Q如果通过?jin)多U反向代理的话,X-Forwarded-For的值ƈ不止一个,而是一Ԍp|I竟哪个才是真正的用L(fng)的真实IP呢?
{案是取X-Forwarded-For中第一个非unknown的有效IP字符丌Ӏ?br />
如:(x)
X-Forwarded-ForQ?92.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100
用户真实IP为:(x) 192.168.1.110