1.大致流程:
a.前端触发事件
b.ajax传递到servlet
c.servlet获取请求值并写成请求包的形式传递给服务端
d.响应码为200的时候,读取数据并且写到浏览器上
e.jquery对报文进行解析,获取return标签中的响应值并输出
2.首先新建一个Servlet,代码如下:
package com.wayne.servlet;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class wayneServlet
* 跨域,使用HttpUrlConnection发送webservice请求
* 该servlet为客户端
*/
@WebServlet("/wayneServlet")
public class wayneServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public wayneServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name=request.getParameter("name");
System.out.println("doPost");
//请求报文,拼接name等参数
String data="<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:q0='http://ws.wayne.com/' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><soapenv:Body><q0:sayHello><arg0>"+name+"</arg0></q0:sayHello></soapenv:Body></soapenv:Envelope>";;
//声明Url对象,参数为服务端的地址
URL url=new URL("http://localhost:8080/day_six_ws_cxf_spring_web_ajax/gotham/gotham");
//原本应该是UrlConnection对象,因为遵循http协议所以要声明为HttpUrlConnection对象
HttpURLConnection connection=(HttpURLConnection) url.openConnection();
//请求方式
connection.setRequestMethod("POST");
//是否可以输出数据
connection.setDoOutput(true);
//是否可以接收服务器端的数据
connection.setDoInput(true);
//设置数据格式
connection.setRequestProperty("Content-Type", "text/xml;charset=utf-8");
//写数据
OutputStream os = connection.getOutputStream();
os.write(data.getBytes("utf-8"));
//获取响应码
int responseCode = connection.getResponseCode();
if(responseCode==200){
//读数据,xml格式的字符串
InputStream is = connection.getInputStream();
//获取读到的字节数
System.out.println("return"+is.available());
//设置响应格式
response.setContentType("text/text;charset=utf-8");
ServletOutputStream outputStream = response.getOutputStream();
byte[] buffer=new byte[1024];
int len=0;
if((len=is.read(buffer))>0){
//写到浏览器
outputStream.write(buffer, 0, len);
}
outputStream.flush();
}
}
}
3.在jsp页面创建按钮,并编写jquery触发事件,片段代码如下:
4.运行结果如下: