`

应用中访问远程http服务器的资源实现方式

 
阅读更多

在本地应用中访问http的远程服务器上的静态资源时,会遇到一个问题,就是远程页面中的静态资源的引用路径是相对的,这样请求的路径会自动加上本地应用的路径前缀,而不是http服务器的url前缀。

 

解决方法:

 

使用Spring的filter拦截对于远程资源的请求,这个请求路径可以任意指定,但最后是请求资源在远程服务器上的相对路径,为了便于filter拦截这样的远程请求路径,可以指定匹配http打头的url,比如filter在web.xml中可以这样配置:

 

<filter>
        <filter-name>httpResourcesFilter</filter-name>
        <filter-class>com.focoon.web.filter.HttpResourcesFilter</filter-class>
    </filter>
     <filter-mapping>
        <filter-name>httpResourcesFilter</filter-name>
        <url-pattern>/http/*</url-pattern>
    </filter-mapping>

 

java代码中可以对路径进行重新处理,并使用httpClient来访问远程的静态资源并在response中输出字节数组。

 

package com.focoon.web.filter;

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.springframework.web.filter.OncePerRequestFilter;

public class HttpResourcesFilter extends OncePerRequestFilter{

	@Override
	protected void doFilterInternal(HttpServletRequest request,
			HttpServletResponse response, FilterChain filterChain)
			throws ServletException, IOException {
		System.out.println("----------------------------拦截到了远程请求资源路径---------------------------------");
		String url = request.getRequestURI();
		String prefixRemoteUrl = "http://xxx.xxx.xxx.xxx/sns/unzip/";
		String relativeRemoteUrl = url.substring(url.indexOf("http/")+5);
		String remoteUrl = prefixRemoteUrl + relativeRemoteUrl;
		
		HttpClient httpClient = new HttpClient();
		GetMethod getMethod = new GetMethod(remoteUrl);
		int statusCode = httpClient.executeMethod(getMethod);
        if (statusCode != HttpStatus.SC_OK) {
            System.err.println("Method failed: "
                    + getMethod.getStatusLine());
        }
        // 读取内容
        byte[] responseBody = getMethod.getResponseBody();
//        response.setHeader("Content-type","text/html;charset=UTF-8"); //指定消息头以UTF-8码表读数据 
        response.getOutputStream().write(responseBody);
	}
}

 

最后是页面上的调用:

<body>
	<iframe width="560px" height="620px" src="${ctx}/http/20150129190250/父母/index.html"></iframe>
</body>

 

分享到:
评论

相关推荐

    JAVA下载远程Linux服务器的文件

    jcifs-1.3.14.jar是jcifs库的一个版本,它提供了Java SMB API,使得开发人员能够在Java程序中实现SMB协议的功能。这个库包含了一系列的类和接口,如NtlmAuthenticator用于NT LAN Manager身份验证,SmbFile用于表示...

    VC/MFC实现简单的Http服务器(可访问图片和网站内页)

    在本文中,我们将深入探讨如何使用Visual C++和MFC(Microsoft Foundation Classes)来构建一个简单的HTTP服务器,这个服务器能够处理图片请求以及网站内部页面的访问。MFC是微软为Windows平台开发应用程序提供的...

    java实现简单远程监控

    在Java中实现远程监控可以利用Java的多种内置特性,如JMX(Java Management Extensions)、RMI(Remote Method Invocation)以及网络编程API。下面我们将详细探讨如何使用Java来构建一个简单的远程监控系统。 首先...

    远程桌面服务器

    通过RDP,用户可以访问远程计算机上的桌面环境、应用程序和资源,而无需实际物理接触那台机器。RDP不仅提供了图形用户界面的远程控制,还支持声音、打印、文件传输等功能,确保了远程工作与本地工作体验的相似性。 ...

    嵌入式WEB服务器及远程测控应用详解V0.1

    ### 嵌入式WEB服务器及远程测控应用详解 #### 一、嵌入式WEB服务器概述 **嵌入式WEB服务器**是一种专门为嵌入式系统设计的小型化WEB服务器,用于实现远程监控和管理的功能。它通常运行于资源受限的设备上,如微...

    远程桌面客户端服务器端

    服务器端管理用户访问权限、资源分配以及会话管理,确保多个远程用户能同时访问而不影响彼此的工作。 3. RDP协议: RDP是微软开发的一种网络通信协议,主要用于提供图形用户界面的远程访问。它支持多种特性,包括...

    VBA访问远程Excel

    为了能够通过VBA脚本访问远程服务器上的文件,首先需要将远程文件夹映射到本地盘符。这里采用的是`SUBST`命令,这是一个DOS命令,用于将网络路径映射到一个本地驱动器号。 ```vba SUBST Z: \\***.***.***.***\*** `...

    Android实现远程控制PC(Android[客户端]+Qt[服务器端])

    在本项目中,我们探索了如何使用Android设备作为客户端,通过Qt应用程序作为服务器端,实现远程控制个人计算机(PC)的功能。这个系统允许用户通过他们的Android手机执行一系列在PC上的操作,增强了移动设备的实用性...

    利用JSON WebService实现Android访问远程数据库.pdf

    在本文中,我们使用WebService作为中间桥梁,通过Web应用服务器访问数据库,实现了Android跨平台、快速、安全地访问远程服务器端数据。通过使用JSON格式将数据传输到Web服务端,然后由Web服务端访问数据库,实现了...

    嵌入式WEB服务器及远程测控应用详解

    本教程将深入探讨嵌入式WEB服务器在远程测控应用中的实现与应用。 一、嵌入式WEB服务器的基本原理 嵌入式WEB服务器的工作原理与传统的WEB服务器类似,主要由HTTP服务器、HTML文档、CGI(通用网关接口)以及可能的...

    vscode 远程连接服务器

    * 节省资源:使用 VS Code 远程连接服务器,可以减少远程服务器上的资源占用,因为不需要在远程服务器上安装编辑器或 IDE。 三、如何使用 VS Code 远程连接服务器? 使用 VS Code 远程连接服务器需要完成以下步骤...

    mac远程连接服务器工具.zip

    通过安装和使用“Microsoft Remote Desktop 10.3.4.dmg”,Mac用户可以方便地在不离开本地环境的情况下,访问远程服务器上的应用程序、资源和数据,极大地扩展了他们的工作能力。 由于压缩包文件名称列表中只有一个...

    远程服务器

    总的来说,远程服务器和远控软件是现代信息技术中的重要组成部分,它们极大地扩展了我们工作和协作的能力,使我们能够跨越地理界限,随时随地访问和管理远程资源。AnyDesk作为其中的佼佼者,以其高效、安全和易用性...

    客户端应用程序,建立关闭与服务器的连接,向服务器发送数据,接收数据

    客户端应用程序是计算机系统中一种与用户交互的软件,它通常用于访问远程服务器资源或服务。在互联网环境中,客户端应用程序扮演着至关重要的角色,允许用户发送请求、接收响应,并与服务器进行有效的通信。以下是对...

    web应用执行shell操作服务器资源

    在IT领域,Web应用执行Shell操作服务器资源是一个关键的话题,特别是在系统管理和远程维护中。这样的功能使得管理员能够通过Web界面方便地控制服务器,而无需直接登录到服务器终端。以下是对这个主题的详细解释: 1...

    Java web使用pdf.js在线预览远程服务器上的pdf文件

    通过以上步骤,你就能在Java Web应用中实现使用pdf.js在线预览远程服务器上的PDF文件了。这不仅可以提供更好的用户体验,也可以减少服务器的压力,因为大部分处理工作都在客户端完成。记得不断更新pdf.js库,以获取...

    客户机服务器交互模式的特点及应用

    - **资源分布**:在C/S模式下,资源分布在客户机和服务器之间,使得用户能够访问远程服务器上的资源。 - **职责分离**:客户机主要负责用户界面呈现和用户输入处理,而服务器则专注于处理业务逻辑和数据存储。 - **...

    Java实现调用远程桌面示例

    总结起来,`properJavaRDP`提供了一种灵活的方式,让Java开发者能够轻松地在自己的应用中实现远程桌面功能,无论是桌面应用还是Web应用。在使用过程中,理解库的工作原理、正确配置连接参数、处理好安全性问题以及...

Global site tag (gtag.js) - Google Analytics