【问题标题】:Is possible to call servlet from applet可以从applet调用servlet
【发布时间】:2013-10-11 07:16:24
【问题描述】:

我不熟悉java和applet,所以请任何人告诉我以下我的追求的可能性。

  1. 我想从 applet 调用 Servlet。这可能吗?

  2. 如果第一个是可能的,我们能否将 Servlet 输出(如 XML 数据或字符串)存储在 applet 变量中?

  3. 如果第二个是可能的,那么可以使用 JavaScript 或 J Query 获取该变量值吗?

如果可能,请给我一个简单的例子。

提前致谢。

【问题讨论】:

标签: java javascript servlets applet


【解决方案1】:
  1. 是的,你可以。 servlet 公开了一个 URL,您可以借助 URLConnection 类获得该 URL。
  2. 您也可以这样做,请参阅here,了解如何使用 URL 连接。
  3. 您也可以这样做,创建一个小程序以获取小程序字段,并查看here 以了解如何调用该方法。

但所有这些听起来都非常复杂。你为什么不告诉我们你想要达到的目标,也许有更简单的方法来做事。

【讨论】:

  • 我想根据 sevlet 输出来保护我的页面,这里我的页面由基本 HTML(无框架集或 iframe)和 Jquery 设计,无需修改用 java 编写的代码。
  • 如果我正确理解您的问题,您可以使用 servlet 过滤器来保护您想要的资源。该 servlet 过滤器将在 URLConnection 类的帮助下 POST 到 servlet。有关示例,请参见 oracle.com/technetwork/java/filters-137243.html。我认为您根本不需要小程序。
【解决方案2】:

一个:是的,你可以从applet调用servlet进行http调用

第 1 步:对您的 servlet 进行 http 调用

第 2 步:让您的 servlet 返回 XML 响应

第 3 步:解析 xml 响应

使用这个程序,您可以调用您的 servlet

package com.hussain;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URI;
import java.util.ArrayList;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;


public class callServlet {

    public static void main(String[] args) 
    {
        String servletResponse = callServlet.sendRequest("http://gdata.youtube.com/feeds/base/videos?max-results=10&start-//index=1&alt=json&orderby=published&author=astrobixweb");
        callServlet.parseFromXMLResponse(servletResponse);
    }
    public static String sendRequest(String url) {
        String result = "";
        try {
            HttpClient client = new DefaultHttpClient();
            HttpParams httpParameters = client.getParams();
            HttpConnectionParams.setConnectionTimeout(httpParameters, 5000);
            HttpConnectionParams.setSoTimeout(httpParameters, 5000);
            HttpConnectionParams.setTcpNoDelay(httpParameters, true);
            HttpGet request = new HttpGet();
            request.setURI(new URI(url));
            HttpResponse response = client.execute(request);
            InputStream ips = response.getEntity().getContent();
            BufferedReader buf = new BufferedReader(new InputStreamReader(ips,"UTF-8"));
            StringBuilder sb = new StringBuilder();
            String s;
            while (true) {
                s = buf.readLine();
                if (s == null || s.length() == 0)
                    break;
                sb.append(s);
            }
            buf.close();
            ips.close();
            result = sb.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
    public static void parseFromXMLResponse(String respo) 
    {
        // parse your XML response here
    }   
}

【讨论】:

    【解决方案3】:

    顺着你的问题展开,

    1. 您可以从您的小程序调用 servlet:

      • 构造url 将访问您的servlet。
      • 使用java.net.URLConnection 对象来保持与您的小程序的连接
        URLConnection con = urlToServlet.openConnection()
      • 'con.setDoOutput(true)' => 应用程序打算将数据写入 URL 连接。
      • 使用输入和输出流与 Servlet 进行通信。
        con.getInputStream()con.getOutputStream()

      [注意:不要忘记关闭所有连接和流]

    2. 现在,以您想要的任何形式使用您从 InputStream 获得的数据。

    3. 非常简单,使用以下代码:
      在小程序中:
      public String getYourString(){ return responseFromServlet;}
      在 Javascript 中:
      var jsResp = document.name_of_your_applet.getYourString();

    希望你已经得到了答案!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多