|
|
package com.engine.web.zhsl;
|
|
|
|
|
|
import com.engine.tjbankSocket.SocketExecute;
|
|
|
import com.engine.tjbankSocket.impl.CWGLSocketExecute;
|
|
|
import com.engine.tjbankSocket.impl.GetToCountSocketExecute;
|
|
|
import com.engine.util.XMLUtils;
|
|
|
import org.apache.commons.lang.StringEscapeUtils;
|
|
|
import weaver.general.BaseBean;
|
|
|
import weaver.general.StringUtil;
|
|
|
|
|
|
import javax.servlet.ServletContext;
|
|
|
import javax.servlet.ServletContextEvent;
|
|
|
import javax.servlet.ServletContextListener;
|
|
|
import java.io.*;
|
|
|
import java.net.ServerSocket;
|
|
|
import java.net.Socket;
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
import java.util.Map;
|
|
|
|
|
|
public class Tjbk_SL_ServerSocket implements ServletContextListener {
|
|
|
private SocketThread_sl socketThread;
|
|
|
|
|
|
@Override
|
|
|
public void contextDestroyed(ServletContextEvent arg0) {
|
|
|
// TODO Auto-generated method stub
|
|
|
if (socketThread != null && socketThread.isInterrupted()) {
|
|
|
socketThread.closeServerSocket();
|
|
|
socketThread.interrupt();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void contextInitialized(ServletContextEvent arg0) {
|
|
|
// TODO Auto-generated method stub
|
|
|
new BaseBean().writeLog("Tjbk_SL_ServerSocket——contextInitialized启动");
|
|
|
ServletContext servletContext = arg0.getServletContext();
|
|
|
if (socketThread == null) {
|
|
|
socketThread = new SocketThread_sl(null, servletContext);
|
|
|
socketThread.start(); // servlet上下文初始化时启动socket服务端线程
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
class SocketThread_sl extends Thread {
|
|
|
|
|
|
private ServletContext servletContext;
|
|
|
private ServerSocket serverSocket;
|
|
|
|
|
|
public SocketThread_sl(ServerSocket serverSocket, ServletContext servletContext) {
|
|
|
this.servletContext = servletContext;
|
|
|
// 从web.xml中context-param节点获取socket端口
|
|
|
String port = this.servletContext.getInitParameter("socketPortSL");
|
|
|
new BaseBean().writeLog("socketPortSL端口"+port);
|
|
|
if (serverSocket == null) {
|
|
|
try {
|
|
|
this.serverSocket = new ServerSocket(Integer.parseInt(port));
|
|
|
} catch (IOException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void run() {
|
|
|
|
|
|
while (!this.isInterrupted()) { // 线程未中断执行循环
|
|
|
try {
|
|
|
new BaseBean().writeLog("SocketThread线程启动");
|
|
|
Socket socket = serverSocket.accept();
|
|
|
if (socket != null) {
|
|
|
new ProcessSocketData_sl(socket, this.servletContext).start();
|
|
|
}
|
|
|
} catch (IOException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void closeServerSocket() {
|
|
|
try {
|
|
|
if (serverSocket != null && !serverSocket.isClosed()) {
|
|
|
serverSocket.close();
|
|
|
}
|
|
|
} catch (IOException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
class ProcessSocketData_sl extends Thread {
|
|
|
|
|
|
private Socket socket;
|
|
|
private ServletContext servletContext;
|
|
|
|
|
|
public ProcessSocketData_sl() {
|
|
|
super();
|
|
|
}
|
|
|
|
|
|
public ProcessSocketData_sl(Socket socket, ServletContext servletContext) {
|
|
|
this.socket = socket;
|
|
|
this.servletContext = servletContext;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void run() {
|
|
|
try {
|
|
|
// BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
|
|
|
new BaseBean().writeLog("ServerSocket线程启动");
|
|
|
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8);
|
|
|
|
|
|
PrintWriter pw = new PrintWriter(outputStreamWriter);
|
|
|
InputStream inputStream = socket.getInputStream();
|
|
|
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
|
|
|
char[] datalen=new char[8];//报文前八位为报文体总长度
|
|
|
|
|
|
in.read(datalen,0,8);
|
|
|
String lendata=new String (datalen);
|
|
|
int length=Integer.parseInt(lendata);
|
|
|
new BaseBean().writeLog("报文长度"+length);
|
|
|
// byte[] data=new byte[length];
|
|
|
char[] data=new char[length];
|
|
|
int datalength = in.read(data,0,length);
|
|
|
String requestData = new String(data);
|
|
|
new BaseBean().writeLog("requestData",requestData);
|
|
|
String s = "";
|
|
|
if (!StringUtil.isEmpty(requestData.toString())) {
|
|
|
new BaseBean().writeLog("requestData",requestData);
|
|
|
s = execute(requestData.toString());
|
|
|
}
|
|
|
// 执行自定义的请求解析方法,生成响应response
|
|
|
pw.println(s);
|
|
|
pw.flush(); // 刷新缓冲区
|
|
|
pw.close();
|
|
|
socket.close();
|
|
|
// System.out.println(sb);
|
|
|
} catch (IOException e) {
|
|
|
e.printStackTrace();
|
|
|
System.out.println(e);
|
|
|
}
|
|
|
}
|
|
|
private String execute(String XMLparam){
|
|
|
new BaseBean().writeLog(this.getClass().getName()+":XMLparam=="+XMLparam);
|
|
|
|
|
|
Map<String, String> paramMap = XMLUtils.parseXMLToMap(XMLparam);
|
|
|
new BaseBean().writeLog(this.getClass().getName()+":paramMap=="+paramMap);
|
|
|
StringEscapeUtils.unescapeXml(XMLparam);
|
|
|
//目标系统代码
|
|
|
String system_id = paramMap.get("system_id");
|
|
|
// 请求方系统代码
|
|
|
String requester_id = paramMap.get("requester_id");
|
|
|
// 请求方机构代号
|
|
|
String branch_id = paramMap.get("branch_id");
|
|
|
new BaseBean().writeLog(this.getClass().getName()+":requester_id=="+requester_id);
|
|
|
SocketExecute socketExecute = null;
|
|
|
if ("0157".equals(requester_id)){
|
|
|
socketExecute = new GetToCountSocketExecute();
|
|
|
new BaseBean().writeLog(this.getClass().getName()+":GetToCountSocketExecute");
|
|
|
}else if("0170".equals(requester_id)){
|
|
|
socketExecute = new CWGLSocketExecute();
|
|
|
new BaseBean().writeLog(this.getClass().getName()+":CWGLSocketExecute");
|
|
|
}
|
|
|
String execute = socketExecute.execute(XMLparam);
|
|
|
return execute;
|
|
|
}
|
|
|
}
|