深入Ajax代理的Java Servlet的實(shí)現(xiàn)詳解
更新時(shí)間:2013年06月04日 11:53:51 作者:
本篇文章是對Ajax代理的Java Servlet的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
代碼如下所示:
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Take any request and proxy it to the given REDIRECT_BASE.
* For example, if this servlet lives at
*
* http://foo.com/forward
*
* and is inititialized with the REDIRECT_BASE
*
* http://bar.com/some/path
*
* then a GET request like
*
* http://foo.com/forward?quux=mumbley
*
* will return the results of a GET from
*
* http://bar.com/some/path?quux=mumbley
*
* This is not robust and generalized; it's simple and quick.
*
* @author jdf
*
*/
public class ProxyServlet extends HttpServlet
{
private final static String COPYRIGHT = com.ibm.dogear.Copyright.SHORT;
public static final String REDIRECT_BASE = "com.ibm.bl.servlet.RedirectServlet.redirect_base";
private String redirectBase;
@Override
public void init(ServletConfig config) throws ServletException
{
super.init(config);
redirectBase = getRequiredParam(REDIRECT_BASE);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException
{
String queryString = req.getQueryString();
URL url = new URL(redirectBase + (queryString != null ? "?" + queryString : ""));
copyInputStreamToOutputStream(url.openStream(), resp.getOutputStream());
}
private void copyInputStreamToOutputStream(InputStream in, ServletOutputStream out)
throws IOException
{
try
{
try
{
byte[] buffer = new byte[1024];
int n;
while ((n = in.read(buffer)) != -1)
out.write(buffer, 0, n);
}
finally
{
out.close();
}
}
finally
{
in.close();
}
}
protected String getRequiredParam(String param) throws ServletException
{
String result = getServletConfig().getInitParameter(param);
if (result == null) {
throw new ServletException(getClass() + " requires " + param + " param");
}
return result;
}
}
復(fù)制代碼 代碼如下:
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Take any request and proxy it to the given REDIRECT_BASE.
* For example, if this servlet lives at
*
* http://foo.com/forward
*
* and is inititialized with the REDIRECT_BASE
*
* http://bar.com/some/path
*
* then a GET request like
*
* http://foo.com/forward?quux=mumbley
*
* will return the results of a GET from
*
* http://bar.com/some/path?quux=mumbley
*
* This is not robust and generalized; it's simple and quick.
*
* @author jdf
*
*/
public class ProxyServlet extends HttpServlet
{
private final static String COPYRIGHT = com.ibm.dogear.Copyright.SHORT;
public static final String REDIRECT_BASE = "com.ibm.bl.servlet.RedirectServlet.redirect_base";
private String redirectBase;
@Override
public void init(ServletConfig config) throws ServletException
{
super.init(config);
redirectBase = getRequiredParam(REDIRECT_BASE);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException
{
String queryString = req.getQueryString();
URL url = new URL(redirectBase + (queryString != null ? "?" + queryString : ""));
copyInputStreamToOutputStream(url.openStream(), resp.getOutputStream());
}
private void copyInputStreamToOutputStream(InputStream in, ServletOutputStream out)
throws IOException
{
try
{
try
{
byte[] buffer = new byte[1024];
int n;
while ((n = in.read(buffer)) != -1)
out.write(buffer, 0, n);
}
finally
{
out.close();
}
}
finally
{
in.close();
}
}
protected String getRequiredParam(String param) throws ServletException
{
String result = getServletConfig().getInitParameter(param);
if (result == null) {
throw new ServletException(getClass() + " requires " + param + " param");
}
return result;
}
}
您可能感興趣的文章:
- jQuery+datatables插件實(shí)現(xiàn)ajax加載數(shù)據(jù)與增刪改查功能示例
- MVC+jQuery.Ajax異步實(shí)現(xiàn)增刪改查和分頁
- jQuery的Ajax接收java返回?cái)?shù)據(jù)方法
- ajax提交到j(luò)ava后臺之后處理數(shù)據(jù)的實(shí)現(xiàn)
- ajax java 實(shí)現(xiàn)自動(dòng)完成功能
- AJAX+JAVA用戶登陸注冊驗(yàn)證的實(shí)現(xiàn)代碼
- 詳解Java Ajax jsonp 跨域請求
- Java使用Ajax實(shí)現(xiàn)跨域上傳圖片功能
- Javaweb使用cors完成跨域ajax數(shù)據(jù)交互
- 在Java的Struts中判斷是否調(diào)用AJAX及用攔截器對其優(yōu)化
- AJAX實(shí)現(xiàn)數(shù)據(jù)的增刪改查操作詳解【java后臺】
相關(guān)文章
SpringBoot將項(xiàng)目打成war包步驟解析
這篇文章主要介紹了SpringBoot將項(xiàng)目打成war包步驟解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03在Java中使用redisTemplate操作緩存的方法示例
這篇文章主要介紹了在Java中使用redisTemplate操作緩存的方法示例,在Redis中可以存儲String、List、Set、Hash、Zset。感興趣的可以了解一下2019-01-01Oracle + Mybatis實(shí)現(xiàn)批量插入、更新和刪除示例代碼
利用MyBatis動(dòng)態(tài)SQL的特性,我們可以做一些批量的操作,下面這篇文章主要給大家介紹了關(guān)于Oracle + Mybatis實(shí)現(xiàn)批量插入、更新和刪除的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2018-01-01SpringMVC中的SimpleUrlHandlerMapping用法詳解
這篇文章主要介紹了SpringMVC中的SimpleUrlHandlerMapping用法詳解,SimpleUrlHandlerMapping是Spring MVC中適用性最強(qiáng)的Handler Mapping類,允許明確指定URL模式和Handler的映射關(guān)系,有兩種方式聲明SimpleUrlHandlerMapping,需要的朋友可以參考下2023-10-10Java8加java10等于Java18的版本查看及特性詳解
這篇文章主要為大家介紹了Java?8加java10等于Java18的各個(gè)版本要點(diǎn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06解決nacos項(xiàng)目啟動(dòng)報(bào)錯(cuò):Connection refused: no further&
這篇文章主要介紹了解決nacos項(xiàng)目啟動(dòng)報(bào)錯(cuò):Connection refused: no further informa問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04java構(gòu)造器 默認(rèn)構(gòu)造方法及參數(shù)化構(gòu)造方法
構(gòu)造器也叫構(gòu)造方法、構(gòu)造函數(shù),是一種特殊類型的方法,負(fù)責(zé)類中成員變量(域)的初始化。構(gòu)造器的用處是在創(chuàng)建對象時(shí)執(zhí)行初始化,當(dāng)創(chuàng)建一個(gè)對象時(shí),系統(tǒng)會為這個(gè)對象的實(shí)例進(jìn)行默認(rèn)的初始化,下面文章將進(jìn)入講解,需要的朋友可以參考下2021-10-10