| [66] | 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 | <% } %> | 
|---|