가 URL "http://127.0.0.1:8888/Myproject.html?gwt.codesvr=127.0.0.1:9997?_escaped_fragment_=article
"를 오픈 한 후 전체 코드내가 입력 한 URL (Crawlable GWT APP)에 상관없이 HTMLUnit이 항상 HostPage를 표시하는 이유는 무엇입니까?
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
}
}
, 그것은이 같은 호스트 페이지 HTML 코드를 보여 주었다 : "http://127.0.0.1:8888/Myproject.html?gwt.codesvr=127.0.0.1:9997#!article
을"한편
<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>
을 확인 작동 & 아무 문제없이 기사를 보여줍니다.
나는 또한 전체 프로젝트 &을 컴파일하여 Tomcat7에서 실행했지만 동일한 문제가 있습니다. 항상 호스트 페이지의 html을 표시합니다.
참고 : 기사 페이지는 머리글 발표자 안에 포함 된 중첩 된 발표자입니다. 그러나 그것이 헤더 페이지를 보여주지 않았기 때문에 그것이 주된 이유라고 생각하지 않습니다. 이미 gwt.codesvr
에 대한 ?
을 가지고 있기 때문에 아마도 &_escaped_fragment_=article
을 시도
사실이 아닌 이유는 무엇입니까? 왜냐하면 나는 WebClient를 테스트하기 위해 url을 넣기조차했지만 여전히 호스트 페이지를 보여줍니다. url_with_hash_fragment = "http://127.0.0.1:8888/myproject.html?gwt.codesvr=127.0.0.1:9997#!article final WebClient webClient = new WebClient(); – Tum
게다가 나는 프로젝트 & 테스트를" mydomain.com?_escaped_fragment_=article "이라면, 결과는 – Tum
입니다. String url_with_hash_fragment = fullURLQueryString.replace ("& _ escaped_fragment_ = ","#! ");로 변경하면 어쨌든 – Tum