search.jsp revision 158
d6fa26d0adaec6c910115be34fe7a5a5f402c14fMark Andrews<%--
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinCDDL HEADER START
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinThe contents of this file are subject to the terms of the
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox UserCommon Development and Distribution License (the "License").
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox UserYou may not use this file except in compliance with the License.
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinSee LICENSE.txt included in this distribution for the specific
d6fa26d0adaec6c910115be34fe7a5a5f402c14fMark Andrewslanguage governing permissions and limitations under the License.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinWhen distributing Covered Code, include this CDDL HEADER in each
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinfile and include the License file at LICENSE.txt.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox UserIf applicable, add the following below this CDDL HEADER, with the
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntfields enclosed by brackets "[]" replaced with your own identifying
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeininformation: Portions Copyright [yyyy] [name of copyright owner]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinCDDL HEADER END
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinCopyright 2005 Sun Microsystems, Inc. All rights reserved.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinUse is subject to license terms.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrewsident "%Z%%M% %I% %E% SMI"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein--%><%@ page import = "javax.servlet.*,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinjava.lang.Integer,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinjavax.servlet.http.*,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinjava.util.Hashtable,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinjava.util.Vector,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinjava.util.Date,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinjava.util.ArrayList,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinjava.util.List,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinjava.lang.*,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userjava.io.*,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userjava.io.StringReader,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userorg.opensolaris.opengrok.analysis.*,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinorg.opensolaris.opengrok.search.*,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinorg.opensolaris.opengrok.web.*,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userorg.opensolaris.opengrok.web.*,
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userorg.opensolaris.opengrok.search.context.*,
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntorg.opensolaris.opengrok.configuration.*,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinorg.apache.lucene.search.spell.LuceneDictionary,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinorg.apache.lucene.search.spell.SpellChecker,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userorg.apache.lucene.store.FSDirectory,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinorg.apache.lucene.analysis.*,
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userorg.apache.lucene.document.*,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userorg.apache.lucene.index.*,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinorg.apache.lucene.search.*,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinorg.apache.lucene.queryParser.*"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein%><%@ page session="false" %><%@ page errorPage="error.jsp" %><%
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinDate starttime = new Date();
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox UserString q = request.getParameter("q");
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinString defs = request.getParameter("defs");
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinString refs = request.getParameter("refs");
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinString hist = request.getParameter("hist");
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinString path = request.getParameter("path");
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein%>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<%@ include file="projects.jspf" %>
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews<%
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinString sort = null;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinfinal String LASTMODTIME = "lastmodtime";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinfinal String RELEVANCY = "relevancy";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinCookie[] cookies = request.getCookies();
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userif (cookies != null) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User for (Cookie cookie : cookies) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (cookie.getName().equals("OpenGrok/sorting")) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sort = cookie.getValue();
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if (!LASTMODTIME.equals(sort) && !RELEVANCY.equals(sort)) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sort = null;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein break;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinString sortParam = request.getParameter("sort");
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinif (sortParam != null) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (LASTMODTIME.equals(sortParam)) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sort = LASTMODTIME;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt } else if (RELEVANCY.equals(sortParam)) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sort = RELEVANCY;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (sort != null) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User Cookie cookie = new Cookie("OpenGrok/sorting", sort);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein response.addCookie(cookie);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox UserHits hits = null;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan HuntString errorMsg = null;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinif( q!= null && q.equals("")) q = null;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinif( defs != null && defs.equals("")) defs = null;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinif( refs != null && refs.equals("")) refs = null;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinif( hist != null && hist.equals("")) hist = null;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinif( path != null && path.equals("")) path = null;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntif (project != null && project.equals("")) project = null;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinif (q != null || defs != null || refs != null || hist != null || path != null) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Searcher searcher = null; //the searcher used to open/search the index
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein IndexReader ireader = null; //the reader used to open/search the index
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User Query query = null, defQuery = null; //the Query created by the QueryParser
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein int start = 0; //the first index displayed on this page
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein int max = 25; //the maximum items displayed on this page
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein int thispage = 0; //used for the for/next either max or
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein String moreUrl = null;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein CompatibleAnalyser analyzer = new CompatibleAnalyser();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein String qstr = "";
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt String result = "";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein try {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User String DATA_ROOT = env.getDataRootPath();
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt if(DATA_ROOT.equals("")) {
fc74b733bf679e1b3fb1599e32d445dffe325208Tinderbox User throw new Exception("DATA_ROOT parameter is not configured in web.xml!");
5d564da348e890e42f63eebf2dced9a05b41f4fbTinderbox User }
fc74b733bf679e1b3fb1599e32d445dffe325208Tinderbox User File data_root = new File(DATA_ROOT);
fc74b733bf679e1b3fb1599e32d445dffe325208Tinderbox User if(!data_root.isDirectory()) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User throw new Exception("DATA_ROOT parameter in web.xml does not exist or is not a directory!");
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ireader = IndexReader.open(DATA_ROOT + "/index");
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein searcher = new IndexSearcher(ireader);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein //String date = request.getParameter("date");
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein try {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein start = Integer.parseInt(request.getParameter("start")); //parse the max results first
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein max = Integer.parseInt(request.getParameter("n")); //then the start index
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if(max < 0 || (max % 10 != 0) || max > 50) max = 25;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if(start < 0 ) start = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } catch (Exception e) { }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein StringBuilder sb = new StringBuilder();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (q != null) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sb.append(q);
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (defs != null) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sb.append(" defs:(");
c2258eedf2d9d0207b45b90014f8fde5413b41a3Tinderbox User sb.append(defs);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sb.append(")");
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
if (refs != null) {
sb.append(" refs:(");
sb.append(refs);
sb.append(")");
}
if (path != null) {
sb.append(" path:(");
sb.append(path);
sb.append(")");
}
if (hist != null) {
sb.append(" hist:(");
sb.append(hist);
sb.append(")");
}
if (project != null) {
sb.append(" (");
boolean first = true;
for (String s : project.split(" ")) {
if (first) {
first = false;
} else {
sb.append(" OR ");
}
sb.append("project:(");
sb.append(s);
sb.append(")");
}
sb.append(")");
}
qstr = sb.toString();
QueryParser qparser = new QueryParser("full", analyzer);
qparser.setDefaultOperator(QueryParser.AND_OPERATOR);
qparser.setAllowLeadingWildcard(env.isAllowLeadingWildcard());
query = qparser.parse(qstr); //parse the
if ("lastmodtime".equals(sort)) {
hits = searcher.search(query, new Sort("date", true));
} else {
hits = searcher.search(query);
}
thispage = max;
} catch (BooleanQuery.TooManyClauses e) {
errorMsg = "<b>Error:</b> Too many results for wildcard!";
} catch (ParseException e) {
errorMsg = "<b>Error:</b><br/>" + Util.Htmlize(qstr) + "<br/>" + Util.Htmlize(e.getMessage());
} catch (FileNotFoundException e) {
errorMsg = "<b>Error:</b> Index database not found";
} catch (Exception e) {
errorMsg = "<b>Error:</b> " + Util.Htmlize(e.getMessage());
}
// @TODO fix me. I should try to figure out where the exact hit is instead
// of returning a page with just _one_ entry in....
if (hits != null && hits.length() == 1 && request.getServletPath().equals("/s") && (query != null && query instanceof TermQuery)) {
String preFragmentPath = Util.URIEncodePath(context + "/xref" + hits.doc(0).get("path"));
String fragment = Util.URIEncode(((TermQuery)query).getTerm().text());
StringBuilder url = new StringBuilder(preFragmentPath);
url.append("#");
url.append(fragment);
response.sendRedirect(url.toString());
} else {
String pageTitle = "Search";
RuntimeEnvironment environment = RuntimeEnvironment.getInstance();
environment.register();
%><%@ include file="httpheader.jspf" %>
<body>
<div id="page">
<div id="header"><%@ include file="pageheader.jspf" %></div>
<div id="Masthead"></div>
<div id="bar">
<table border="0" width="100%"><tr><td><a href="<%=context%>" id="home">Home</a></td><td align="right"><%
{
StringBuffer url = request.getRequestURL();
url.append('?');
String querys = request.getQueryString();
if (querys != null) {
int idx = querys.indexOf("sort=");
if (idx == -1) {
url.append(querys);
url.append('&');
} else {
url.append(querys.substring(0, idx));
}
}
url.append("sort=");
if (sort == null || RELEVANCY.equals(sort)) {
url.append(LASTMODTIME);
%><b>Sort by relevance</b> <a href="<%=url.toString()%>">Sort by last modified time</a><%
} else {
url.append(RELEVANCY);
%><a href="<%=url.toString()%>">Sort by relevance</a> <b>Sort by last modified time</b><%
}
} %></td></tr></table>
</div>
<div id="menu">
<%@ include file="menu.jspf"%>
</div>
<div id="results">
<%
if( hits == null || errorMsg != null) {
%><%=errorMsg%><%
} else if (hits.length() == 0) {
File spellIndex = new File(env.getDataRootPath(), "spellIndex");
if (spellIndex.exists()) {
FSDirectory spellDirectory = FSDirectory.getDirectory(spellIndex);
SpellChecker checker = new SpellChecker(spellDirectory);
Date sstart = new Date();
%><p><font color="#cc0000">Did you mean</font>:<%
String[] toks;
if(q != null) {
toks = q.split("[\t ]+");
if(toks != null){
for(int j=0; j<toks.length; j++) {
if(toks[j].length() > 3) {
String[] ret = checker.suggestSimilar(toks[j].toLowerCase(), 3);
for(int i = 0;i < ret.length; i++) {
%> <a href=search?q=<%=ret[i]%>><%=ret[i]%></a> &nbsp; <%
}
}
}
}
}
if(refs != null) {
toks = refs.split("[\t ]+");
if(toks != null){
for(int j=0; j<toks.length; j++) {
if(toks[j].length() > 3) {
String[] ret = checker.suggestSimilar(toks[j].toLowerCase(), 3);
for(int i = 0;i < ret.length; i++) {
%> <a href=search?q=<%=ret[i]%>><%=ret[i]%></a> &nbsp; <%
}
}
}
}
}
if(defs != null) {
toks = defs.split("[\t ]+");
if(toks != null){
for(int j=0; j<toks.length; j++) {
if(toks[j].length() > 3) {
String[] ret = checker.suggestSimilar(toks[j].toLowerCase(), 3);
for(int i = 0;i < ret.length; i++) {
%> <a href=search?q=<%=ret[i]%>><%=ret[i]%></a> &nbsp; <%
}
}
}
}
}
spellDirectory.close();
%></p><%
}
%><p> Your search <b><%=query.toString()%></b> did not match any files.
<br />
Suggestions:<br/><blockquote>- Make sure all terms are spelled correctly.<br/>
- Try different keywords.<br/>
- Try more general keywords.<br/>
- Use 'wil*' cards if you are looking for partial match.
</blockquote>
</p><%
} else { // We have a lots of results to show
StringBuilder slider = null;
if ( max < hits.length()) {
if((start + max) < hits.length()) {
thispage = max;
} else {
thispage = hits.length() - start;
}
String url = (q == null ? "" : "&amp;q=" + Util.URIEncode(q) ) +
(defs == null ? "" : "&amp;defs=" + Util.URIEncode(defs)) +
(refs == null ? "" : "&amp;refs=" + Util.URIEncode(refs)) +
(path == null ? "" : "&amp;path=" + Util.URIEncode(path)) +
(hist == null ? "" : "&amp;hist=" + Util.URIEncode(hist)) +
(sort == null ? "" : "&amp;sort=" + Util.URIEncode(sort));
slider = new StringBuilder();
int labelStart =1;
int sstart = start - max* (start / max % 10 + 1) ;
if(sstart < 0) {
sstart = 0;
labelStart = 1;
} else {
labelStart = sstart/max + 1;
}
int label = labelStart;
int labelEnd = label + 11;
String arr;
for(int i=sstart; i<hits.length() && label <= labelEnd; i+= max) {
if (i <= start && start < i+ max) {
slider.append("<span class=\"sel\">" + label + "</span>");
} else {
if(label == labelStart && label != 1) {
arr = "&lt;&lt";
} else if(label == labelEnd && i < hits.length()) {
arr = "&gt;&gt;";
} else {
arr = label < 10 ? " " + label : String.valueOf(label);
}
slider.append("<a class=\"more\" href=\"search?n=" + max + "&amp;start=" + i + url + "\">"+
arr + "</a>");
}
label++;
}
} else {
thispage = hits.length() - start; // set the max index to max or last
}
%>&nbsp; &nbsp; Searched <b><%=query.toString()%></b> (Results <b><%=start+1%> -
<%=thispage+start%></b> of <b><%=hits.length()%></b>) sorted by <%=sort%> <p><%=slider != null ?
slider.toString(): ""%></p>
<table width="100%" cellpadding="3" cellspacing="0" border="0"><%
Context sourceContext = null;
Summarizer summer = null;
if (query != null) {
try{
sourceContext = new Context(query);
if(sourceContext != null)
summer = new Summarizer(query, analyzer);
} catch (Exception e) {
}
}
HistoryContext historyContext = null;
try {
historyContext = new HistoryContext(query);
} catch (Exception e) {
}
EftarFileReader ef = null;
try{
ef = new EftarFileReader(env.getDataRootPath() + "/index/dtags.eftar");
} catch (Exception e) {
}
Results.prettyPrintHTML(hits, start, start+thispage,
out,
sourceContext, historyContext, summer,
context + "/xref",
context + "/more",
env.getSourceRootPath(),
env.getDataRootPath(),
ef);
if(ef != null) {
try{
ef.close();
} catch (IOException e) {
}
}
%></table><br/>
<b> Completed in <%=(new Date()).getTime() - starttime.getTime()%> milliseconds </b> <br/>
<%=slider != null ? "<p>" + slider + "</p>" : ""%>
<%
}
%><br/></div><%@include file="foot.jspf"%><%
}
if (ireader != null)
ireader.close();
} else { // Entry page show the map
response.sendRedirect(context + "/index.jsp");
}
%>