发布一篇J2EE经由过程Filter交换前往页面的内容
不得不提一下的是:.net是看到java红,而开发出来的工具。一个汗青项目,客户请求改ip,因为体系较为长远,没有源代码,经由过程反编译后发明ip写逝世在类中,反编译后的代码基础没法举行修正,剖析了代码后,发明与ip相干的内容为前往到页面中的字符串,以是,想到了利用Filter,在Filter中处置这些字符串,以为可行,便查询了一些材料,实验乐成。以下这个类是从网上找到的,实验乐成后发明页面已关了,对原作者暗示抱愧的同时暗示感激。
packageorg.mice.ipchange;
importjava.io.ByteArrayOutputStream;
importjava.io.IOException;
importjava.io.OutputStreamWriter;
importjava.io.PrintWriter;
importjava.io.UnsupportedEncodingException;
importjavax.servlet.ServletOutputStream;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpServletResponseWrapper;
publicclassResponseWrapperextendsHttpServletResponseWrapper{
privateByteArrayOutputStreambuffer=null;
privateServletOutputStreamout=null;
privatePrintWriterwriter=null;
publicResponseWrapper(HttpServletResponseresp)throwsIOException{
super(resp);
buffer=newByteArrayOutputStream();//真正存储数据的流
out=newWapperedOutputStream(buffer);
writer=newPrintWriter(newOutputStreamWriter(buffer,
this.getCharacterEncoding()));
}
//重载父类猎取outputstream的办法
publicServletOutputStreamgetOutputStream()throwsIOException{
returnout;
}
//重载父类猎取writer的办法
publicPrintWritergetWriter()throwsUnsupportedEncodingException{
returnwriter;
}
//重载父类猎取flushBuffer的办法
publicvoidflushBuffer()throwsIOException{
if(out!=null){
out.flush();
}
if(writer!=null){
writer.flush();
}
}
publicvoidreset(){
buffer.reset();
}
publicbyte[]getResponseData()throwsIOException{
//将out、writer中的数据强迫输入到WapperedResponse的buffer内里,不然取不到数据
flushBuffer();
returnbuffer.toByteArray();
}
//外部类,对ServletOutputStream举行包装
privateclassWapperedOutputStreamextendsServletOutputStream{
privateByteArrayOutputStreambos=null;
publicWapperedOutputStream(ByteArrayOutputStreamstream)throwsIOException{
bos=stream;
}
publicvoidwrite(intb)throwsIOException{
bos.write(b);
}
}
}前往栏目页:http://www.bianceng.cn/Programming/Java/
编写详细的Filter,内容以下
packageorg.mice.ipchange;
importjava.io.IOException;
importjava.io.PrintWriter;
importjava.util.Enumeration;
importjava.util.MissingResourceException;
importjava.util.ResourceBundle;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
publicclassIPChangeFilterimplementsFilter{
publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,
FilterChainchain)throwsIOException,ServletException{
//必要设置这个,以防乱码
response.setContentType("text/html;charset=GBK");
HttpServletRequesthttpReq=(HttpServletRequest)request;
HttpServletResponsehttpResp=(HttpServletResponse)response;
ResponseWrapperrespWrapper=newResponseWrapper(httpResp);
chain.doFilter(request,respWrapper);
//weblogic8不撑持response.setCharacterEncoding
//response.setCharacterEncoding("GBK");
Stringcontent=newString(respWrapper.getResponseData());
Stringresult=replaceText(content);
httpResp.setContentType("text/html;charset=GBK");
PrintWriterout=httpResp.getWriter();
out.println(result);
out.close();
}
/**
*交换内容
*/
privateStringreplaceText(Stringcontent){
Enumerationenumes=RESOURCE_BUNDLE.getKeys();
while(enumes.hasMoreElements()){
Stringo=enumes.nextElement().toString();
content=content.replaceAll(o,RESOURCE_BUNDLE.getString(o));
}
returncontent;
}
//交换笔墨的设置文件路径
privatestaticfinalStringBUNDLE_NAME="org.mice.ipchange.ipchange";
//加载设置文件
privatestaticfinalResourceBundleRESOURCE_BUNDLE=ResourceBundle
.getBundle(BUNDLE_NAME);
//猎取交换笔墨
publicstaticStringgetString(Stringkey){
try{
returnRESOURCE_BUNDLE.getString(key);
}catch(MissingResourceExceptione){
e.printStackTrace();
}
returnkey;
}
publicvoidinit(FilterConfigarg0)throwsServletException{
//TODOAuto-generatedmethodstub
}
publicvoiddestroy(){
//TODOAuto-generatedmethodstub
}
}最初,在设置文件ipchange.properties中设置好你要交换的键值对就能够了,对了,别忘了在你的web.xml中界说Filter,并利用Filter。
csdn博客yueritian
C++编译的是本地码,优点是启动快,而且可以精确控制资源因此可以开发很高效的程序.缺点是编程麻烦,而且容易留下安全隐患.跨平台靠源代码在各个平台间分别编译(一处编写到处编译) Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 Java 编程语言的风格十分接近C、C++语言。 Java是一种计算机编程语言,拥有跨平台、面向对java 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 是一种使用者不需花费很多时间学习的语言
页:
[1]