Java跨域访问Web服务的方法详解
跨域请求的基本概念
在Web开发中,跨域请求指的是浏览器从一个域(Domain)、协议(Protocol)或端口(Port)不同的源(Origin)加载资源,根据同源策略,浏览器默认不允许跨域请求,但在某些情况下,我们需要从不同的源访问Web服务,这就需要我们找到合适的解决方案。

Java中跨域访问Web服务的方法
以下是一些在Java中实现跨域访问Web服务的方法:
1 使用CORS(Cross-Origin Resource Sharing)
CORS是一种机制,它允许服务器告诉浏览器允许哪些源(Origin)访问其资源,以下是实现CORS的步骤:
- 设置响应头:在响应中添加
Access-Control-Allow-Origin头部,指定允许的源。 - 处理预检请求:对于一些特定的HTTP方法(如
OPTIONS),浏览器会先发送一个预检请求,服务器需要响应这个请求,并指定允许的方法和头部。
以下是一个简单的示例:

import javax.servlet.*;
import javax.servlet.http.*;
public class CORSFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Access-Control-Allow-Origin", "*");
httpResponse.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
httpResponse.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
if ("OPTIONS".equalsIgnoreCase(((HttpServletRequest) request).getMethod())) {
httpResponse.setStatus(HttpServletResponse.SC_OK);
return;
}
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
}
public void destroy() {
}
}
2 使用JSONP(JSON with Padding)
JSONP是一种利用<script>标签无跨域限制的特性来实现跨域请求的方法,以下是使用JSONP的步骤:
- 服务器端支持:服务器端需要返回一个JavaScript代码,该代码会执行一个回调函数,并将数据作为参数传递。
- 客户端调用:客户端在发起请求时,需要指定一个回调函数。
以下是一个简单的示例:
// 服务器端
public String jsonpResponse(String data, String callback) {
return callback + "(" + data + ");";
}
// 客户端
<script>
var callback = "handleResponse";
var data = "{'name':'John', 'age':30}";
window[callback](data);
</script>
3 使用代理服务器
另一种方法是使用代理服务器来转发请求,客户端向代理服务器发送请求,代理服务器再将请求转发到目标服务器,这样,客户端和服务器之间的通信就不再受同源策略的限制。

在Java中,跨域访问Web服务可以通过多种方法实现,CORS和JSONP是最常用的方法,而使用代理服务器则是一种更灵活的解决方案,根据实际需求,选择合适的方法可以有效地解决跨域请求的问题。


















