很惭愧,我不懂JSP。虚心向各位JSP版的XDJM们请教。我用ASP写了一个网页,返回结果只是字符串的“1”或者“0”,连HTML标签也没有。
如果用客户端的AJAX访问就简单了。可是我希望用JSP写的网页在它的服务器端能够使用XMLHttpRequest或其他方式访问我的ASP网页,将ASP返回的字符串(1或0)保存在JSP的Session里。要求:
1、最好写1个函数,名称是CheckAJAX,参数是访问的ASP的URL。函数内部用XMLHttpRequest或其他方式访问URL,返回ASP网页的结果,不使用异步访问。
如果用XMLHttpRequest,open方法的三个参数是"GET"、URL、false。2、这个JSP文件也需要代入两个参数:MyID和MyCode。这两个参数是提交到这个JSP文件的表单中文本框的名称。
用JSP实现类似下面代码的功能(我的是ASP代码):/****开始****//*表单中名称为MyCode的文本框中输入了文字,asp代码*/
<%
        If Request.Form("MyCode") <>"" Then                /*执行CheckAJAX函数,代入URL参数,将返回内容存入Session变量"Result"中。
                /*需要加入时间戳,使不能使用缓存。ASP的Timer可以返回从半夜零点开始到现在的毫秒数
                Session("Result") = CheckAJAX("http://www.AAAAA/Check.asp?TimeStamp=" & Timer & _
                                              "&ID=" & Request.Form("MyID") & _
                                              "&Code=" & Request.Form("MyCode"))
        End If
%><p>这是HTML代码。URL返回结果是:<%=Session("Result")%></p>
/*ASP代码*/
<%
        If Session("Result") = "1" Then
Response.Write("<p>是1</p>")
        Else
Response.Write("<p>不是1</p>")
        End If
%>/****结束****/3、请写出完整的包括HTML的代码。就是包括:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head><body>
</body>
</html>非常感激!

