首页 » ajax » ajax跨域请求Java实现解决方案

ajax跨域请求Java实现解决方案

 

一.需求分析:

由于业务需求,需要跨域调用一个Servlet服务并返回相应的业务处理结果,然后在对业务处理结果进行解析。

二.演示环境:

1.Tomcat 6.0

2.JDK1.8.0_111

3.Java+Jquery+Maven+Servlet2.5

三.解决方案:

JSP

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
    <script type="text/javascript">
        /* 说明:
         * 1.我这里将url传参和data传参两种方式写在了一起,可以根据实际业务情况进行改写。
         * 2.回调函数jsonpCallback和success两种返回也卸载了一起,
         *   同样可以根据实际业务情况进行改写。 */
        function goServlet(){
        // 这里url_web改成你要调用的跨域地址,我这里就调用了当前项目的服务。
        var url_web="http://localhost:8080/ajaxJavaDemo/crossDomainServlet"
+"?param1=hello&jsonpCallback=?";
        var dataAttr={
            "param2":"world",
        };
        $.ajax({
            type:"get",
            dataType:"jsonp",
            url:url_web,
            data:dataAttr,
            jsonpCallback:"returnFun",
            success:function(data){
                alert("success-》这里可以根据需要进行业务处理"+data.key);
            },
            error:function(data){
                alert('error');
            },
        });
       }
        function returnFun(data){
            alert("returnFun-》这里可以根据需要进行业务处理"+data.key);
        }
    </script>
  </head>
  <body>
        <input type="button" value="Servlet调用" onclick="goServlet();"/>
  </body>
</html>

Java

package cn.xiangquba.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class crossDomainServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public crossDomainServlet() {
    	
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
    // 定义一个要回显的字符串
    String str="xiangquba.cn";
    String str_hello=request.getParameter("param1");
    String str_world=request.getParameter("param2");
    // jsonpCallback为url_web的参数地址
    String callback=request.getParameter("jsonpCallback"); 
    // 回显成JSON格式
    response.getWriter().write(callback+
    "({'key':'"+str_hello+str_world+" "+str+"'})");
}
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <display-name>ajaxJavaDemo</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>crossDomainServlet</display-name>
    <servlet-name>crossDomainServlet</servlet-name>
    <servlet-class>cn.xiangquba.servlet.crossDomainServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>crossDomainServlet</servlet-name>
    <url-pattern>/crossDomainServlet</url-pattern>
  </servlet-mapping>
</web-app>

四.要点解析

首先,这个技术点并不难,但是需要注意的几个地方:

1.JSP侧ajax的type类型必须是get;

2.dataType类型是jsonp,关于jsonp可以自己搜索一下,网络上已经有很多关于这个类型的解析例子;

3.传参可以采用URL传参和ajax的data进行传参;

4.回显的结果可以用ajax回调函数jsonpCallback或者success来进行处理结果的回显;

5.Java侧回显采用JSON格式进行回显,具体可以参照我上面的案例。

五.Demo下载

链接:http://pan.baidu.com/s/1hseNTSo 密码:we0p

六.总结

跨域请求其实有多种解决方案,这里只提供了一个比较常用的解决方案,希望本文的抛砖引玉能解决您工作中遇到的难题。

原文链接:ajax跨域请求Java实现解决方案,转载请注明来源!

0