为什么无论我输入什么网址(可爬行的 GWT 应用程序),HTMLUnit 总是显示 HostPage?

2024-01-05

这是完整的代码

public class CrawlServlet implements Filter{
 public static String getFullURL(HttpServletRequest request) {
    StringBuffer requestURL = request.getRequestURL();
    String queryString = request.getQueryString();


    if (queryString == null) {
        return requestURL.toString();
    } else {
        return requestURL.append('?').append(queryString).toString();
    }
 }

 @Override
 public void destroy() {
 // TODO Auto-generated method stub

 }

 @Override
 public void doFilter(ServletRequest request, ServletResponse response,
 FilterChain chain) throws IOException, ServletException {

 HttpServletRequest httpRequest = (HttpServletRequest) request;
 String fullURLQueryString = getFullURL(httpRequest);
 System.out.println(fullURLQueryString+" what wrong");

 if ((fullURLQueryString != null) && (fullURLQueryString.contains("_escaped_fragment_"))) {
     // remember to unescape any %XX characters
     fullURLQueryString=URLDecoder.decode(fullURLQueryString,"UTF-8");
     // rewrite the URL back to the original #! version
         String url_with_hash_fragment=fullURLQueryString.replace("?_escaped_fragment_=", "#!");


         final WebClient webClient = new WebClient();

         WebClientOptions options = webClient.getOptions();
         options.setCssEnabled(false);
         options.setThrowExceptionOnScriptError(false);
         options.setThrowExceptionOnFailingStatusCode(false);
         options.setJavaScriptEnabled(false);
         HtmlPage page = webClient.getPage(url_with_hash_fragment);

         // important!  Give the headless browser enough time to execute JavaScript
         // The exact time to wait may depend on your application.

         webClient.waitForBackgroundJavaScript(20000);

         // return the snapshot
         //String originalHtml=page.getWebResponse().getContentAsString();
         //System.out.println(originalHtml+" +++++++++");
         System.out.println(page.asXml()+" +++++++++");

         PrintWriter out = response.getWriter();
         out.println(page.asXml());
         //out.println(originalHtml);
     } else {
      try {
        // not an _escaped_fragment_ URL, so move up the chain of servlet (filters)
        chain.doFilter(request, response);
      } catch (ServletException e) {
        System.err.println("Servlet exception caught: " + e);
        e.printStackTrace();
      }
    }

 }


 @Override
 public void init(FilterConfig arg0) throws ServletException {
 // TODO Auto-generated method stub

 }


}

打开网址后“http://127.0.0.1:8888/Myproject.html?gwt.codesvr=127.0.0.1:9997?_escaped_fragment_=article”,它显示了主机页 html 代码,如下所示:

<html>

<head>
<meta name="fragment" content="!">
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<!-- -->
<!--
 Consider inlining CSS to reduce the number of requested files 
-->
<!-- -->
<link type="text/css" rel="stylesheet" href="MyProject.css"/>
<!-- -->
<!-- Any title is fine -->
<!-- -->
<title>MyProject</title>
<!-- -->
<!-- This script loads your compiled module. -->
<!-- If you add any GWT meta tags, they must -->
<!-- be added before this line. -->
<!-- -->
<script type="text/javascript" language="javascript" ></script>
<!-- -->
<!-- The body can have arbitrary html, or -->
<!-- you can leave the body empty if you want -->
<!-- to create a completely dynamic UI. -->
<!-- -->
</head>
<body>

<div id="loading">
Loading
<br/>
<img src="../images/loading.gif"/>
</div>
<!-- OPTIONAL: include this if you want history support -->
<iframe src="javascript:''" id="__gwt_historyFrame" tabindex="-1" style="position: absolute; width: 0;height: 0; border:0;"></iframe>
<!--
 RECOMMENDED if your web app will not function without JavaScript enabled 
-->
<noscript>

<div style="width: 22em; position: absolute; left: 50%; margin-left: -11em; color: red; background-color: white; border: 1pxsolid red; padding: 4px; font-family: sans-serif;">
Your web browser must have JavaScript enabled in order for this application to display correctly.
</div>
</noscript>
</body>
</html>

