`
hylxinlang
  • 浏览: 124285 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

简单***的实现,利用js解析把web网页转换成自己的网页,加快开发

阅读更多

利用开源js引擎rhino+jsoup进行web裁制,使用javascript来解析页面。

JsEngin.java
package cn.tailor.engin;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

import org.jsoup.Jsoup;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.ScriptableObject;
import org.mozilla.javascript.commonjs.module.provider.SoftCachingModuleScriptProvider;

public class JsEngin {
	public static String exedom(){
		ScriptEngineManager manager = new ScriptEngineManager();
	    ScriptEngine engine = manager.getEngineByName("js");
	    try {
	      engine.put("oText", Fetch.getHtml("http://www.baidu.com"));
	      FileReader reader = new FileReader("D://js/yourFile.js");
	      engine.eval(reader);
	      reader.close();
	      String name = (String) engine.get("output");
	      return name;
	    } catch (Exception e) {
	      e.printStackTrace();
	      return null;
	    }
	}
	public static String exe(){
		Context localContext = Context.enter();
	    ScriptableObject localScriptableObject = localContext.initStandardObjects();
	    Object Jsoup = Context.javaToJS(Jsoup.class, localScriptableObject);
	    ScriptableObject.putProperty(localScriptableObject, "jsoup", Jsoup);
	    ScriptableObject.putProperty(localScriptableObject, "dom", Fetch.getHtml("http://www.baidu.com"));
	    FileReader reader;
		try {
			reader = new FileReader("D://js/yourFile.js");
			localContext.evaluateReader(localScriptableObject, reader, reader.toString(), 1, null);
			 reader.close();
		} catch (FileNotFoundException e) {
			
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		String html=(String) localScriptableObject.get("output");
	    return html;
	    
	}
}

 TailorService.java

package cn.tailor.service;
import java.io.IOException;
import java.io.PrintWriter;

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

import cn.tailor.engin.JsEngin;


public class TailorService extends HttpServlet {

	/**
	 * Constructor of the object.
	 */
	public TailorService() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		
	}

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		String html=JsEngin.exe();
		out.print(html);
		out.flush();
		out.close();
	}

	/**
	 * The doPost method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to post.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<HTML>");
		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
		out.println("  <BODY>");
		out.print("    This is ");
		out.print(this.getClass());
		out.println(", using the POST method");
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}

	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException if an error occurs
	 */
	public void init() throws ServletException {
		
	}

}

 Fetch.java

package cn.tailor.engin;

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class Fetch {
	public static Document getHtml(String url){
		try {
			Document dom=Jsoup.connect(url).timeout(6000).get();
			return dom;
		} catch (IOException e) {
			
			e.printStackTrace();
			return null;
		}
	}
}

 yourfile.js

var output=dom.getElementsByTag("title").get(0).text();

 

 

 

  • 大小: 6.7 KB
0
2
分享到:
评论
2 楼 hylxinlang 2013-08-31  
是,我只是简单实现,还有些细节没研究透。要实现一个真正的页面改造,紧这点是不行的。要转化为完全使用javascript开发。
1 楼 vb2005xu 2013-08-31  
蛋痛的方案选择: 既然都用jsoup了,那还要 rhino 干嘛?而且你这个代码根本就没有体现出rhino 的任何意义啊,

相关推荐

    form数据与json对象的互相转换(完整版)

    1、将form中的数据利用本工具转换成json格式的字符串,再通过ajax传给服务器,从而可以实现无刷新的form提交。; 2、通过AJAX从服务器得到json格式的数据,然后使用本工具解析数据填入form。从而可以实现无刷新的...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    Chrome Frame 会把最新版的Chrome Webkit 内核和JavaScript 引擎注入到IE中, IE浏览器将获得Chrome的性能和功能 目录 摘要 I ABSTRACT II 专业名词清单 III 第一章 绪论 1 1.1 研究背景与意义 1 1.2国内外相关...

    PHP和MySQL Web开发第4版pdf以及源码

    《php和mysql web开发(原书第4版)》:开发人员专业技术丛书。 目录 读者反馈 译者序 前言 作者简介 第一篇 使用PHP 第1章 PHP快速入门教程 1.1 开始之前:了解PHP 1.2 创建一个示例应用:Bob汽车零部件商店 ...

    js转换图片到Excel 里面

    web页面使用JS把硬盘上的图片读取后写入到EXcel中,使用注意SRC中的图片名。

    PHP和MySQL WEB开发(第4版)

    3.10.4 将数组转换成标量变量:extract() 3.11 进一步学习 3.12 下一章 第4章 字符串操作与正则表达式 4.1 创建一个示例应用程序:智能表单邮件 4.2 字符串的格式化 4.2.1 字符串的整理:chop()、ltrim()和trim() ...

    YC++编译器网页浏览器

    它具有一种独创的将动、静态编程语言与Web页面相结合的软件开发模式,这种模式,可大幅度提高软件的开发效率及源代码复用率,可大幅度降低软件结构的复杂度,可增加源程序的可读性,从而使软件比较容易维护。...

    LaTeX.js:JavaScript LaTeX到HTML5的转换器

    使用PEG.js解析器将LaTeX转换为HTML5 这是使用PEG.js用JavaScript编写的LaTeX到HTML5转换器。 LaTeX的latex.js与Markdown marked精神相似。 LaTeX.js试图做到绝对且毫不妥协地与LaTeX兼容。 生成HTML正是要输出的...

    在线预览完整实现.zip

    基本思路::使用pdf.js实现在线预览pdf功能。将office(doc,execel),txt,png,jpeg等常见的格式在web端进行转换。 起初使用apose这个包,在Linux下中文字体显示为空格。这个网上有好多解决方案。但是由于内网环境,无法...

    DicomParsing:js 解析 dicom 文件(基于 cornerstone.js 实现)

    一个通过 HTTP (WADO-URI) 或 DICOMWeb (WADO-RS) 的 "DICOM P10 instances" 基于 的医学影像解析程序。 可以将 与 WADO-URI servers、DICOMWeb servers 或 任何返回 DICOM P10 instances (例如: 或 自定义 servers ...

    webidl2.js:WebIDL解析器

    webidl2.js 目的 这是的解析器, 是一种的语言。 该库支持Node.js和浏览器环境。 在尝试在线检查器。 安装 就像平常一样。 对于节点: npm install webidl2 在没有模块支持的浏览器中: &lt; script src =' ./...

    PHP和MySQL Web开发第4版

    《php和mysql web开发(原书第4版)》:开发人员专业技术丛书。 目录 读者反馈 译者序 前言 作者简介 第一篇 使用PHP 第1章 PHP快速入门教程 1.1 开始之前:了解PHP 1.2 创建一个示例应用:Bob汽车零部件商店 ...

    SSMLParser:为 Web Speech API 实现 SSML 解析

    该存储库的目标是创建免费(自由)开源软件算法,以解析符合规范的格式良好的 SSML 文档,以便在现代浏览器上实现统一实现。 (SSML) 解析尚未在所有现代浏览器中实现; 参见。 XML 解析: XML 解析器用于从传入的...

    asp.net知识库

    在C#里把ArrayList转换为Array 或 把Array转换为ArrayList C# 2.0 在.NET 2.0中,让你的组件也可以绑定 .NET20 一种简单的窗口控件UI状态控制方法 翻译MSDN文章 —— 泛型FAQ:最佳实践 Visual C# 3.0 新特性概览 C#...

    Java Web程序设计教程

    &lt;&lt;Java Web程序设计教程.pdf&gt;&gt;人民邮电出版社的教程哦,所以,好书,你懂的!! 第1章web应用开发简介 1 1.1何为web应用 1 1.1.1web的概念及发展 1 1.1.2web应用程序 2 1.2使用java开发web应用 3 1.2.1面向对象...

    Transcrypt:把Python编写的代码转换成JavaScript-python

    Transcrypt:把Python编写的代码转换成JavaScript浏览器中的 Python,为提高速度而预编译:http://www.transcrypt.org 预编译为高度可读、高效的 JavaScript,下载 kB 而不是 MB 多重继承、可选运算符重载、元类、...

    高性能web开发 如何加载JS,JS应该放在什么位置?

    这里需要简单介绍一下浏览器构造页面的原理, 当浏览器从服务器接收到了HTML文档,并把HTML在内存中转换成DOM树,在转换的过程中如果发现某个节点(node)上引用了CSS或者IMAGE,就会再发1个request去请求CSS或image,...

    庖丁解牛:纵向切入ASP.NET 3.5控件和组件开发技术

    第1章 服务器控件概述及开发环境部署 .1 1.1 自定义服务器控件 1 1.2 服务器控件在软件开发过程中的作用 1 1.3 在控件开发中提升自己 2 1.4 可继承控件基类介绍 2 1.5 运行一个简单的控件 7 1.5.1 开发一个...

    java开源包3

    利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...

    基于JavaEE平台实战

    为了支持最新的基于XML的 Web Service的标准,针对XML应用的Java API使得以最小手工转换数据代价实现的 Web Service的构造变得简便易行,本部分通过详细解析xFire组件的原理与使用从而简化Java WebService的实现过程...

Global site tag (gtag.js) - Google Analytics