??xml version="1.0" encoding="utf-8" standalone="yes"?> Q?/span>1Q?/span>java.lang.String split String value = "a,b,c,d,e"; String[] names = value.split(","); for(int i=0,n=names.length;i System.out.print(names[i]); } public String[] split(String regex)其中的参敎ͼ表示正则表达式?/span> Q?Q、设|页面不~存信息Q在qo器中讄Q?/span> httpResponse.setHeader("Cache-Control", "no-cache"); httpResponse.setHeader("Cache-Control", "no-store"); httpResponse.setDateHeader("Expires", 0); W二QAnonymous Inner Class (匿名内部c? 是否可以extends(l承)其它c,是否可以implements(实现)interface(接口)? W三QStatic Nested Class ?Inner Class的不同,说得多好(面试题有的很W统)?br />
W四Q?amp;?amp;&的区别?br />
W五QHashMap和Hashtable的区别?br />
W六QCollection ?Collections的区别?br />
W七Q什么时候用assert?br />
W八QGC是什? Z么要有GC? W九QString s = new String("xyz");创徏了几个String Object? W十QMath.round(11.5){於多少? Math.round(-11.5){於多少? W十一Qshort s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? short s1 = 1; s1 = s1 + 1; Qs1+1q算l果是int型,需要强制{换类型)short s1 = 1; s1 += 1;Q可以正编译) W十二,sleep() ?wait() 有什么区? W十三,Java有没有goto? W十四,数组有没有length()q个Ҏ? String有没有length()q个ҎQ?br />
W十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的cd? W十八,error和exception有什么区? W十九,List, Set, Map是否l承自Collection接口? W二十,abstract class和interface有什么区? W二十一Qabstract的method是否可同时是static,是否可同时是nativeQ是否可同时是synchronized? W二十二Q接口是否可l承接口? 抽象cL否可实现(implements)接口? 抽象cL否可l承实体c?concrete class)? W二十三Q启动一个线E是用run()q是start()? W二十四Q构造器Constructor是否可被override? W二十五Q是否可以承Stringc? W二十六Q当一个线E进入一个对象的一个synchronizedҎ后,其它U程是否可进入此对象的其它方? W二十七Qtry {}里有一个return语句Q那么紧跟在q个try后的finally {}里的code会不会被执行Q什么时候被执行Q在return前还是后? W二十八Q编E题: 用最有效率的Ҏ出2乘以8{於? W二十九Q两个对象值相?x.equals(y) == true)Q但却可有不同的hash codeQ这句话对不? W三十,当一个对象被当作参数传递到一个方法后Q此Ҏ可改变这个对象的属性,q可q回变化后的l果Q那么这里到底是g递还是引用传? W三十一Qswtich是否能作用在byte上,是否能作用在long上,是否能作用在String? W三十二Q编E题: 写一个Singleton出来?br />
1>如果a是类A的一个引用,那么Qa可以指向cA的一个实例,或者说指向cA的一个子c,q是向上转型的情形?br />
2>如果a是类A的一个引用,那么Qa必须指向实现了接口A的一个类的实例。这是接口回调的情Ş。在java里面Q向上{型是自动q行的,但是向下转型却不是,需要我们自己定义强制进行?br />
从实C某接口的对象Q得到对此接口的引用Q与向上转型个对象的基类Q实质上效果是一L。这些对象都可以调用基类型提供的ҎQ对于接口来说就是回调接口中的方法,对于父类来说是调用父类的方法。当然在向上转型的情况下Q还牉|到子c重写父cL法的情Ş?
]]>
package com.wyq.WebFilter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.Globals;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
public class ContextFilter implements Filter{
private String onErrorUrl;
private FilterConfig filterConfig;
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain doFilter) throws IOException, ServletException {
HttpServletRequest httpRequest=(HttpServletRequest)request;
HttpServletResponse httpResponse=(HttpServletResponse)response;
HttpSession httpSession=httpRequest.getSession();
httpResponse.setHeader("Cache-Control", "no-cache");
httpResponse.setHeader("Cache-Control", "no-store");
httpResponse.setDateHeader("Expires", 0);
if(httpSession.getAttribute("epAccountInfo")==null){
ActionErrors errors=new ActionErrors();
errors.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage("没有登陆"));
httpRequest.setAttribute(Globals.ERROR_KEY,errors);
httpRequest.getRequestDispatcher(onErrorUrl).forward(httpRequest, httpResponse);
}else{
doFilter.doFilter(request, response);
}
}
public void init(FilterConfig config) throws ServletException {
filterConfig=config;
onErrorUrl=filterConfig.getInitParameter("onError");
if(onErrorUrl==null||"".equals(onErrorUrl)){
onErrorUrl="onError";
}
}
}
(3)select * from TH_INT_ORG a where PAR_INT_ORG_ID is null 判断某个字段为空的纪录,要用is null
]]>
final 用于声明属性,Ҏ和类Q分别表C属性不可变Q方法不可覆盖,cM可ѝfinally是异常处理语句结构的一部分Q表CL执行。finalize?Objectcȝ一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回Ӟ例如关闭文g{?/p>
可以l承其他cL完成其他接口Q在swing~程中常用此方式。
Static Nested Class是被声明为静态(staticQ的内部c,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部cd例化后才能实例化。
&是位q算W,表示按位与运,&&是逻辑q算W,表示逻辑与(andQ?
HashMap是Hashtable的轻量实现Q非U程安全的实玎ͼQ他们都完成了Map接口Q主要区别在于HashMap允许I(nullQ键|keyQ?׃非线E?a class="channel_keylink" target="_blank">安全Q效率上可能高于Hashtable.
Collection是集合类的上U接口,l承与他的接口主要有Set 和List.Collections是针寚w合类的一个帮助类Q他提供一pd静态方法实现对各种集合的搜索、排序、线E安全化{操作。
1.4新增关键字(语法Q,用于试boolean表达式状态,可用于调试程序。用方?assert
GC是垃圾收集的意思(Gabage CollectionQ?内存处理是编Eh员容易出现问题的地方Q忘记或者错误的内存回收会导致程序或pȝ的不E_甚至崩溃Q?a class="channel_keylink" target="_blank">Java提供的GC功能可以 自动监测对象是否过作用域从而达到自动回收内存的目的Q?a class="channel_keylink" target="_blank">Java语言没有提供释放已分配内存的昄操作Ҏ?
两个
Math.round(11.5)==12Math.round(-11.5)==-11roundҎq回与参数最接近的长整数Q参数加1/2后求其floor.
sleep是线E类QThreadQ的ҎQ导致此U程暂停执行指定旉Q给执行Zl其他线E,但是监控状态依然保持,到时后会自动恢复。调?sleep不会释放对象锁。wait是ObjectcȝҎQ对此对象调用waitҎD本线E放弃对象锁Q进入等待此对象的等待锁定池Q只有针Ҏ?象发出notifyҎQ或notifyAllQ后本线E才q入对象锁定池准备获得对象锁q入q行状态。
没有 很十三的问题Q如果哪个面试的问到q个问题Q我劝你q是别进q家公司?/p>
数组没有length()q个ҎQ有length的属性?br />
String有有length()q个Ҏ?/p>
Ҏ的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父cM子类之间多态性的一U表玎ͼ 重蝲Overloading是一个类中多态性的一U表现。如果在子类中定义某Ҏ与其父类有相同的名称和参敎ͼ我们说该Ҏ被重?(Overriding)。子cȝ对象使用q个ҎӞ调用子cM的定义,对它而言Q父cM的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方 法,它们或有不同的参C数或有不同的参数cdQ则UCؓҎ的重?Overloading)。Overloaded的方法是可以改变q回值的cd?/p>
W十六,Set里的元素是不能重复的Q那么用什么方法来区分重复与否? 是用==q是equals()? 它们有何区别?
Set里的元素是不能重复的Q那么用iterator()Ҏ来区分重复与否。equals()是判M个Set是否相等?br />
equals()?=Ҏ军_引用值是否指向同一对象equals()在类中被覆盖Qؓ的是当两个分ȝ对象的内容和cd盔R的话Q返回真倹{?br />
error 表示恢复不是不可能但很困隄情况下的一U严重问题。比如说内存溢出。不可能指望E序能处理这L情况?br />
exception 表示一U设计或实现问题。也是_它表C如果程序运行正常,从不会发生的情况?/p>
ListQSet?br />
Map不是
声明Ҏ的存在而不d现它的类被叫做抽象类Qabstract classQ,它用于要创徏一个体现某些基本行为的c,qؓ该类声明ҎQ但不能在该cM实现该类的情c不能创建abstract cȝ实例。然而可以创Z个变量,其类型是一个抽象类Qƈ让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract cȝ子类为它们父cM的所有抽象方法提供实玎ͼ否则它们也是抽象cMؓ。取而代之,在子cM实现该方法。知道其行ؓ的其它类可以在类中实现这些方法?br />
接口QinterfaceQ是抽象cȝ变体。在接口中,所有方法都是抽象的。多l承性可通过实现q样的接口而获得。接口中的所有方法都是抽象的Q没有一?有程序体。接口只可以定义static final成员变量。接口的实现与子cȝ|除了该实现类不能从接口定义中l承行ؓ。当cd现特D接口时Q它定义Q即程序体l予Q所有这U接口的Ҏ?然后Q它可以在实C该接口的cȝM对象上调用接口的Ҏ。由于有抽象c,它允怋用接口名作ؓ引用变量的类型。通常的动态联~将生效。引用可以{换到 接口cd或从接口cd转换Qinstanceof q算W可以用来决定某对象的类是否实现了接口?/p>
都不?/p>
接口可以l承接口。抽象类可以实现(implements)接口Q抽象类是否可承实体类Q但前提是实体类必须有明的构造函数?/p>
启动一个线E是调用start()ҎQɾU程所代表的虚拟处理机处于可运行状态,q意味着它可以由JVM调度q执行。这q不意味着U程׃立即q行。run()Ҏ可以产生必须退出的标志来停止一个线E?/p>
构造器Constructor不能被承,因此不能重写OverridingQ但可以被重载Overloading?/p>
StringcLfinalcL不可以ѝ?/p>
不能Q一个对象的一个synchronizedҎ只能׃个线E访问?/p>
会执行,在return前执行?/p>
有C背景的程序员特别喜欢问这U问题?br />
2 << 3
不对Q有相同的hash code?/p>
是g递。Java ~程语言只由g递参数。当一个对象实例作Z个参数被传递到Ҏ中时Q参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变Q但对象的引用是永远不会改变的?/p>
switchQexpr1Q中Qexpr1是一个整数表辑ּ。因此传递给 switch ?case 语句的参数应该是 int?short?char 或?byte。long,string 都不能作用于swtich?/p>
Singleton模式主要作用是保证在Java应用E序中,一个类Class只有一个实例存在?br />
一般Singleton模式通常有几U种形式:
W一UŞ? 定义一个类Q它的构造函Cؓprivate的,它有一个static的private的该cd量,在类初始化时实例话,通过一个public的getInstanceҎ获取对它的引?l而调用其中的Ҏ?/p>
public class Singleton {
private Singleton(){}
//在自己内部定义自׃个实例,是不是很奇怪?
//注意q是private 只供内部调用
private static Singleton instance = new Singleton();
//q里提供了一个供外部讉K本class的静态方法,可以直接讉K
public static Singleton getInstance() {
return instance;
}
}
W二UŞ?
public class Singleton { private static Singleton instance = null; public static synchronized Singleton getInstance() { //q个Ҏ比上面有所改进Q不用每ơ都q行生成对象Q只是第一ơ //使用时生成实例,提高了效率! if (instance==null) instanceQnew Singleton(); return instance; } } |
六、wait()和notify()、notifyAll()
q三个方法用于协调多个线E对׃n数据的存取,所以必dSynchronized语句块内使用q三个方法。前面说qSynchronizedq个关键字用于保护共享数据,L其他U程对共享数据的存取。但是这L序的程很不灵zMQ如何才能在当前U程q没退出Synchronized数据块时让其他线E也有机会访问共享数据呢Q此时就用这三个Ҏ来灵zL制?
wait()Ҏ使当前线E暂停执行ƈ释放对象锁标志,让其他线E可以进入Synchronized数据块,当前U程被放入对象等待池中。当调用 notify()Ҏ后,从对象的等待池中移C个Q意的U程q放到锁标志{待池中Q只有锁标志{待池中的线E能够获取锁标志Q如果锁标志{待池中没有U程Q则notify()不v作用?
notifyAll()则从对象{待池中U走所有等待那个对象的U程q放到锁标志{待池中?/p>
在JAVA中,要开始一个线E,有两U方式。一是直接调用Thread实例的start()ҎQ二?/font>Runable实例传给一个Thread实例然后调用它的start()Ҏ。线E对象和U程是两个完全不同的概念。这里我们再ơ深入一下,生成一个线E的实例Qƈ不代表启动了U程。而启动线E是说在某个U程对象上启动了该实例对应的U程Q当该线E结束后Qƈ不会qx失?br /> 在线E对象a上调用join()ҎQ就是让当前正在执行的线E等待线E对象a对应的线E运行完成后才l运行?br /> Q?Q、通过Thread实例的start()Q一个Thread的实例只能生一个线E,不同实例的多个线E?br /> Q?Q、Runnable的实例是可运行的Q但它自己ƈ不能直接q行Q它需要被Thread对象来包装才行运?同一实例(Runnable实例)的多个线E?/font>
3. java对字W的处理
在java应用软g中,会有多处涉及到字W集~码Q有些地斚w要进行正的讄Q有些地斚w要进行一定程度的处理?/font>
3.1. getBytes(charset)
q是java字符串处理的一个标准函敎ͼ其作用是字W串所表示的字W按照charset~码Qƈ以字节方式表C。注意字W串在java内存中L按unicode~码存储的。比?中文"Q正常情况下Q即没有错误的时候)存储?4e2d 6587"Q如果charset?gbk"Q则被编码ؓ"d6d0 cec4"Q然后返回字?d6 d0 ce c4"。如果charset?utf8"则最后是"e4 b8 ad e6 96 87"。如果是"iso8859-1"Q则׃无法~码Q最后返?"3f 3f"Q两个问P?/font>
3.2. new String(charset)
q是java字符串处理的另一个标准函敎ͼ和上一个函数的作用相反Q将字节数组按照charset~码q行l合识别Q最后{换ؓunicode存储。参考上qgetBytes的例子,"gbk" ?utf8"都可以得出正的l果"4e2d 6587"Q但iso8859-1最后变成了"003f 003f"Q两个问P?/font>
因ؓutf8可以用来表示/~码所有字W,所以new String( str.getBytes( "utf8" ), "utf8" ) === strQ即完全可逆?/font>
3.3. setCharacterEncoding()
该函数用来设|httph或者相应的~码?/font>
对于requestQ是指提交内容的~码Q指定后可以通过getParameter()则直接获得正的字符Ԍ如果不指定,则默认用iso8859-1~码Q需要进一步处理。参见下q?表单输入"。值得注意的是在执行setCharacterEncoding()之前Q不能执行Q何getParameter()。java doc上说明:This method must be called prior to reading request parameters or reading input using getReader()。而且Q该指定只对POSTҎ有效Q对GETҎ无效。分析原因,应该是在执行W一个getParameter()的时候,java会按照~码分析所有的提交内容Q而后l的getParameter()不再q行分析Q所以setCharacterEncoding()无效。而对于GETҎ提交表单是,提交的内容在URL中,一开始就已经按照~码分析所有的提交内容QsetCharacterEncoding()自然无效?/font>
对于responseQ则是指定输出内容的~码Q同Ӟ该设|会传递给览器,告诉览器输出内Ҏ采用的编码?/font>
3.4. 处理q程
下面分析两个有代表性的例子Q说明java对编码有关问题的处理Ҏ?/font>
3.4.1. 表单输入
User input *(gbk:d6d0 cec4) browser *(gbk:d6d0 cec4) web server iso8859-1(00d6 00d 000ce 00c4) classQ需要在class中进行处理:getbytes("iso8859-1")为d6 d0 ce c4Qnew String("gbk")为d6d0 cec4Q内存中以unicode~码则ؓ4e2d 6587?/font>
l 用户输入的编码方式和面指定的编码有养I也和用户的操作系l有养I所以是不确定的Q上例以gbkZ?/font>
l 从browser到web serverQ可以在表单中指定提交内Ҏ使用的字W集Q否则会使用面指定的编码。而如果在url中直接用?的方式输入参敎ͼ则其~码往往是操作系l本w的~码Q因时和面无关。上qC旧以gbk~码Z?/font>
l Web server接收到的是字节流Q默认时QgetParameterQ会以iso8859-1~码处理之,l果是不正确的,所以需要进行处理。但如果预先讄了编码(通过request. setCharacterEncoding ()Q,则能够直接获取到正确的结果?/font>
l 在页面中指定~码是个好习惯,否则可能失去控制Q无法指定正的~码?/font>
3.4.2. 文g~译
假设文g是gbk~码保存的,而编译有两种~码选择Qgbk或者iso8859-1Q前者是中文windows的默认编码,后者是linux的默认编码,当然也可以在~译时指定编码?/font>
Jsp *(gbk:d6d0 cec4) java file *(gbk:d6d0 cec4) compiler read uincode(gbk: 4e2d 6587; iso8859-1: 00d6 00d 000ce 00c4) compiler write utf(gbk: e4b8ad e69687; iso8859-1: *) compiled file unicode(gbk: 4e2d 6587; iso8859-1: 00d6 00d 000ce 00c4) class。所以用gbk~码保存Q而用iso8859-1~译的结果是不正的?/font>
class unicode(4e2d 6587) system.out / jsp.out gbk(d6d0 cec4) os console / browser?/font>
l 文g可以以多U编码方式保存,中文windows下,默认为ansi/gbk?/font>
l ~译器读取文件时Q需要得到文件的~码Q如果未指定Q则使用pȝ默认~码。一般class文gQ是以系l默认编码保存的Q所以编译不会出问题Q但对于jsp文gQ如果在中文windows下编辑保存,而部|在英文linux下运?~译Q则会出现问题。所以需要在jsp文g中用pageEncoding指定~码?/font>
l Java~译的时候会转换成统一的unicode~码处理Q最后保存的时候再转换为utf~码?/font>
l 当系l输出字W的时候,会按指定~码输出Q对于中文windows下,System.out用gbk~码Q而对于responseQ浏览器Q,则用jsp文g头指定的contentTypeQ或者可以直接ؓresponse指定~码。同Ӟ会告诉browser|页的编码。如果未指定Q则会用iso8859-1~码。对于中文,应该为browser指定输出字符串的~码?/font>
l browser昄|页的时候,首先使用response中指定的~码Qjsp文g头指定的contentType最l也反映在response上)Q如果未指定Q则会用网中metaҎ定中的contentType?/font>
3.5. 几处讄
对于web应用E序Q和~码有关的设|或者函数如下?/font>
3.5.1. jsp~译
指定文g的存储编码,很明显,该设|应该置于文件的开头。例如:。另外,对于一般class文gQ可以在~译的时候指定编码?/font>
3.5.2. jsp输出
指定文g输出到browser是用的~码Q该讄也应该置于文件的开头。例如:。该讄和response.setCharacterEncoding("GBK"){效?/font>
3.5.3. meta讄
指定|页使用的编码,该设|对静态网尤其有作用。因为静态网|法采用jsp的设|,而且也无法执行response.setCharacterEncoding()。例如:
如果同时采用了jsp输出和meta讄两种~码指定方式Q则jsp指定的优先。因为jsp指定的直接体现在response中?/font>
需要注意的是,apache有一个设|可以给无编码指定的|页指定~码Q该指定{同于jsp的编码指定方式,所以会覆盖静态网中的meta指定。所以有人徏议关闭该讄?/font>
3.5.4. form讄
当浏览器提交表单的时候,可以指定相应的编码。例如:
。一般不必不使用该设|,览器会直接使用|页的编码?/font>
OutputStreamWriter out = ...
java.sql.Connection conn = ...
try {
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery(
"select uid, name from user");
while (rs.next())
{
out.println("IDQ? + rs.getString("uid") + "Q姓? " + rs.getString("name"));
}
}
catch(SQLException sqlex)
{
out.println("警告Q数据不完整");
throw new ApplicationException("d数据时出现SQL错误", sqlex);
}
catch(IOException ioex)
{
throw new ApplicationException("写入数据时出现IO错误", ioex);
}
finally
{
if (conn != null) {
try {
conn.close();
}
catch(SQLException sqlex2)
{
System.err(this.getClass().getName() + ".mymethod - 不能关闭数据库连? " + sqlex2.toString());
}
}
if (out != null) {
try {
out.close();
}
catch(IOException ioex2)
{
System.err(this.getClass().getName() + ".mymethod - 不能关闭输出文g" + ioex2.toString());
}
}
}
var jsParamValue=aaaa;
form1.jsParam.value=jsParamValue;
然后可以request.getPrameter("jsPrama");来取得js变量g
4QAction中request不会丢掉
不知大家有没有注意到q个好处QStruts架构中是׃个ActionServlet来作为MVC的控制器角色Qjsp面提交后request是传到ActionServelt中的Q?而ActionServlet根据struts-config.xml中的配置调用相应的Action的方法,q将从jsp中获得的request传给Actionc,q样request的生命周期是q箋的,即你在jsp中提交了表单Q在Action中执行了ҎQ再回到jsp面Q用request.getParamter()取jsp面的表单元素g发现它还在,q对于页面下拉列表等选择w止复位是一个很好实现方法?/font>
5Q传参时参数有空格的情况
如果你提交form时带参数Q比如form1.action="/jsp/Action.do?param1="+value1,注意如果value1中带有空格的话,你在
Action中request.getParameter("param1");
取得的只是空格前的|因此如果有这U带I格的参数在传递时Q个人徏议是其转化为特定的字符Ԍvalue1=value1.replaceAll(" ","%NULL%");
然后在Action中将其{回来Qrequest.getParamter("param1").replaceAll("%NULL%"," ");
6Qjsp中开模式对话框的方式
与Swing中类|jsp中也有模式对话框q一概念Q你可以一个jsp面攑ֈ一个模式对话框中打开Q这样在模式对话框消失前Q原jsp面不可操作。特别适合爉面中要做一些额外的选择操作Q而又没必要蟩转到新的jsp面的时候,
开模式对话框的方式参考如下:
Function open() {
If(window.showModelDialog())
{
Var returnValue = showModelDialog(“/jsp/模式H口包含的jsp面路径”;
help=0;status=0;center=yes;dialogWidth=100pt;dialogHeight=100pt”);
}
}
import javax.xml.rpc.encoding.XMLType;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class TestWebservice {
public String sendAjax(){
String result="";
String url="";
try{
//创徏一个服?br />
Service service=new Service();
//建立服务调用实例
Call call=(Call)service.createCall();
url="http://localhost:8000/webService/services/TestService";
//讑֮调用路径
call.setTargetEndpointAddress(url);
//讑֮调用Ҏ
call.setOperation("helloWord");
//讑֮q回cd
call.setReturnType(XMLType.XSD_STRING);
//开始调?/span>
result=(String)call.invoke(new Object[] {});
}catch(Exception e){
e.printStackTrace();
}
return result;
}
}
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
public class Hello extends TagSupport{
@Override
public int doStartTag() throws JspException {
//从页面获取request,得到面的?br />
ServletRequest request = pageContext.getRequest();
String str="
//在servlet中打印要使用printWriter
//如果在标{中打印需要用pageContext
JspWriter out=pageContext.getOut();
try{
out.print(str);
}catch(Exception e){
e.printStackTrace();
}
//只要打印完了字符Ԍ则后面的代码׃需要执行了
return TagSupport.SKIP_BODY;
}
}
tld文g的配|:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "web-jsptaglibrary_1_2.dtd" >
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>hello</short-name>
<tag>
<name>mldn</name>
<tag-class>com.wyq.TagTest.Hello</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class Example {
//建立一个静态的工场对象
private static SessionFactory session_factory = null;
//建立一个存储配|文件的对象--properties
private static Properties pops=new Properties();
//取得配置文g路径,配置文g存放在class路径?/span>
private static String path=Example.class.getClassLoader().getResource("").getPath()+"hibernate.properties";
//建立一个静态方法,用来d配置文g---hibernate.properties,在static静态方法中只能引用静态变?br />
static{
try{
String s=path.substring(1,path.length());
//d配置文g
InputStream stream= new FileInputStream(s);
//如果配置文g和类攑֜同一个目录下Q这U情况不使用
InputStream streams=Example.class.getResourceAsStream("hibernate.properties");
//配|文件存储在pops?/span>
pops.load(stream);
//建立配置文g理对象
Configuration cfg=new Configuration();
//Persond到cfg中,cM于将xxx.hbm.xml写在hibernate.hbm.xml?br />
cfg.addClass(Person.class);
//popsd到cfg中,是hiberante.hbm.xml
cfg.setProperties(pops);
//建立对象工厂
session_factory=cfg.buildSessionFactory();
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args)throws HibernateException{
Person person=new Person();
person.setName("wyq");
person.setEmail("hibernate.com.cn");
//取得一个session,获得q接
Session session=session_factory.openSession();
//定义一个事?/span>
Transaction tx=null;
try{
//开启一个事?/span>
tx=session.beginTransaction();
//具体业务操作
session.save(person);
tx.commit();
}catch(HibernateException ex){
if(tx!=null){
tx.rollback();
}
}
finally{
session.close();
}
}
}
private java.util.Timer timer;
timer = new Timer(true);
timer.schedule(
new java.util.TimerTask() { public void run() { //server.checkNewMail(); 要操作的Ҏ } }, 0, 5*60*1000);
W一个参数是要操作的ҎQ第二个参数是要讑֮延迟的时_W三个参数是周期的设定,每隔多长旉执行该操作?/p>
使用q几行代码之后,Timer本n会每?分钟调用一遍server.checkNewMail()ҎQ不需要自己启动线E。Timer本n也是多线E同步的Q多个线E可以共用一个TimerQ不需要外部的同步代码?
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.springframework.web.context.WebApplicationContext;
public class ReceiveJobd implements Job{
public void ReceiveJobd(){
}
//作业具体实现的功?br />
public void execute(JobExecutionContext context) throws
JobExecutionException {
try {
//建立JobDataMap对象Q用来接收传递的参数
JobDataMap dataMap = context.getMergedJobDataMap();
int ipLength = dataMap.getInt("ipLength");
int tablenameLength = dataMap.getInt("tablenameLength");
WebApplicationContext wc=(WebApplicationContext)dataMap.get("wcx");
String ip = "";
String tablename = "";
for (int i = 0; i < ipLength; i++) {
ip = dataMap.getString("ip" + i);
for (int j = 0; j < tablenameLength; j++) {
tablename = dataMap.getString("tablename" + j);
ExchangeAccess ea=new ExchangeAccess(ip,tablename,wc);
//启动U程
ea.start();
}
}
Scheduler scheduler = (Scheduler) dataMap.get("scheduler");
scheduler.deleteJob("ReceiveOnTimed", Scheduler.DEFAULT_GROUP);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}