利用开源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();
相关推荐
1、将form中的数据利用本工具转换成json格式的字符串,再通过ajax传给服务器,从而可以实现无刷新的form提交。; 2、通过AJAX从服务器得到json格式的数据,然后使用本工具解析数据填入form。从而可以实现无刷新的...
Chrome Frame 会把最新版的Chrome Webkit 内核和JavaScript 引擎注入到IE中, IE浏览器将获得Chrome的性能和功能 目录 摘要 I ABSTRACT II 专业名词清单 III 第一章 绪论 1 1.1 研究背景与意义 1 1.2国内外相关...
《php和mysql web开发(原书第4版)》:开发人员专业技术丛书。 目录 读者反馈 译者序 前言 作者简介 第一篇 使用PHP 第1章 PHP快速入门教程 1.1 开始之前:了解PHP 1.2 创建一个示例应用:Bob汽车零部件商店 ...
web页面使用JS把硬盘上的图片读取后写入到EXcel中,使用注意SRC中的图片名。
3.10.4 将数组转换成标量变量:extract() 3.11 进一步学习 3.12 下一章 第4章 字符串操作与正则表达式 4.1 创建一个示例应用程序:智能表单邮件 4.2 字符串的格式化 4.2.1 字符串的整理:chop()、ltrim()和trim() ...
它具有一种独创的将动、静态编程语言与Web页面相结合的软件开发模式,这种模式,可大幅度提高软件的开发效率及源代码复用率,可大幅度降低软件结构的复杂度,可增加源程序的可读性,从而使软件比较容易维护。...
使用PEG.js解析器将LaTeX转换为HTML5 这是使用PEG.js用JavaScript编写的LaTeX到HTML5转换器。 LaTeX的latex.js与Markdown marked精神相似。 LaTeX.js试图做到绝对且毫不妥协地与LaTeX兼容。 生成HTML正是要输出的...
基本思路::使用pdf.js实现在线预览pdf功能。将office(doc,execel),txt,png,jpeg等常见的格式在web端进行转换。 起初使用apose这个包,在Linux下中文字体显示为空格。这个网上有好多解决方案。但是由于内网环境,无法...
一个通过 HTTP (WADO-URI) 或 DICOMWeb (WADO-RS) 的 "DICOM P10 instances" 基于 的医学影像解析程序。 可以将 与 WADO-URI servers、DICOMWeb servers 或 任何返回 DICOM P10 instances (例如: 或 自定义 servers ...
webidl2.js 目的 这是的解析器, 是一种的语言。 该库支持Node.js和浏览器环境。 在尝试在线检查器。 安装 就像平常一样。 对于节点: npm install webidl2 在没有模块支持的浏览器中: < script src =' ./...
《php和mysql web开发(原书第4版)》:开发人员专业技术丛书。 目录 读者反馈 译者序 前言 作者简介 第一篇 使用PHP 第1章 PHP快速入门教程 1.1 开始之前:了解PHP 1.2 创建一个示例应用:Bob汽车零部件商店 ...
该存储库的目标是创建免费(自由)开源软件算法,以解析符合规范的格式良好的 SSML 文档,以便在现代浏览器上实现统一实现。 (SSML) 解析尚未在所有现代浏览器中实现; 参见。 XML 解析: XML 解析器用于从传入的...
在C#里把ArrayList转换为Array 或 把Array转换为ArrayList C# 2.0 在.NET 2.0中,让你的组件也可以绑定 .NET20 一种简单的窗口控件UI状态控制方法 翻译MSDN文章 —— 泛型FAQ:最佳实践 Visual C# 3.0 新特性概览 C#...
<<Java Web程序设计教程.pdf>>人民邮电出版社的教程哦,所以,好书,你懂的!! 第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,为提高速度而预编译:http://www.transcrypt.org 预编译为高度可读、高效的 JavaScript,下载 kB 而不是 MB 多重继承、可选运算符重载、元类、...
这里需要简单介绍一下浏览器构造页面的原理, 当浏览器从服务器接收到了HTML文档,并把HTML在内存中转换成DOM树,在转换的过程中如果发现某个节点(node)上引用了CSS或者IMAGE,就会再发1个request去请求CSS或image,...
第1章 服务器控件概述及开发环境部署 .1 1.1 自定义服务器控件 1 1.2 服务器控件在软件开发过程中的作用 1 1.3 在控件开发中提升自己 2 1.4 可继承控件基类介绍 2 1.5 运行一个简单的控件 7 1.5.1 开发一个...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...
为了支持最新的基于XML的 Web Service的标准,针对XML应用的Java API使得以最小手工转换数据代价实现的 Web Service的构造变得简便易行,本部分通过详细解析xFire组件的原理与使用从而简化Java WebService的实现过程...