【问题标题】:How to call a URL with params and get back response in servlet?如何使用参数调用 URL 并在 servlet 中获取响应?
【发布时间】:2012-05-02 09:06:45
【问题描述】:

我有一种情况,需要引入一个中间 servlet,它将处理来自现有项目的请求,并将操纵的响应重定向到现有项目或新项目。此 servlet 将充当从其他应用程序登录到新项目的接口

所以目前我使用以下代码在 jsp 中以 xml 形式获取响应。

var jqxhr =$.post("http://abhishek:15070/abc/login.action",
                  { emailaddress:   "ars@gmail.com",
                    projectid:      "123" },
                      function(xml)
                      {
                            if($(xml).find('isSuccess').text()=="true")
                            {
                                sessiontoken=$(xml).find('sessiontoken').text();

                                setCookie("abcsessionid", sessiontoken , 1);
                                setCookie("abcusername",e_add,1);
                            }
                      }
                )
                .error(function() {
                    if(jqxhr.responseText == 'INVALID_SESSION') {
                        alert("Your Session has been timed out");
                        window.location.replace("http://abhishek:15070/abc/index.html"); 
                    }else  {
                        alert( jqxhr.responseText);
                    }
                 });

xml 内容

<Response>
  <sessiontoken>334465683124</sessiontoken>
  <isSuccess>true</isSuccess>
</Response>

但是现在我想用 servlet 来做同样的事情,这可能吗?

String emailid=(String) request.getParameter("emailaddress");
String projectid=(String) request.getParameter("projectid");

更新

我刚刚想到了一些东西。

是否可以返回一个带有表单的html页面(来自servlet),其on body load将提交一个表单,并在提交此表单时收到响应xml将得到已处理。

【问题讨论】:

  • 如果我理解你的问题,你想通过servlet调用另一个URL吗?您可以使用Apache HttpClient 或仅使用URLConnection
  • @Moritz Petersen:是的,类似的,请看我的更新
  • 现在我很困惑。这是 Java (Servlet) 还是 jQuery 相关的问题?
  • @Moritz:这是一个 java 和 servlet 问题,我使用了 jquery,所以我包含了标签。我会删除它:)
  • 所以你想让 servlet 显示一个 html 页面,该页面包含一个表单并具有将提交表单的正文 onload 函数,然后同一个 servlet 将收到来自表单提交的响应?显示一个在加载时只会提交自身的 html 页面有什么意义吗?

标签: java servlets groovy


【解决方案1】:

使用java.net.URLConnectionApache HttpComponents Client。然后,使用JAXB 之类的 XML 工具解析返回的 HTTP 响应。

启动示例:

String emailaddress = request.getParameter("emailaddress");
String projectid = request.getParameter("projectid");
String charset = "UTF-8";
String query = String.format("emailaddress=%s&projectid=%s", 
    URLEncoder.encode(emailaddress, charset),
    URLEncoder.encode(projectid, charset));

URLConnection connection = new URL("http://abhishek:15070/abc/login.action").openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Accept-Charset", charset);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + charset);
try {
    connection.getOutputStream().write(query.getBytes(charset));
}
finally {
    connection.getOutputStream().close();
}
InputStream response = connection.getInputStream();
// ...

另见:

【讨论】:

  • 谢谢,我会试试你的代码,我也在使用 Groovy,所以我可以使用 XmlParser 解析 xml
  • 感谢您的代码。有效。另外,如果你可以请看看另一个question here
【解决方案2】:

实际上,您可能想要的根本不是中间 servlet。您可能想要的是一个 servlet 过滤器,而编写一个过滤器并不是特别难。我以前写过一篇,昨天刚开始写一篇。

this onethis one 这样的文章非常简单地阐述了如何使用 servlet 过滤器拦截对特定 URL 的调用,然后从那里重定向或拒绝。如果传入的 URL 与过滤器的模式匹配,它将获得请求和响应的机会,然后它可以选择是否将其传递给行中的下一个过滤器。

我不知道是否所有的第三方安全解决方案都这样,但至少 CAS 似乎是这样实现的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 2016-04-27
    相关资源
    最近更新 更多