jsp中如何让程序强行执行完毕再输出到客户端 不可能吧,jsp是在服务器端运行,javascript是在客户端运行,当js运行的时候,jsp都应该执行完毕了。应该是程序写得有问题,仔细查一下 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ,不可能以这种方式控制页面的执行的,虽然Javascript和JSP可以相互嵌入,但是页面中的所有的代码都是顺序执行,不好去等待的,如果你非要先执行其他页面那么肯定要变通一下,以下未经测试:比如可以在你先执行的页面(location.href='http://www.home.com')的body的onload=''里面给当前页面继续执行的信号或者驱动。 第一步: 程序取出柜号(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文件,头疼!~~~ 我发觉了第一部可以不需要,(上面的第一步可以去掉)真正的登陆验证是发生在第二步,只有第二步的登陆才能够获取第三步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&nr=")>=0) { nr_str=sTotalString.substring(sTotalString.indexOf("ContainerPlan&nr=")+21,sTotalString.indexOf("ContainerPlan&nr=")+29); t3_str=sTotalString.substring(sTotalString.lastIndexOf("&t3=")+8,sTotalString.lastIndexOf("&t3=")+10); t12_str=sTotalString.substring(sTotalString.lastIndexOf("&t12=")+9,sTotalString.lastIndexOf("&t12=")+11); cnt_str=sTotalString.substring(sTotalString.indexOf("&CntnrPlan=")+15,sTotalString.indexOf("&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); 不明白为什么,读取到的页面好象说我没经过登陆,不是我需要的页面... 我必须先跳转到他的网站,才能获取他的数据,否则会提示没有登陆,权限不够???这个用java模拟http请求就行了,发出相应的http请求的格式,然后就可以取得你的内容.js和jsp执行的地方是不样的,服务器不管你的代码是不是js,都会解释为html,然后你的浏览器都会执行里面的js 有2个tomcat, 都要使用, 如何设置? 请问为什么我配置的spring定时器在tomcat启动的时候没有执行? sturts2 部署项目时出错 (急) 高分求助用jboss_tomcat整合版如何配置cloudscape数据库连接池,在线等候? struts验证问题 该怎么样来编JSP程序,至今没搞懂,那位好心人点拨点拨我啊~~ 怎样不通过post传输方式传输数据(肯定给分) JBuilder7+WebLogic7出现的问题,急! 关于在一个页面内调用方法的问题! 如何在jsp中删除单前记录? jsp怎么样实现缩图 数据库递归查询的一个问题
虽然Javascript和JSP可以相互嵌入,
但是页面中的所有的代码都是顺序执行,不好去等待的,如果你非要先执行其他页面那么肯定要变通一下,
以下未经测试:比如可以在你先执行的页面(location.href='http://www.home.com')
的body的onload=''里面给当前页面继续执行的信号或者驱动。
然后利用柜号自动登陆,登陆地址是:
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文件,头疼!~~~
真正的登陆验证是发生在第二步,只有第二步的登陆才能够获取第三步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&nr=")>=0)
{
nr_str=sTotalString.substring(sTotalString.indexOf("ContainerPlan&nr=")+21,sTotalString.indexOf("ContainerPlan&nr=")+29);
t3_str=sTotalString.substring(sTotalString.lastIndexOf("&t3=")+8,sTotalString.lastIndexOf("&t3=")+10);
t12_str=sTotalString.substring(sTotalString.lastIndexOf("&t12=")+9,sTotalString.lastIndexOf("&t12=")+11);
cnt_str=sTotalString.substring(sTotalString.indexOf("&CntnrPlan=")+15,sTotalString.indexOf("&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);
不明白为什么,读取到的页面好象说我没经过登陆,不是我需要的页面...
否则会提示没有登陆,权限不够
???
这个用java模拟http请求就行了,
发出相应的http请求的格式,然后就可以取得你的内容.js和jsp执行的地方是不样的,
服务器不管你的代码是不是js,
都会解释为html,然后你的浏览器都会执行里面的js