另一方面, ”http://127.0.0.1:8888/Myproject.html?gwt.codesvr=127.0.0.1:9997#!article“工作正常,显示文章没有任何问题。

我也完成了整个项目并在Tomcat7下运行它,但我也遇到了同样的问题。它总是显示主页的 html。

注意:文章页面是嵌入在标题演示器中的嵌套演示器。但我不认为这是主要原因,因为它甚至没有显示标题页。


首先,代替?_escaped_fragment_=article,也许尝试一下&_escaped_fragment_=article因为你已经有了?为了gwt.codesvr, so 2 ?可能会搞乱 url 参数解析。

其次,您需要确保您的过滤器能够处理具有参数的情况gwt.codesvr。看起来你的过滤器假设它是第一个参数 - 即从?。我相信这个例子here https://stackoverflow.com/questions/13997424/htmlunit-only-displays-host-html-page-for-gwt-app/14012724#14012724无论哪种方式都有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么无论我输入什么网址(可爬行的 GWT 应用程序),HTMLUnit 总是显示 HostPage? 的相关文章

  • ProcessBuilder 未正确执行 Java 类文件

    在一个java文件中 我调用命令行语句来执行另一个java文件 这就是我正在做的 List
  • Java Swing透明JPanel问题

    我有一个 JLayeredPane 其中添加了 3 个 JPanel 我将 JPanel 设为透明 未设置背景并 setOpaque false 我在 JPanel 上绘制线条 只有最后添加的 JPanel 上的线条可见 其他 JPanel
  • 如何操作指定列上的 JTable 返回值?

    我有一个 JTable 有两列 可编辑的JTable 当用户在第二列中输入内容时 我的要求如下 用户只能输入数字和逗号 当用户输入错误字符时 会发出蜂鸣声 Toolkit getDefaultToolkit beep 我该如何实现这一目标
  • javax.naming.NameNotFoundException

    我正在 JBoss 5 容器中运行 ejb 示例 我正在使用一个例子从这里开始 第一部分 http www roseindia net jboss jboss 3 2 shtml 在示例中 我在 JBoss 中部署了 bean 并在 Tom
  • 如何找出已使用的 JAR?

    在更大的项目中 我们可能会使用大量的 JAR 如何找出项目 而不是整个项目 中的某个模块 包正在使用哪些 JAR 有什么工具 技术等吗 较大的项目通常使用类似的构建工具maven http maven apache org or ant h
  • Encog - 如何加载神经网络的训练数据

    The NeuralDataSet我在实际中看到的对象除了 XOR 之外什么都没有 它只是两个小数据数组 我无法从文档中找出任何内容MLDataSet 似乎所有内容都必须立即加载 但是 我想循环遍历训练数据 直到到达 EOF 然后将其算作
  • 当目标是属性时,@Throws 不起作用

    在看的同时这个问题 https stackoverflow com q 47737288 7366707 我注意到申请 Throws to a get or setuse site 没有影响 此外 唯一有效的目标 for Throws ar
  • Java SWT 用户输入验证

    在 SWT 中进行用户输入验证时 Java 约定是什么 我读到有 FieldEditors 它们是非常方便的字段 但遗憾的是仅适用于首选项和对话框 我还了解到有一个 IValidator 接口 但它经常与数据绑定一起使用 就我而言 我的大多
  • javax.el.PropertyNotFoundException:在 java.lang.String 类型上找不到属性“tname”

    我之前使用的是 scriptlet 但现在我改用了 mvc 我无法检索 JSP 页面上的值并收到错误 javax el PropertyNotFoundException Property tname not found on type j
  • Spring Data (JPA) 多个存储库,没有很多类

    在我当前的项目中 我使用 Spring Data JPA 并且有 20 多个 Entity类 我想为它们创建存储库 但创建另一个类 每个类适用于任何模型 Repository注释似乎是某种矫枉过正和大量 重复 代码 所有存储库类将如下所示
  • kafka消费端Offsets的一致性

    我有复制因子为 3 的卡夫卡主题min insync replicas 2 一个向该主题发送 X 条消息的生产者acks all 一段时间后 1 分钟内 在所有消息发送到主题后 将使用 java kafka 客户端为此主题创建新的消费者 使
  • 如何在生产中安全地更改会话 cookie 域或名称?

    我们最近意识到我们的会话 cookie 正在被写入我们网站的完全限定域名 www myapp com 例如 MYAPPCOOKIE 79D5DB83 domain www myapp com 我们希望将其切换为可以跨子域共享的cookie
  • 飞碟中的外部 CSS

    我想知道如何在 Flying Saucer 中包含外部 CSS 在此之前THB我检查了所有可用的链接StackOverflow但它们没有帮助 这就是为什么我自己做这个的原因 TestCSS xhtml重命名版本TestCSS html 所以
  • 具有多个注释的方法上的 AspectJ 切入点

    使用加载时编织 纯 AspectJ 我们有2个注释 Time and Count 以及一些带注释的方法 Time name myMethod1Time Count name myMethod1Count public void myMeth
  • android中ScrollView中的图像

    在我的应用程序中 我想放置一个 png 文件 并且希望它在横向和纵向模式下都被视为滚动图像 请建议代码或示例 要使您的 Imageview 在高度不适合时滚动 您可以在 xml 中的 ScrollView 内添加一个 ImageView 并
  • 如何将模型从 ML Pipeline 保存到 S3 或 HDFS?

    我正在尝试保存 ML Pipeline 生成的数千个模型 正如答案中所示here https stackoverflow com questions 32121046 run 3000 random forest models by gro
  • 使用从 java 程序调用的 Windows 命令提示符将具有多个连续空格的字符串作为参数传递给 jar 文件

    我想使用在另一个java程序中调用的Windows命令提示符将带有多个连续空格的字符串作为参数传递给jar文件 java 文件是这样的 它打印它的所有参数 package src public class myClass public st
  • 如何在非Spring的构造型类中使用@Autowired

    我想在此类中使用该存储库 但是当我放置像 Component 这样的构造型时 我从 IDE 收到错误 无法自动装配 未找到 身份验证 类型的 bean public class CustomMethodSecurityExpressionR
  • POJO 支持使用omnifaces 自动完成primefaces

    我正在尝试在我的项目中使用 primefaces 自动完成组件 以避免将特定转换器写入我尝试使用的每个列表对象全能面孔 http showcase omnifaces org converters ListConverter如建议的here
  • JAAS keytab 配置的相对路径

    我有一个系统 其中 NET 客户端使用 Kerberos 针对 Java 服务器进行身份验证 一切正常 但我正在尝试改进服务器配置 目前一个keytab根目录中需要文件C 因为我的jaas配置文件看起来像这样 Server com sun

