了解下JAVA的Servlet过滤器先容之有用过滤器
java主要分三块,j2se:java的基础核心语言。j2me:java的微型模块,专门针对内存小,没有持续电源等小型设备。j2ee:java的企业模块,专门针对企业数据库服务器的连接维护。6.克制站点过滤器
假如你但愿在你的过滤器检测到不一般的非常而半途中止前面的过滤历程时,可如许做:
publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,
FilterChainchain)throwsServletException,IOException{
HttpServletRequestreq=(HttpServletRequest)request;
HttpServletResponseres=(HttpServletResponse)response;
if(isUnusualCondition(req)){
res.sendRedirect("http://www.somesite.com");
}else{
chain.doFilter(req,res);
}
}
下例是一个克制站点过滤器,假如不但愿某些站点会见你的网站,你能够在web.xml的param-value中列出它的站点,然后使用下面的道理跳出惯例过滤,给出克制会见的页面。
BannedAccessFilter.java
packagecom.zj.sample;
importjava.io.IOException;
importjava.io.PrintWriter;
importjava.net.MalformedURLException;
importjava.net.URL;
importjava.util.HashSet;
importjava.util.StringTokenizer;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
importjavax.servlet.http.HttpServletRequest;
publicclassBannedAccessFilterimplementsFilter{
privateHashSet<String>bannedSiteTable;
/**
*Denyaccessiftherequestcomesfromabannedsiteorisreferredhere
*byabannedsite.
*/
publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,
FilterChainchain)throwsServletException,IOException{
System.out.println("WithinBannedAccessFilter:FilteringtheRequest...");
HttpServletRequestreq=(HttpServletRequest)request;
StringrequestingHost=req.getRemoteHost();
StringreferringHost=getReferringHost(req.getHeader("Referer"));
StringbannedSite=null;
booleanisBanned=false;
if(bannedSiteTable.contains(requestingHost)){
bannedSite=requestingHost;
isBanned=true;
}elseif(bannedSiteTable.contains(referringHost)){
bannedSite=referringHost;
isBanned=true;
}
if(isBanned){
showWarning(response,bannedSite);
}else{
chain.doFilter(request,response);
}
System.out.println("WithinBannedAccessFilter:FilteringtheResponse...");
}
/**
*Createatableofbannedsitesbasedoninitializationparameters.
*Rememberthatversion2.3oftheservletAPImandatestheuseofthe
*Java2Platform.Thus,itissafetouseHashSet(whichdetermines
*whetheragivenkeyexists)ratherthantheclumsierHashtable
*(whichhasavalueforeachkey).
*/
publicvoidinit(FilterConfigconfig)throwsServletException{
bannedSiteTable=newHashSet<String>();
StringbannedSites=config.getInitParameter("bannedSites");
//Defaulttokenset:whitespace.
StringTokenizertok=newStringTokenizer(bannedSites);
while(tok.hasMoreTokens()){
StringbannedSite=tok.nextToken();
bannedSiteTable.add(bannedSite);
System.out.println("Banned"+bannedSite);
}
}
publicvoiddestroy(){}
privateStringgetReferringHost(StringrefererringURLString){
try{
URLreferringURL=newURL(refererringURLString);
return(referringURL.getHost());
}catch(MalformedURLExceptionmue){//Malformedornull
return(null);
}
}
//Replacementresponsethatisreturnedtousers
//whoarefromorreferredherebyabannedsite.
privatevoidshowWarning(ServletResponseresponse,StringbannedSite)
throwsServletException,IOException{
response.setContentType("text/html");
PrintWriterout=response.getWriter();
StringdocType="<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0"
+"Transitional//EN">
";
out.println(docType+"<HTML>
"
+"<HEAD><TITLE>AccessProhibited</TITLE></HEAD>
"
+"<BODYBGCOLOR="WHITE">
"+"<H1>AccessProhibited</H1>
"
+"Sorry,accessfromorvia"+bannedSite+"
"
+"isnotallowed.
"+"</BODY></HTML>");
}
}<p>
什么时候上述的三种开发工具能和三为一,什么时候java的竞争力才更强,才有机会拉拢更多的程序员投入到对java的开发上,因为到时的开发工具将会比.net的更简单。还有一点也很关键,什么时候java推出的jsf能成为真正意义上的标准。 J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
页:
[1]