这个问题头疼很久了,怎么搜索都搜不到答案,论坛和QQ群问也没人知道。
艹!!!!!!!!!!!!!!!!!!!!!!!!!
网上偶尔几个关于这方面的问题的都是讲resin3及以后的,2和配置文件与3格式完全不同,根本套用不上。
艹!!!!!!!!!!!!!!!!!!!!!!!!!
网上搜了个2.1.17版本的安装包,测试了好多次也没搞定。今天下狠心翻翻安装包里的源码 。经过检索后,在response.c里找到了一个设置http头部属性的方法,然后从这里上溯,在jni_vfs.c里找到了下面一行:
jniClass = (*env)->FindClass(env, "com/caucho/server/http/JniStream");
很明显,这里必然存在一个JniStream.class文件。然后在resin文件夹下的lib中翻了翻,在resin.jar里找到了这个文件。反编译了出来,然后又上溯上溯...,终于在HttpResponse找到了相关的设置。大概看了看代码,比较蛋疼的是,在发送请求前,它会检查头部是不是存在server,如果不存在,就把它的resinServerBytes属性添加上去。它的resinServerBytes属性定义是这样的:
static byte[] resinServerBytes = ("\r\nServer: Resin/" + Version.VERSION).getBytes();
Version.VERSION是一个常量,它的定义是:
public static String VERSION = "2.1.17";
问题就在这了。
艹!!!!!!!!!!!!!!!!!!!!!!!!!
我的想法是,改变一下 resinServerBytes 的定义,不显示Resin字段就好,然后就随便改了个test001之类的(方法参考的 http://blog.csdn.net/hexin373/article/details/6669813)。改完覆盖到jar包里,替换掉resin服务器目录下的resin.jar后,发现浏览器中看到的server信息的确不见了,但test001字段也没显示出来。原因是忘记加回车符了,用curl命令可以看到test001。
艹!!!!!!!!!!!!!!!!!!!!!!!!!
网上偶尔几个关于这方面的问题的都是讲resin3及以后的,2和配置文件与3格式完全不同,根本套用不上。
艹!!!!!!!!!!!!!!!!!!!!!!!!!
网上搜了个2.1.17版本的安装包,测试了好多次也没搞定。今天下狠心翻翻安装包里的源码 。经过检索后,在response.c里找到了一个设置http头部属性的方法,然后从这里上溯,在jni_vfs.c里找到了下面一行:
jniClass = (*env)->FindClass(env, "com/caucho/server/http/JniStream");
很明显,这里必然存在一个JniStream.class文件。然后在resin文件夹下的lib中翻了翻,在resin.jar里找到了这个文件。反编译了出来,然后又上溯上溯...,终于在HttpResponse找到了相关的设置。大概看了看代码,比较蛋疼的是,在发送请求前,它会检查头部是不是存在server,如果不存在,就把它的resinServerBytes属性添加上去。它的resinServerBytes属性定义是这样的:
static byte[] resinServerBytes = ("\r\nServer: Resin/" + Version.VERSION).getBytes();
Version.VERSION是一个常量,它的定义是:
public static String VERSION = "2.1.17";
问题就在这了。
艹!!!!!!!!!!!!!!!!!!!!!!!!!
我的想法是,改变一下 resinServerBytes 的定义,不显示Resin字段就好,然后就随便改了个test001之类的(方法参考的 http://blog.csdn.net/hexin373/article/details/6669813)。改完覆盖到jar包里,替换掉resin服务器目录下的resin.jar后,发现浏览器中看到的server信息的确不见了,但test001字段也没显示出来。原因是忘记加回车符了,用curl命令可以看到test001。
我想要不就这样处理吧,实在是受够了鸟。
--------------------------------------------------------------------------------2014/2/13--------------------------------------------------------------------
今天想完善下昨天的问题,采用在构造函数中更改resinServerBytes值为空值的方法来解决,用javassist重新修改下,代码如下。
package main;
import java.io.IOException;
import javassist.CannotCompileException;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.NotFoundException;
public class AsistentMain {
public static void main(String[] args) throws NotFoundException, CannotCompileException, IOException {
ClassPool cp = ClassPool.getDefault();
cp.insertClassPath("C:\\Users\\Simon\\Desktop");
// 获得类文件名
CtClass cc = cp.get("com.caucho.server.http.HttpResponse");
javassist.CtConstructor cc2=cc.getDeclaredConstructors()[0];
cc2.insertAfter("resinServerBytes=(\"\").getBytes();");
cc.writeFile("C:\\Users\\Simon\\Desktop");
}
}