如题,我目的是把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);     
  }     
 }   
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【yinlei109】截止到2008-07-24 12:15:49的历史汇总数据(不包括此帖):
    发帖的总数量:2                        发帖的总分数:200                      每贴平均分数:100                      
    回帖的总数量:31                       得分贴总数量:12                       回帖的得分率:38%                      
    结贴的总数量:2                        结贴的总分数:200                      
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!
      

  2.   

        我有一组JSP页面。运行第一次后,想生成相对应的静态的HTML页面, 今后就在页面显示就直接显示那HTML页面,
    提高系统的性能。由于考虑通用行,不能使用模板生成。 
    或者有没有好的把 JSP页面转换成静态HTML的方法,不能用模板。框架是struts,url是XXXX。do的方式。
      

  3.   

     现在问题就是不知道怎么把项目的登陆session 带过去。。
      

  4.   

    人为操控session吗?这个是不可行的
    其余的就不懂了
      

  5.   

    你抓一个已经带有session的http头
    看看里面的cookie 怎么设置的.
    再说如果只是简单的sessionId来判断session你也应该这么写啊,
    ts.setRequestProperty("Cookie",  "sessionId="sessionId);
    再看看吧.应该可以的
      

  6.   

    你抓一个已经带有session的http头
    看看里面的cookie 怎么设置的.
    再说如果只是简单的sessionId来判断session你也应该这么写啊,
    ts.setRequestProperty("Cookie",  "sessionId="+sessionId);
    再看看吧.应该可以的
    少打个+号..
      

  7.   

    试试
    ts.setRequestProperty("Cookie", "JSESSIONID=" + sessionId);
      

  8.   

    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);
      

  9.   

    哦.还没理解标题的含义.不好意思.推荐楼主使用HTTPClient.jar吧,这个插件是可以控制访问的cookie和session的.想要HTML的内容,可以从浏览器的查看源文件里面得到,没有必要那么复杂.
      

  10.   

    谢谢sagezk ,他的方法可以把sessionId带过去。
    用ts.setRequestProperty("Cookie",  "sessionId="+sessionId); 
    不可以。就是还存在点疑问?不知道谁有HttpURLConnection相关的资料。。
      

  11.   


    楼主看看这个:http://www.360doc.com/showWeb/0/0/97064.aspx