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

我有一种情况,需要引入一个中间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内容

  334465683124 true  

但现在我希望使用servlet完成同样的事情,是否可能?

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

更新

我想出了点什么。

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

使用java.net.URLConnection或Apache 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(); // ... 

也可以看看:

  • 使用java.net.URLConnection来触发和处理HTTP请求
  • HttpClient教程和示例

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

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

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