在项目过程过程中遇到,客户端使用指定的链接地址访问服务器,服务器接收到访问后,给这个客户端发送一些数据,然后客户端接收到这些数据,对这些数据进行处理。比如采用如下链接访问Tomcat中的Servlet:
http://localhost:8080/TestAppPro/TestHelloWorldTestHelloWorld的Servlet的doPost方法接收访问,然后在request.setParameter("param",value);怎样实现,在客户端(不一定是浏览器、可以通过URLConnection)请求
http://localhost:8080/TestAppPro/TestHelloWorld
链接后,能够获得value这个值?郁闷了以下午。求解。。

解决方案 »

  1.   

    仿照AJAX的做法,讓回傳的內容是一個JSON字串,客戶端解JSON就行了。
    (XML也可以)
      

  2.   

    json的例子
    <script type="text/javascript">
    function ff(){
     var j={"name":"Michael","address":
           [{"city":"Beijing","street":" Chaoyang Road ","postcode":100025},{"city":"shanghai","street":"jingke road","postcode":100026}]
       }; 
       document.write(j.name); 
       document.write(j.address[0].city); 
       document.write(j.address[0].street); 
       document.write(j.address[0].postcode); 
      
       document.write(j.address[1].city); 
       document.write(j.address[1].street); 
       document.write(j.address[1].postcode);  var aa1 = eval("[{'id':'1','name':'长沙'}, {'id':'2','name':'株洲'}, {'id':'3','name':'湘潭'}]");
    var aa = [{'id':'1','name':'长沙'}, {'id':'2','name':'株洲'}, {'id':'3','name':'湘潭'}]
    for(var i=0;i<aa.length;i++){
    document.write(aa[i].id);
    document.write(aa[i].name);
    }

    var bb = [{'id':'0','name':'aa','province':{'id':'0','name':'p1'}}, {'id':'1','name':'bb','province':{'id':'0','name':'p1'}}];
    document.write(bb[0].province.id);
    document.write(bb[0].province.name);

    }
    </script>
      

  3.   

    用流进行传送吧
    //XMLHttpReq.send(sXML);向服务器端提交数据后,服务器端读取数据方法(一)string title = string.Empty;
    string content = string.Empty;
    string classid = string.Empty;
    string toGrade = string.Empty;
    string breviaryPic = string.Empty;Request.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
    XmlDocument xmldoc = new XmlDocument(); //建立xml文档对象
    xmldoc.Load(Request.InputStream); //接受ajax发送的xml文档对象流 //也可以接受普通字符流XmlNode nodeTitle = xmldoc.SelectSingleNode("//title"); //获得title节点
    title = nodeTitle.InnerText; //取得节点值
    XmlNode nodetoGrade = xmldoc.SelectSingleNode("//ToGrade");
    toGrade = nodetoGrade.InnerText;
    XmlNode nodeclassid = xmldoc.SelectSingleNode("//classID");
    classid = nodeclassid.InnerText;breviaryPic = xmldoc.SelectSingleNode("//BreviaryPic").InnerText;
    content = xmldoc.SelectSingleNode("//content").InnerText;//XMLHttpReq.send(sXML);向服务器端提交数据后,服务器端读取数据方法(二)下面介绍一下XML格式的数据提交到服务器端之后,如何解析的?对应的服务器端Servlet程序代码如下:package classmate;
    import java.io.BufferedReader;
    import org.w3c.dom.Document;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;public class LoginXmlAction extends HttpServlet {
    public void init(ServletConfig config) throws ServletException {


    /*
    * 处理<POST>请求方法
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //设置接收信息的字符集
    request.setCharacterEncoding("UTF-8"); StringBuffer bxml = new StringBuffer();
    String line = null;
    try {
    BufferedReader reader = request.getReader();
    while((line = reader.readLine()) != null) {
    bxml.append(line);
    }
    }
    catch(Exception e) {
    System.out.println(e.toString());
    } String xml =bxml.toString();
    Document xmlDoc = null;
    try {
    xmlDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(xml.getBytes()));
    }catch(ParserConfigurationException e) {
    System.out.println(e);
    }
     

    String uname = xmlDoc.getElementsByTagName("name").item(0).getFirstChild().getNodeValue();
    String psw = xmlDoc.getElementsByTagName("psw").item(0).getFirstChild().getNodeValue();
    String responseText;
    //依据验证结果输出不同的数据信息
    if(uname.equals("jenny") && psw.equals("hi")){
    responseText = "热烈的欢迎您!" ;
    }else{
    responseText = "对不起,登录失败!";
    }

    //设置输出信息的格式及字符集
    response.setContentType("text/xml; charset=UTF-8");
    response.setHeader("Cache-Control", "no-cache");
    response.getWriter().print(responseText);
    }
     注意在Java程序中,为了实现对XML格式数据的解析,需要首先导入与其相关的类所在的包。然后借助DocumentBuilderFactory提供的相关方法进行解析。
    首先,我们需要建立一个解析器工厂,利用这个工厂来获得一个具体的解析器对象:
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    当获得一个工厂对象后,使用它的静态方法newDocumentBuilder()方法可以获得一个DocumentBuilder对象,这个对象代表了具体的DOM解析器。
    然后,我们就可以利用这个解析器来对XML文档进行解析了:
    Document doc = db.parse("c:/xml/message.xml");
    DocumentBuilder的parse()方法接受一个XML文档名作为输入参数,返回一个Document对象,这个Document对象就代表了一个XML文档的树模型。
    以后所有的对XML文档的操作,都与解析器无关,直接在这个Document对象上进行操作就可以了。而具体对 Document操作的方法,就是由DOM所定义的。
    从上面得到的Document对象开始,就可以开始按照DOM的方式进行解析。使用Document对象的 getElementsByTagName()方法,可以得到一个NodeList对象,
    一个Node对象代表一个XML文档中一个标签元素,而 NodeList对象,它所代表的是一个Node对象的列表。然后,可以使用NodeList对象的item()方法来得到列表中每一个Node对象。
    当一个Node对象被建立之后,保存在XML文档中的数据就被提取出来并封装在这个Node中。然后再使用getFirstChild()方法来获得对应标记下面的第一个子Node对象。
    依此类推就可以获取到对应的数据,开始使用了。