如何使用params调用URL并在servlet中获取响应?

时间:2012-05-02 09:06:45

标签: java servlets groovy

我的情况是需要引入一个中间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 将被处理。

2 个答案:

答案 0 :(得分:3)

使用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();
// ...

另见:

答案 1 :(得分:0)

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

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

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