首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

一个很奇怪的跳页有关问题

2012-02-13 
一个很奇怪的跳页问题首先我写了一个搜索本地索引文件的JSP,用到lucene检索包里面的Hits类。searchindex.js

一个很奇怪的跳页问题
首先我写了一个搜索本地索引文件的JSP,用到lucene检索包里面的Hits类。searchindex.jsp如下:

Java code
<%@ page language="java" contentType="text/html; charset=gb2312"    pageEncoding="gb2312"%>    <%@page import="org.apache.lucene.search.*,ly.SearchIndex"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>搜索结果</title><style type="text/css"><!--.STYLE1 {    font-family: "仿宋_GB2312";    font-size: xx-large;    font-color: #666666}--></style></head><body><p class="STYLE1">&#25628;&#32034;&#32467;&#26524;&#65306; </p><hr><% String keyword = new String(request.getParameter("searchquery").getBytes("ISO-8859-1"),"gb2312"); Hits hits = (new SearchIndex()).search(keyword); int length = hits.length(); int currentPage,recordPerPage=13;  if (request.getParameter("currentPage") == null)     currentPage = 1; else     currentPage = Integer.valueOf(request.getParameter("currentPage"));for (int i = (currentPage-1)*recordPerPage;i < length && i < currentPage*recordPerPage;i++){    out.println("<a href=\""+hits.doc(i).get("URL")+"\">"+hits.doc(i).get("title")+i+"</a><br>");        String bodyContain = hits.doc(i).get("body").substring(0,1023);    String tempkeyword = null;    if (keyword.charAt(0) >= 65 && keyword.charAt(0) <= 90)    {        tempkeyword = keyword.replace(keyword.charAt(0),(char)(keyword.charAt(0)+32));        bodyContain = bodyContain.replaceAll(tempkeyword , "<font color=#E50060>" + tempkeyword + "</font>");    }    else if (keyword.charAt(0) >= 97 && keyword.charAt(0) <= 122)    {        tempkeyword = keyword.replace(keyword.charAt(0),(char)(keyword.charAt(0)-32));        bodyContain = bodyContain.replaceAll(tempkeyword , "<font color=#E50060>" + tempkeyword + "</font>");    }    bodyContain = bodyContain.replaceAll(keyword , "<font color=#E50060>" + keyword + "</font>");    out.println(i+"<br>");    out.println(bodyContain);    out.println(i+"<br>");    out.println("<br/><br/>");}out.println("<br/>");out.println("there is " + length + " result matched");%><hr>共有<%=length%>个记录&nbsp;<%if (length%recordPerPage == 0) out.println(length/recordPerPage);    else out.println(length/recordPerPage + 1);%>页&nbsp;每页显示<%=recordPerPage%>个记录&nbsp;&nbsp;<br/><%if(currentPage == 1){ out.print(" 首页 上一页");   }else{  %>       <a href="searchindex.jsp?currentPage=<%=1%>">首页</a>    <a href="searchindex.jsp?currentPage=<%=currentPage-1%>">上一页</a>    <%}%><%if(currentPage == length){ out.print("下一页 尾页");   }else{  %>       <A HREF="searchindex.jsp?currentPage=<%=currentPage+1%>">下一页</A>    <A HREF="searchindex.jsp?currentPage=<%=length%>">尾页</A>    <%}%></body></html>

SearchIndex是一个类,我用来检索本地索引文件用的。Hits是搜索到的结果,用doc(i)取出来,实际相当一个记录。
这段代码会出现两个问题:一,先请看for语句下的
Java code
out.println(i+"<br>");    out.println(bodyContain);    out.println(i+"<br>");


我为什么要输出两次i来夹着out.println(bodyContain);呢?因为我发现i在经过语句out.println(bodyContain);后改变了i,输出的时候是这样的

bodycontain
7
这种莫名其妙的现象只发生在当i=0的时候,以后的i正常,比如

bodycontain
8
out.println(bodyContain);怎么会改变i了呢??
我的第二个问题:大家应该看到我后面的分页处理了,我还是调用这个jsp,只不过通过currentPage来控制结果的输出,但是假设我现在的结果有25个,而每页显示13个,那么我还可以按下一页来输出后面的结果,但当我链接下一页的时候,tomcat会报错:
Java code
exception org.apache.jasper.JasperException    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)root cause java.lang.NullPointerException    org.apache.jsp.searchindex_jsp._jspService(searchindex_jsp.java:64)    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

请教达人,谢谢

[解决办法]
探讨
输出的i还是会在输出hits.doc(i).get("body").substring(0,1023)会被改变,我想是不是内存中i的地址被无意中被访问到了。

[解决办法]
主要原因:空指针!

热点排行