解决方案 »

  1.   

    好有创意的想法,我个人认为如果这个过程能实现的话也会非常的烦琐,烦琐到还不如全换成jsp或asp的一种. 因为如过jsp和asp能简单的实现互相访问的话,那么这就不能单独的称为两种语言了...,但也希望真有这样的实现方法,期待高手吧...
      

  2.   

    感谢参与!
    楼上可能理解错了。ASP是我写的提供一种服务的网页。我希望其他语言的网页能够在它的服务器访问我的ASP,更新它的Session。就像AJAX一样,据我了解,只要在Javascript中使用AJAX,不管访问的URL是什么语言,都能得到结果。
    我只是想把这个过程放在使用我的服务的其他语言的服务器中。
      

  3.   

    比较同意一楼的说法,真的很难吧。
    我记得以前配置公司产品的sso的时候,可以将第3方的系统如asp系统配置到统一账户管理系统过来,统一账户管理系统是java的,中间通过vc进行通信。配置都很复杂,更不用说实现了。
    本人愚见
      

  4.   

    这么多需求。。才50分
    随手写个函数 楼主参考啦 public String CheckAJAX(String strUrl){
    try{
    URL url=new URL(strUrl);
    HttpURLConnection con = (HttpURLConnection)url.openConnection();
        DataInputStream in = new DataInputStream(new BufferedInputStream(con.getInputStream()));
        InputStreamReader isr=new InputStreamReader(in);
        BufferedReader bs=new BufferedReader(isr);
        StringBuffer strBf=new StringBuffer();
        while(bs.ready()){
             strBf.append(bs.readLine());
        }
        return strBf.toString();
      }catch(Exception e){
      System.out.println("error:"+e);
      return "";
      }
    }
      

  5.   

    我是楼主。
    真的很惭愧,50分是我有史以来给的最高分啦!
    把这个函数的返回值存入session该怎么写?我不会JSP。
      

  6.   

    我贴出我现在用ASP写的全部代码。核心代码只有4行。
    /***开始***/
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Check Validate Code By WFSVI service</title>
    </head>
    <body><%
    Function CheckAJAX(praURL)
    Dim myXMLHttpObj
    Set myXMLHttpObj = Server.CreateObject("Msxml2.XMLHTTP.5.0")myXMLHttpObj.open "GET",praURL,false
    myXMLHttpObj.sendCheckVCByAJAX = myXMLHttpObj.responseBodySet myXMLHttpObj = Nothing
    End functionIf Request.Form("MyCode") <>"" Then
    Session("Result") = CheckAJAX("http://www.AAAAA.com/Check.asp?TimeStamp=" & Timer & _
    "&ID=" & Request.Form("myID") & _
    "&Code=" & Request.Form("myCode"))
    End If
    %><p>这是HTML代码。URL返回结果是:<%=Session("Result")%></p><%
    If Session("Result") = "1" Then
    Response.Write("<p>是1</p>")
    Else
    Response.Write("<p>不是1</p>")
    End If
    %></body>
    </html>
    /***结束***/其中,假设www.AAAAA.com是我的网站,我用ASP写了一个网页 Check.asp,需要带入2个参数:ID和Code。这个网页提供了一个服务,咱们姑且不需要知道是什么服务,这样会使问题复杂化。只需要知道,通过带入的2个参数经过处理,最终Check.asp返回的结果只是字符串“1”或“0”。“1”代表成功。另外一个网站,假设是www.BBBBB.com,是别人的网站。这个网站可能是asp.net,也可能是PHP或JSP。
    这个网站的访问者打开一个动态网页,输入表单中名称是MyID和MyCode的文本框,提交到他的服务器(也就是www.BBBBB.com。会有人问为什么吗?请再看看上两行字。)。提交到www.BBBBB.com服务器的动态网页在他自己的服务器端访问我的 www.AAAAA.com/Check.asp,带入三个参数:第一个是时间戳,单位是毫秒,保证每次访问都不重复,不使用缓存。第二个和第三个是表单中名称是MyID和MyCode文本框的内容。在www.BBBBB.com访问了我的ASP之后,我需要它能将Check.asp返回的结果存入它自己的Seesion变量中。这样它就可以知道自己的每个访问者执行了我的服务之后的结果。这是我琢磨出来的Seesion跨域共享的方法。在两个都是ASP写的网站中已经可以成功“共享”Session。
    但是我需要其他的动态语言编写的www.BBBBB.com也能使用这个方法。所以来此请教。分不是问题,还可以加。
      

  7.   

    楼主,建议您使用web service吧,这样的话,倒是可以实现网站之间的通信。
      

  8.   

    原来用过的一个远程查询接口就是这么玩的,
    建议楼主查询连接加入数字签名md5或SHA1码防止恶意访问
      

  9.   

    <%@ page language="java" contentType="text/html;charset=GBK" %>  
    <%@ page import="java.net.*,java.io.*;"%>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Check Validate Code By WFSVI service</title>
    </head>
    <body><%!
    public String CheckAJAX(String strUrl){
    try{
    URL url=new URL(strUrl);
    HttpURLConnection con = (HttpURLConnection)url.openConnection();
        DataInputStream in = new DataInputStream(new BufferedInputStream(con.getInputStream()));
        InputStreamReader isr=new InputStreamReader(in);
        BufferedReader bs=new BufferedReader(isr);
        StringBuffer strBf=new StringBuffer();
        while(bs.ready()){
            strBf.append(bs.readLine());
        }
        return strBf.toString();
     }catch(Exception e){
     System.out.println("error:"+e);
     return "error:"+e;
     }
    }
    %><%
    if(!"".equals(request.getParameter("MyCode"))){
    session.setAttribute("Resule",CheckAJAX("http://oatest:9080/test.jsp?TimeStamp=" + new java.util.Date().getTime()+"&ID="+request.getParameter("myID")+"&Code="+request.getParameter("myCode")));
    }
    String resule=(String)session.getAttribute("Resule");
    %>
    <p>这是HTML代码。URL返回结果是:<%=resule%></p><%
    if("1".equals(resule)){
    out.println("<p>是1</p>");
    }else{
    out.println("<p>不是1</p>");
    }
    %></body>
    </html>
      

  10.   

    感谢楼上的代码!这就是我想要的!非常感谢!我这还是第一次仔细读JSP代码,大概可以看懂。CheckAJAX函数我这样理解对吧?/*将参数转换为URL*/
    URL url=new URL(strUrl);/*建立URL的连接*/
    HttpURLConnection con = (HttpURLConnection)url.openConnection();/*得到URL返回的数据流,实例化数据流对象*/
    DataInputStream in = new DataInputStream(new BufferedInputStream(con.getInputStream()));/*将数据流转换为输入的数据流 ?不太懂*/
    InputStreamReader isr=new InputStreamReader(in);/*将数据流存入缓存*/
    BufferedReader bs=new BufferedReader(isr);/*创建字符串缓存*/
    StringBuffer strBf=new StringBuffer();/*当数据流缓存准备好后,相当于AJAX的状态4和200*/
    while(bs.ready()){/*数据流缓存按照行的单位添加到字符串缓存*/
            strBf.append(bs.readLine());/*函数返回字符串*/
    return strBf.toString();/*错误处理*/
    }catch(Exception e){
     System.out.println("error:"+e);
     return "error:"+e;
     }
    没有理解错吧?在此请教,那么说JSP不需要XMLHttpRequest对象,直接用自己的HttpURLConnection 对象就可以实现访问其他网页的内容吗?太方便了!另外,JSP中使用session是不是这样使用?:     /*设定名称为Result的session的内容为 123*/
         session.setAttribute("Result","123");     /*将名称为Result的session的内容存入字符串变量 myResult */
         String myResult=(String)session.getAttribute("Result");还有,System.out.println 和 out.println 是一码事吧?感谢感谢!
      

  11.   

    又多了一个疑问,
    您的代码
        <%!
        public String CheckAJAX(String strUrl){
    中用了<%!(有感叹号) 。
    其他地方是和ASP一样的<%,没有感叹号。这有什么区别吗?
      

  12.   

    大部分都理解的对
    System.out.println 是在系统后台输出,在web服务器和日志文件里可以查到
    out.println        是在网页上写 奏是Response.Write
    <%! 是声明定义
      

  13.   

    谢谢kjah(黑丁) 的帮助!
    我再加30分吧。别嫌少了,这是自盘古开天辟地以来,我在CSDN给的最高分了。