不可能吧,jsp是在服务器端运行,javascript是在客户端运行,当js运行的时候,jsp都应该执行完毕了。应该是程序写得有问题,仔细查一下

解决方案 »

  1.   

    ,不可能以这种方式控制页面的执行的,
    虽然Javascript和JSP可以相互嵌入,
    但是页面中的所有的代码都是顺序执行,不好去等待的,如果你非要先执行其他页面那么肯定要变通一下,
    以下未经测试:比如可以在你先执行的页面(location.href='http://www.home.com')
    的body的onload=''里面给当前页面继续执行的信号或者驱动。
      

  2.   

    第一步: 程序取出柜号(cont=APMU4502279)
    然后利用柜号自动登陆,登陆地址是:
    http://www.maersksealand.com:80/HomePage/appmanager/?_nfpb=true&portlet_quickentries_actionOverride=/portlets/quickentries/trackCargo?portlet_quickentrieswlw-select_key:{pageFlow.quickEntryForm.trackType}OldValue=true&portlet_quickentrieswlw-select_key:{pageFlow.quickEntryForm.trackType}=Container&portlet_quickentries{pageFlow.quickEntryForm.trackNo}="+cont+"
    这儿有点长,但他们的登陆地址就是这个
    第二步,让程序跳转到:
    http://etrack.maersksealand.com/ats2/unreg/postlogin.jsp?kdo=atsrq001&queryresulttyp=L&querytype=Container&queryvalue="+cont+"
    然后再让程序远程获取该页面的HTML源文件(已经实现)
    分析HTML找出下一个跳转页面的传递参数(参数有:visningstype,nr,t3,t12,CntnrPlan,CntnrNumber)
    即,下一个页面所需的参数:
       举例: http://etrack.maersksealand.com/ats2/unreg/ctrdetails.jsp?visningstype=ContainerPlan&nr=74630644&t3=00&t12=00&CntnrPlan=74630644&CntnrNumber=APMU4502279
    第三步:获取http://etrack.maersksealand.com/ats2/unreg/ctrdetails.jsp?visningstype=ContainerPlan&nr=74630644&t3=00&t12=00&CntnrPlan=74630644&CntnrNumber=APMU4502279 的HTML文件,如果文件中含有value="North american rail moves"字样,就跳转到下一个页面
    http://etrack.maersksealand.com/ats2/unreg/details.jsp?kdo=show&visningstype=RailMoves&nr=APMU4502279&t3=0&t12=0#b2,否则到此停止上面的这些需要让程序自动完成,结果第三步获取不了正确的HTML文件,头疼!~~~
      

  3.   

    我发觉了第一部可以不需要,(上面的第一步可以去掉)
    真正的登陆验证是发生在第二步,只有第二步的登陆才能够获取第三步URL所需要的参数,
    可怜啊!第二步都能够获取远程的HTML文件,第三步却跳到了其他的HTML页面去了,好象说我没权限去获取他的第三步操作的数据,可是我已经经过第二步的操作了!
    代码:
    =====================view_cont.jsp======================
    //eg:cont=MSKU8145048
    <%
    String cont=request.getParameter("cont");  
    out.println("<SCRIPT Language='JavaScript'>\n");
    out.println("<!--//\n");
    out.println(" out.println("   location.href='http://etrack.maersksealand.com/ats2/unreg/postlogin.jsp?kdo=atsrq001&queryresulttyp=L&querytype=Container&queryvalue="+cont+"'\n");
    out.println("   location.href='view_cont1.jsp?cont="+cont+"'\n");
    out.println("//-->\n");
    out.println("</SCRIPT>\n");
    %>
    =====================view_cont1.jsp====================
    String cont=request.getParameter("cont");
    String sCurrentLine=""; 
    String sTotalString="";
    java.io.InputStream l_urlStream; 
    java.net.URL l_url = new java.net.URL("http://etrack.maersksealand.com/ats2/unreg/postlogin.jsp?kdo=atsrq001&queryresulttyp=L&querytype=Container&queryvalue="+cont); 
    java.net.HttpURLConnection l_connection = (java.net.HttpURLConnection) l_url.openConnection();
    l_connection.setDoOutput(true); 
    l_connection.setAllowUserInteraction(true);
    l_connection.setUseCaches(true);
    l_connection.connect(); 
    l_urlStream = l_connection.getInputStream(); 
    java.io.BufferedReader l_reader = new java.io.BufferedReader(new java.io.InputStreamReader(l_urlStream)); 
    while ((sCurrentLine = l_reader.readLine()) != null) 

       sTotalString+=sCurrentLine; 

     String nr_str="",t3_str="",t12_str="",cnt_str="";
     if(sTotalString.indexOf("ContainerPlan&amp;nr=")>=0)
     {   
      nr_str=sTotalString.substring(sTotalString.indexOf("ContainerPlan&amp;nr=")+21,sTotalString.indexOf("ContainerPlan&amp;nr=")+29);
      t3_str=sTotalString.substring(sTotalString.lastIndexOf("&amp;t3=")+8,sTotalString.lastIndexOf("&amp;t3=")+10);
         t12_str=sTotalString.substring(sTotalString.lastIndexOf("&amp;t12=")+9,sTotalString.lastIndexOf("&amp;t12=")+11);
         cnt_str=sTotalString.substring(sTotalString.indexOf("&amp;CntnrPlan=")+15,sTotalString.indexOf("&amp;CntnrPlan=")+23);
     
         out.println("<SCRIPT Language='JavaScript'>\n");
         out.println("<!--//\n");
         out.println("   location.href='http://etrack.maersksealand.com/ats2/unreg/ctrdetails.jsp?visningstype=ContainerPlan&nr="+nr_str+"&t3="+t3_str+"&t12="+t12_str+"&CntnrPlan="+cnt_str+"&CntnrNumber="+cont+"'\n");
         out.println("   location.href='view_cont2.jsp?visningstype=ContainerPlan&nr="+nr_str+"&t3="+t3_str+"&t12="+t12_str+"&CntnrPlan="+cnt_str+"&CntnrNumber="+cont+"'\n");
     out.println("//-->\n");
         out.println("</SCRIPT>\n");
     }
    else
     {
        out.println(sTotalString);
     }
    %>
    ================view_cont2.jsp================
    String visningstype=request.getParameter("visningstype");
    String nr_str=request.getParameter("nr");
    String t3_str=request.getParameter("t3");
    String t12_str=request.getParameter("t12");
    String cnt_str=request.getParameter("CntnrPlan");
    String cont=request.getParameter("CntnrNumber");
    String sCurrentLine=""; 
    String sTotalString="";
    java.io.InputStream x_urlStream; 
    java.net.URL x_url = new java.net.URL("http://etrack.maersksealand.com/ats2/unreg/ctrdetails.jsp?visningstype=ContainerPlan&nr="+nr_str+"&t3="+t3_str+"&t12="+t12_str+"&CntnrPlan="+cnt_str+"&CntnrNumber="+cont); 
    java.net.HttpURLConnection x_connection = (java.net.HttpURLConnection) x_url.openConnection();
    x_connection.setDoOutput(true); 
    x_connection.setAllowUserInteraction(true);
    x_connection.setUseCaches(true);
    x_connection.connect(); 
    x_urlStream = x_connection.getInputStream(); 
    java.io.BufferedReader x_reader = new java.io.BufferedReader(new java.io.InputStreamReader(x_urlStream)); 
    while ((sCurrentLine = x_reader.readLine()) != null) 

       sTotalString+=sCurrentLine; 

    out.println(sTotalString); 
    不明白为什么,读取到的页面好象说我没经过登陆,不是我需要的页面...
      

  4.   

    我必须先跳转到他的网站,才能获取他的数据,
    否则会提示没有登陆,权限不够
    ???
    这个用java模拟http请求就行了,
    发出相应的http请求的格式,然后就可以取得你的内容.js和jsp执行的地方是不样的,
    服务器不管你的代码是不是js,
    都会解释为html,然后你的浏览器都会执行里面的js