高分求url.openConnection()时怎么把url的session带过去

yinlei109 2008-07-24 12:15:45
如题,我目的是把JSP页面转换成静态的HTML,url.openConnection()中的url是我项目中的JSP文件的路径,由于项目的页面有验证session是否失效,所以当url.openConnection()打开的页面时候session是空的,所以页面回直接跳转到session失效的页面,得不到url的那个页面,我查了网上的很多方法,都不可行 ,所以特来发贴求救
代码如下:
public void getHtmlReport(String[] urlList,String protocol,String host,String sessionId ){
try
{
if(urlList.length < 1)
{
log.debug("Use: java TestSocket 所要转换的页面的URL [转换后要保存的文件名]");
//System.out.println("Use: java TestSocket 所要转换的页面的URL [转换后要保存的文件名]");
return;
}
String urlString = urlList[0];
URL url = new URL(urlString);

HttpURLConnection ts = (HttpURLConnection)url.openConnection();
ts.setRequestProperty("Cookie", sessionId);//我从request中获得的sessionID
ts.setRequestMethod("GET");
ts.setRequestProperty("Connection", "Keep-Alive");
ts.setRequestProperty("User-Agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
ts.setDoOutput(true);
ts.setDoInput(true);
ts.setAllowUserInteraction(false);

ts.connect();
InputStream socketInput = ts.getInputStream();

BufferedReader in = new BufferedReader(new InputStreamReader(socketInput));
String fileName = url.getContent().toString() + ".html";
if (urlList.length > 1)
{
fileName = urlList[1];
}
log.debug("to:"+fileName);
PrintWriter file = new PrintWriter(new FileWriter(fileName), true);
while (true)
{
try
{
String s = in.readLine();
if (s == null)
{
break;
}

file.print(s);
}
catch (Exception e)
{
System.out.println(e);
break;
}
}
file.close();
log.debug("转换完成");
//System.out.println("转换完成");
}
catch(Exception e)
{
log.debug(e);
//System.out.println(e);
}
}
}
...全文
353 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
jishu_vip 2008-07-24
  • 打赏
  • 举报
回复
这个有难度

友情顶贴。
yinlei109 2008-07-24
  • 打赏
  • 举报
回复
没人回啊。。难道都吃饭了?
yinlei109 2008-07-24
  • 打赏
  • 举报
回复
我有一组JSP页面。运行第一次后,想生成相对应的静态的HTML页面, 今后就在页面显示就直接显示那HTML页面,
提高系统的性能。由于考虑通用行,不能使用模板生成。
或者有没有好的把 JSP页面转换成静态HTML的方法,不能用模板。框架是struts,url是XXXX。do的方式。
yinlei109 2008-07-24
  • 打赏
  • 举报
回复
好的。。谢谢大家了。现在结贴。。
atlantisly 2008-07-24
  • 打赏
  • 举报
回复
友情顶,也想知道结果
sagezk 2008-07-24
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 yinlei109 的回复:]
谢谢sagezk ,他的方法可以把sessionId带过去。
用ts.setRequestProperty("Cookie",  "sessionId="+sessionId);
不可以。就是还存在点疑问?不知道谁有HttpURLConnection相关的资料。。
[/Quote]

楼主看看这个:http://www.360doc.com/showWeb/0/0/97064.aspx
yinlei109 2008-07-24
  • 打赏
  • 举报
回复
谢谢sagezk ,他的方法可以把sessionId带过去。
用ts.setRequestProperty("Cookie", "sessionId="+sessionId);
不可以。就是还存在点疑问?不知道谁有HttpURLConnection相关的资料。。
冰思雨 2008-07-24
  • 打赏
  • 举报
回复
哦.还没理解标题的含义.不好意思.

推荐楼主使用HTTPClient.jar吧,这个插件是可以控制访问的cookie和session的.

想要HTML的内容,可以从浏览器的查看源文件里面得到,没有必要那么复杂.
冰思雨 2008-07-24
  • 打赏
  • 举报
回复
Tomcat之类的Web容器,好象能配置楼主说的那个功能.推荐楼主找一找.我记得主页就可以设置成静态访问的,但它是内存形式的静态页面,不对应HTML文件.

方法,我这里到是有一个,但是,页面很多的情况下,效果未必显著.而且可能会打乱MVC的架构.

1.先配置一个Filter.在里面添加一个Map cache = Collections.synchronizedMap(new HashMap());
这个Map的key是对应页面的URL,value可以是静态HTML的URL.

2.在Filter的init方法里面,对cache对象进行初始化配置,将你要静态化的jsp的URL以及对应的value值添加进去.

3.在doFilter方法里面,编写核心内容.
A.先从request里面取出url
B.Object obj = map.get(url);
if(obj!=null){
//对obj做URL重定向.让客户端访问静态HTML
reuturn;
}
C.doFilterChan(request,response);
sagezk 2008-07-24
  • 打赏
  • 举报
回复
试试
ts.setRequestProperty("Cookie", "JSESSIONID=" + sessionId);
sunjunpan 2008-07-24
  • 打赏
  • 举报
回复
你抓一个已经带有session的http头
看看里面的cookie 怎么设置的.
再说如果只是简单的sessionId来判断session你也应该这么写啊,
ts.setRequestProperty("Cookie", "sessionId="+sessionId);
再看看吧.应该可以的
少打个+号..
sunjunpan 2008-07-24
  • 打赏
  • 举报
回复
你抓一个已经带有session的http头
看看里面的cookie 怎么设置的.
再说如果只是简单的sessionId来判断session你也应该这么写啊,
ts.setRequestProperty("Cookie", "sessionId="sessionId);
再看看吧.应该可以的
tince 2008-07-24
  • 打赏
  • 举报
回复
人为操控session吗?这个是不可行的
其余的就不懂了
yinlei109 2008-07-24
  • 打赏
  • 举报
回复
现在问题就是不知道怎么把项目的登陆session 带过去。。
lisl2003 2008-07-24
  • 打赏
  • 举报
回复
关注,期待高人。
ldy214 2008-07-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jishu_vip 的回复:]
这个有难度

友情顶贴。
[/Quote]
zidasine 2008-07-24
  • 打赏
  • 举报
回复
关注解决方案

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