随机推荐

  • 读取或转换 word .doc 文件 iOS

    iOS 上的其他应用程序如何读取和写入 Word 文档 我看到其他一些与此相关的问题 并且接受的答案都是 这是不可能完成的 我不想只显示 Word 文档 我想阅读它及其格式 其他应用程序是如何做到这一点的 他们是否使用微软发布的发布标准自己
  • 如何实时处理音频流

    我有一个运行最新 jessie 的树莓派 3 的设置 其中安装了所有更新 其中我提供了一个 A2DP 蓝牙接收器 我可以在其中连接手机播放一些音乐 通过pulseaudio 源 电话 被路由到alsa 输出 接收器 这相当有效 我现在想使用
  • 可以在 SQLAlchemy 中执行没有子查询的 UNION 吗?

    另一个问题展示了如何在 SQLAlchemy 中进行联合 https stackoverflow com a 20032394 565879 是否可以在不使用子查询的情况下在 SQLAlchemy 中执行联合 例如 在链接的问题中 SQLA
  • Shopify option_selection.js - 如何修改?

    我遇到了一点麻烦 我正在重新设计我的商店 并尝试改变变体下拉菜单在前端的显示方式 据我所知 option selection js 是一个从 Shopifys 服务器托管和加载的全局资产 它改变了我的产品选项在我的主题中的显示方式 目前 它
  • 如何以 DRY 方式将“活动”类应用到基于 current_page 的导航? - 轨道3

    所以在我的application html erb我的导航结构看起来像这样 div ul class pills li li li li ul div
  • 多个API密钥

    我的公司帮助为多个客户开发谷歌地图网络应用程序 我个人不是开发人员 所以请原谅我问一个对其他人来说可能很明显的问题 我需要注册多个 API 密钥 因为我不希望我的一个 API 密钥超过 25K 那么是否可以注册多个 API 密钥 我的每个客
  • Hudson/maven 发布快照

    我希望能够使用 Maven 将快照发布到存储库 或者让 Hudson 在每次使用 Maven 构建后发布快照 我一直在阅读 POM 的 SCM 部分 并且有几个问题 抱歉 如果我在这里偏离了基地 这部分对我来说是新的 我不想将我的用户名和密
  • 堆栈上的内存泄漏

    C 中是否有可能造成内存泄漏没有堆分配 通过非常糟糕的设计 我想到的一个例子 如果它没有达到我的预期 请纠正我 include
  • 为什么带有 @Transactional 方法的类不能自动装配?

    我将 Spring Security 与 WAFFLE 过滤器结合使用 该过滤器根据 ActiveDirectory 服务器对用户进行身份验证 我创建了一个额外的过滤器 它还根据我的数据库对用户进行身份验证 它只是检查是否 先前经过身份验证
  • Rust/Diesel:如何查询并插入具有 uuid 的 postgres 表

    我有 Diesel 生成的以下架构 table user id id gt Uuid name gt Text 以及相关模型 use diesel self Queryable Insertable use diesel prelude u
  • 每种类型数据库的实际示例(真实案例)[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有多种类型的数据库用于不同的目的 但通常 MySQL 可以用于所有用途 因为它是最知名的数据库 举个例子 在我的公司 大数据的应用初期就有MyS
  • 如何在同一层次结构路由中将 Shell Route 与 GoRoute 一起使用

    如何在同一层次结构路由中将 Shell Route 与 GoRoute 一起使用 如何使用导航栏按钮之一从 ShellRoute 推送到与 ShellRoute 同一层次结构中的 GoRoute 目前GoRouter的路由有两个值 Shel
  • 使用代理在 Windows 7 上安装 gems 时出现问题

    我正在尝试在 Windows 7 上通过代理安装 ruby 我查看了各种论坛并成功设置了 我认为 http proxy 见下文 SET HTTP PROXY http username password http proxyhere com
  • 为什么 matlab 有基于 1 的索引 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我之前曾使用 Java 和 Python 进行编程 但最近开始使用 MATLAB 来处理很多事情 特别是计算机视觉算法 然而 MATLAB 的数
  • PostgreSQL 中的并行 unnest() 和排序顺序

    我明白使用 SELECT unnest ARRAY 5 3 9 as id 没有ORDER BY子句中 不保证结果集的顺序 例如我可以得到 id 3 5 9 但是下面的请求呢 SELECT unnest ARRAY 5 3 9 as id
  • (可能)ODBC SQL Server 连接字符串中存在非法字符 PWD=

    根据我的研究 SQL Server 连接字符串的 PWD 字段中没有非法字符 但是 使用 SQL Server Express 2008 我将 SA 密码更改为 GUID 具体来说 85C86BD7 B15F 4C51 ADDA 3B6A5
  • 具有公共 getter 和私有 setter 的 Python 属性

    我有一个像这样的 python 属性 class Foo property def maxInputs self return self persistentMaxInputs value maxInputs setter def maxI
  • 如何使用 Google 日历 v3 访问其他用户的日历?

    我正在使用 Google Calendar v3 API 和 google apps 并且希望使用单个 oauth2 凭据来确定哪些用户在任何给定点有空 忙碌 我想用这个 https developers google com google
  • Javascript模拟在输入框中按Enter键

    我似乎对一个问题有一个简单的解决方案 但在网上尝试了大量不同的解决方案后 似乎没有什么对我有用 我有一个搜索字段 每次您在输入字段中键入或按 Enter 键时都会搜索数据表 但是在加载页面时为搜索框分配一个值后 它不会执行搜索 直到用户在输
  • 为什么无论我输入什么网址(可爬行的 GWT 应用程序),HTMLUnit 总是显示 HostPage?

    这是完整的代码 public class CrawlServlet implements Filter public static String getFullURL HttpServletRequest request StringBuf