| 1 | <%-- | 
|---|
| 2 | Licensed to the Apache Software Foundation (ASF) under one or more | 
|---|
| 3 | contributor license agreements.  See the NOTICE file distributed with | 
|---|
| 4 | this work for additional information regarding copyright ownership. | 
|---|
| 5 | The ASF licenses this file to You under the Apache License, Version 2.0 | 
|---|
| 6 | (the "License"); you may not use this file except in compliance with | 
|---|
| 7 | the License.  You may obtain a copy of the License at | 
|---|
| 8 |  | 
|---|
| 9 | http://www.apache.org/licenses/LICENSE-2.0 | 
|---|
| 10 |  | 
|---|
| 11 | Unless required by applicable law or agreed to in writing, software | 
|---|
| 12 | distributed under the License is distributed on an "AS IS" BASIS, | 
|---|
| 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|---|
| 14 | See the License for the specific language governing permissions and | 
|---|
| 15 | limitations under the License. | 
|---|
| 16 | --%> | 
|---|
| 17 | <%@ page | 
|---|
| 18 | session="false" | 
|---|
| 19 | contentType="text/html; charset=UTF-8" | 
|---|
| 20 | import="java.io.*" | 
|---|
| 21 | import="java.util.*" | 
|---|
| 22 |  | 
|---|
| 23 | import="org.apache.nutch.searcher.*" | 
|---|
| 24 | import="org.apache.nutch.parse.ParseData" | 
|---|
| 25 | import="org.apache.nutch.metadata.Metadata" | 
|---|
| 26 | import="org.apache.nutch.metadata.Nutch" | 
|---|
| 27 | import="org.apache.hadoop.conf.Configuration" | 
|---|
| 28 | import="org.apache.nutch.util.NutchConfiguration" | 
|---|
| 29 | %><% | 
|---|
| 30 | Configuration nutchConf = NutchConfiguration.get(application); | 
|---|
| 31 | NutchBean bean = NutchBean.get(application, nutchConf); | 
|---|
| 32 | bean.LOG.info("cache request from " + request.getRemoteAddr()); | 
|---|
| 33 | Hit hit = new Hit(Integer.parseInt(request.getParameter("idx")), | 
|---|
| 34 | request.getParameter("id")); | 
|---|
| 35 | HitDetails details = bean.getDetails(hit); | 
|---|
| 36 | String id = "idx=" + hit.getIndexNo() + "&id=" + hit.getUniqueKey(); | 
|---|
| 37 |  | 
|---|
| 38 | String language = | 
|---|
| 39 | ResourceBundle.getBundle("org.nutch.jsp.cached", request.getLocale()) | 
|---|
| 40 | .getLocale().getLanguage(); | 
|---|
| 41 |  | 
|---|
| 42 | Metadata metaData = bean.getParseData(details).getContentMeta(); | 
|---|
| 43 |  | 
|---|
| 44 | String content = null; | 
|---|
| 45 | String contentType = (String) metaData.get(Metadata.CONTENT_TYPE); | 
|---|
| 46 | if (contentType.startsWith("text/html")) { | 
|---|
| 47 | // FIXME : it's better to emit the original 'byte' sequence | 
|---|
| 48 | // with 'charset' set to the value of 'CharEncoding', | 
|---|
| 49 | // but I don't know how to emit 'byte sequence' in JSP. | 
|---|
| 50 | // out.getOutputStream().write(bean.getContent(details)) may work, | 
|---|
| 51 | // but I'm not sure. | 
|---|
| 52 | String encoding = (String) metaData.get("CharEncodingForConversion"); | 
|---|
| 53 | if (encoding != null) { | 
|---|
| 54 | try { | 
|---|
| 55 | content = new String(bean.getContent(details), encoding); | 
|---|
| 56 | } | 
|---|
| 57 | catch (UnsupportedEncodingException e) { | 
|---|
| 58 | // fallback to windows-1252 | 
|---|
| 59 | content = new String(bean.getContent(details), "windows-1252"); | 
|---|
| 60 | } | 
|---|
| 61 | } | 
|---|
| 62 | else | 
|---|
| 63 | content = new String(bean.getContent(details)); | 
|---|
| 64 | } | 
|---|
| 65 | %> | 
|---|
| 66 | <!-- | 
|---|
| 67 | <base href="<%=details.getValue("url")%>"> | 
|---|
| 68 | --> | 
|---|
| 69 | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | 
|---|
| 70 | <% | 
|---|
| 71 | out.flush(); | 
|---|
| 72 | %> | 
|---|
| 73 | <%@ taglib uri="http://jakarta.apache.org/taglibs/i18n" prefix="i18n" %> | 
|---|
| 74 | <i18n:bundle baseName="org.nutch.jsp.cached"/> | 
|---|
| 75 | <h2 style="{color: rgb(255, 153, 0)}"><i18n:message key="title"/></h2> | 
|---|
| 76 | <h3> | 
|---|
| 77 | <i18n:message key="page"> | 
|---|
| 78 | <i18n:messageArg value="<%=details.getValue(\"url\")%>"/> | 
|---|
| 79 | </i18n:message> | 
|---|
| 80 | </h3> | 
|---|
| 81 | <hr> | 
|---|
| 82 | <!-- | 
|---|
| 83 | FIXME: have to sanitize 'content' : e.g. removing unncessary part | 
|---|
| 84 | of head elememt | 
|---|
| 85 | --> | 
|---|
| 86 | <% | 
|---|
| 87 | String caching = details.getValue("cache"); | 
|---|
| 88 | String url = details.getValue("url"); | 
|---|
| 89 | if (caching != null && !caching.equals(Nutch.CACHING_FORBIDDEN_NONE)) { | 
|---|
| 90 | %> | 
|---|
| 91 | Display of this content was administratively prohibited by the webmaster. | 
|---|
| 92 | You may visit the original page instead: <a href="<%=url%>"><%=url%></a>. | 
|---|
| 93 | <% | 
|---|
| 94 | return; | 
|---|
| 95 | } | 
|---|
| 96 | %> | 
|---|
| 97 | <% if (contentType.startsWith("text/html")) {%> | 
|---|
| 98 |  | 
|---|
| 99 | <% if (content != null && !content.equals("")) {%> | 
|---|
| 100 | <%= content %> | 
|---|
| 101 | <% } else { %> | 
|---|
| 102 | <i18n:message key="noContent"/> | 
|---|
| 103 | <% } %> | 
|---|
| 104 |  | 
|---|
| 105 | <% } else { %> | 
|---|
| 106 |  | 
|---|
| 107 | The cached content has mime type "<%=contentType%>", | 
|---|
| 108 | click this <a href="./servlet/cached?<%=id%>">link</a> to download it directly. | 
|---|
| 109 |  | 
|---|
| 110 | <% } %> | 
|---|