<servlet>
<servlet-name>PoxyServlet</servlet-name>
<servlet-class>
com.XXXX.common.servlet.ProxyHandler
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PoxyServlet</servlet-name>
<url-pattern>/servlet/PoxyServlet</url-pattern>
</servlet-mapping>
package com.XXXX.XXXX.servlet
import java.io.IOException
import java.io.InputStream
import java.io.InputStreamReader
import java.io.OutputStream
import java.net.HttpURLConnection
import java.net.Proxy
import java.net.URL
import java.net.URLDecoder
import javax.servlet.ServletException
import javax.servlet.http.HttpServlet
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import org.apache.log4j.Logger
import org.dom4j.Document
import org.dom4j.DocumentException
import org.dom4j.io.OutputFormat
import org.dom4j.io.SAXReader
import org.dom4j.io.XMLWriter
public class ProxyHandler extends HttpServlet {
private static final long serialVersionUID = 8366942161007559486L
private static final int BUFFER_SIZE = 8192
private static Logger _log = Logger.getLogger(ProxyHandler.class)
private Proxy proxy = null
@Override
public void init() throws ServletException {
super.init()
}
@SuppressWarnings("deprecation")
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String urlString = request.getQueryString()
// Add by
urlString = URLDecoder.decode(urlString, "UTF-8")
_log.info("proxy handler get request query full url : " + urlString)
if (_log.isDebugEnabled()) {
_log.debug("proxy handler get request query full url : "
+ urlString)
}
if (urlString.startsWith("url=")) {
urlString = urlString.substring(4)
}
if (urlString.indexOf("requestTime") != -1) {
urlString = urlString.split("requestTime")[0]
urlString = urlString.substring(0, urlString.length() - 1)
}
_log.info("proxy handler get request query url : " + urlString)
if (_log.isDebugEnabled()) {
_log.debug("proxy handler get request query url : " + urlString)
}
if (urlString.indexOf("?") != -1) {
urlString = urlString + "&charset=utf-8"
} else {
urlString = urlString + "?charset=utf-8"
}
HttpURLConnection conn = null
InputStream in = null
OutputStream out = null
try {
URL httpURL = new URL(urlString)
if (httpURL.getProtocol().equalsIgnoreCase("HTTP")
|| httpURL.getProtocol().equalsIgnoreCase("HTTPS")) {
if (proxy != null) {
conn = (HttpURLConnection) httpURL.openConnection(proxy)
} else {
conn = (HttpURLConnection) httpURL.openConnection()
}
conn.setRequestMethod("GET")
conn.setDoOutput(false)
conn.setDoInput(true)
conn.setUseCaches(false)
in = conn.getInputStream()
response.setContentType("text/xml; charset=UTF-8")
out = response.getOutputStream()
byte[] buffer = new byte[BUFFER_SIZE]
int num = in.read(buffer, 0, BUFFER_SIZE)
while (num != -1) {
_log.info("proxy handler get request output : "
+ buffer.toString())
if (_log.isDebugEnabled()) {
_log.debug("proxy handler get request output : "
+ buffer.toString())
}
out.write(buffer, 0, num)
num = in.read(buffer, 0, BUFFER_SIZE)
}
out.flush()
}
} catch (IOException e) {
response.setStatus(500, e.getLocalizedMessage())
e.printStackTrace()
} finally {
if (in != null) {
in.close()
in = null
}
if (conn != null) {
conn.disconnect()
conn = null
}
if (out != null) {
out.close()
out = null
}
}
}
@SuppressWarnings("deprecation")
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
Document inputDocument = null
try {
SAXReader builder = new SAXReader()
inputDocument = builder.read(new InputStreamReader(request
.getInputStream(), "UTF-8"))
_log.info("proxy handler post request input document : "
+ inputDocument.asXML())
if (_log.isDebugEnabled()) {
_log.debug("proxy handler post request input document : "
+ inputDocument.asXML())
}
} catch (IOException e) {
response.setStatus(500, e.getLocalizedMessage())
e.printStackTrace()
} catch (DocumentException e) {
response.setStatus(500, e.getLocalizedMessage())
e.printStackTrace()
}
String urlString = new String(request.getQueryString().getBytes(
"ISO-8859-1"), "GBK")
_log.info("proxy handler post request query full url : " + urlString)
if (_log.isDebugEnabled()) {
_log.debug("proxy handler post request query full url : "
+ urlString)
}
if (urlString.startsWith("url=")) {
urlString = urlString.substring(4)
}
if (urlString.indexOf("requestTime") != -1) {
urlString = urlString.split("requestTime")[0]
urlString = urlString.substring(0, urlString.length() - 1)
}
_log.info("proxy handler post request query url : " + urlString)
if (_log.isDebugEnabled()) {
_log.debug("proxy handler post request query url : " + urlString)
}
HttpURLConnection conn = null
InputStream in = null
OutputStream out = null
try {
URL httpURL = new URL(urlString)
if (httpURL.getProtocol().equalsIgnoreCase("HTTP")
|| httpURL.getProtocol().equalsIgnoreCase("HTTPS")) {
if (proxy != null) {
conn = (HttpURLConnection) httpURL.openConnection(proxy)
} else {
conn = (HttpURLConnection) httpURL.openConnection()
}
conn.setRequestMethod("POST")
// added by
conn.setRequestProperty("Content-Type", "application/xml")
conn.setDoOutput(true)
conn.setDoInput(true)
conn.setUseCaches(false)
OutputStream output = conn.getOutputStream()
OutputFormat format = OutputFormat.createCompactFormat()
format.setEncoding("UTF-8")
XMLWriter writer = new XMLWriter(output, format)
writer.write(inputDocument)
output.flush()
output.close()
output = null
in = conn.getInputStream()
response.setContentType("text/xml; charset=UTF-8")
out = response.getOutputStream()
byte[] buffer = new byte[BUFFER_SIZE]
int num = in.read(buffer, 0, BUFFER_SIZE)
while (num != -1) {
if (_log.isDebugEnabled()) {
_log.debug("proxy handler post request output : "
+ buffer.toString())
}
out.write(buffer, 0, num)
num = in.read(buffer, 0, BUFFER_SIZE)
}
out.flush()
}
} catch (IOException e) {
response.setStatus(500, e.getLocalizedMessage())
e.printStackTrace()
} finally {
if (in != null) {
in.close()
in = null
}
if (conn != null) {
conn.disconnect()
conn = null
}
if (out != null) {
out.close()
out = null
}
}
}
}