深入Ajax代理的Java Servlet的实现详解

 更新时间:2013年06月04日 11:53:51   作者:  
本篇文章是对Ajax代理的Java Servlet的实现方法进行了详细的分析介绍,需要的朋友参考下
代码如下所示:
复制代码 代码如下:

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;
 }
}

相关文章

  • Spring Boot开发RESTful接口与http协议状态表述

    Spring Boot开发RESTful接口与http协议状态表述

    这篇文章主要为大家介绍了Spring Boot开发RESTful接口与http协议状态表述,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • springcloud连接远程nacos失败显示localhost服务连接失败的问题解决

    springcloud连接远程nacos失败显示localhost服务连接失败的问题解决

    这篇文章主要介绍了springcloud连接远程nacos失败显示localhost服务连接失败的问题解决,文中有详细的代码示例供大家参考,对大家解决问题有一定的帮助,需要的朋友可以参考下
    2024-03-03
  • 详解HDFS多文件Join操作的实例

    详解HDFS多文件Join操作的实例

    这篇文章主要介绍了详解HDFS多文件Join操作的实例的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
    2017-10-10
  • MyBatis实现自定义MyBatis插件的流程详解

    MyBatis实现自定义MyBatis插件的流程详解

    MyBatis的一个重要的特点就是插件机制,使得MyBatis的具备较强的扩展性,我们可以根据MyBatis的插件机制实现自己的个性化业务需求,本文给大家介绍了MyBatis实现自定义MyBatis插件的流程,需要的朋友可以参考下
    2024-12-12
  • springboot Minio功能实现代码

    springboot Minio功能实现代码

    这篇文章主要介绍了springboot Minio功能实现,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • 利用feign调用返回object类型转换成实体

    利用feign调用返回object类型转换成实体

    这篇文章主要介绍了利用feign调用返回object类型转换成实体,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • spring cloud服务之间的调用之ribbon详解

    spring cloud服务之间的调用之ribbon详解

    关于spring-cloud的服务调用,我们首先需要了解它的两个核心组件Ribbon和Feign。接下来通过本文给大家详细介绍spring-cloud服务之间的调用之ribbon,感兴趣的朋友一起看看吧
    2021-08-08
  • 浅谈Springboot实现拦截器的两种方式

    浅谈Springboot实现拦截器的两种方式

    本文详细的介绍了Springboot拦截器的两种方式实现,一种就是用拦截器,一种就是过滤器,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 使用SpringBoot实现Redis多数据库缓存

    使用SpringBoot实现Redis多数据库缓存

    在我的系统中,为了优化用户行为数据的存储与访问效率,我引入了Redis缓存,并将数据分布在不同的Redis数据库中,通过这种方式,可以减少单一数据库的负载,提高系统的整体性能,所以本文给大家介绍了使用SpringBoot实现Redis多数据库缓存,需要的朋友可以参考下
    2024-06-06
  • IDEA Debug模式下改变各类型变量值的方法

    IDEA Debug模式下改变各类型变量值的方法

    这篇文章主要介绍了IDEA Debug模式下改变各类型变量值的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04

最新评论