JSP函数输出错误的位置?为什么?

时间:2014-03-14 15:29:31

标签: java jsp java-ee tomcat tomcat7

我有一个奇怪的问题..

也就是说,在我的程序中,在body标签之后调用了一个函数。但输出出现在html标签!!!以上的意外位置。

程序:JSP页面[服务器]

<body>
<div>
    <%
         if (request.getParameter ("query") != null)
         {
         String query2 = request.getParameter ("query");
         String srch2 = request.getParameter("searchby");
        SimpleSuggestionService smp =new SimpleSuggestionService ();

         if (!srch2.equals("No")) 
         {
       //below the mentioned out function call
       smp.Suggest(response.getWriter(), query2,config.getServletContext().getRealPath("/")+"WEB-INF/wordlist/spin/",config.getServletContext().getRealPath("/")+"WEB-INF/wordlist/whole_2_2.txt");
          out.println ("<h1>hello</h1>");
}      
         }

         else out.println("suggestions :");
         %>
 </div>
<div id="templatemo_body_wrapper">
<div id="templatemo_wrapper">

在上面的程序中,函数smp.Suggest(...)的输出必须打印在body标签内。

但它打印在HTML标签上方!!

输出页面[意外位置]

<div style="height: 180px; overflow: auto; position: absolute; top: 622px; left: 333px; z-index: 10; width: 476px;" > Did you mean:<br>
<a href=searchpatent.jsp?query=methods&searchby=Title+%2F+Name&ext=none > methods</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methody&searchby=Title+%2F+Name&ext=none > methody</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=method's&searchby=Title+%2F+Name&ext=none > method's</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methodic&searchby=Title+%2F+Name&ext=none > methodic</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methodics&searchby=Title+%2F+Name&ext=none > methodics</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methodios&searchby=Title+%2F+Name&ext=none > methodios</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methodise&searchby=Title+%2F+Name&ext=none > methodise</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methodism&searchby=Title+%2F+Name&ext=none > methodism</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methodist&searchby=Title+%2F+Name&ext=none > methodist</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methodize&searchby=Title+%2F+Name&ext=none > methodize</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methods&searchby=Title+%2F+Name&ext=none > methods</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methody&searchby=Title+%2F+Name&ext=none > methody</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methol&searchby=Title+%2F+Name&ext=none > methol</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=method's&searchby=Title+%2F+Name&ext=none > method's</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methodic&searchby=Title+%2F+Name&ext=none > methodic</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methols&searchby=Title+%2F+Name&ext=none > methols</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=poethod&searchby=Title+%2F+Name&ext=none > poethod</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methodics&searchby=Title+%2F+Name&ext=none > methodics</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methodios&searchby=Title+%2F+Name&ext=none > methodios</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methodise&searchby=Title+%2F+Name&ext=none > methodise</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methol&searchby=Title+%2F+Name&ext=none > methol</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methods&searchby=Title+%2F+Name&ext=none > methods</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methody&searchby=Title+%2F+Name&ext=none > methody</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methols&searchby=Title+%2F+Name&ext=none > methols</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=method's&searchby=Title+%2F+Name&ext=none > method's</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methodic&searchby=Title+%2F+Name&ext=none > methodic</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methomyl&searchby=Title+%2F+Name&ext=none > methomyl</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methodics&searchby=Title+%2F+Name&ext=none > methodics</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methodios&searchby=Title+%2F+Name&ext=none > methodios</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href=searchpatent.jsp?query=methodise&searchby=Title+%2F+Name&ext=none > methodise</a>&nbsp;&nbsp;|&nbsp;&nbsp;</div>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

身体标签[输出必须来的地方]

<body>
    <h1>hello</h1>

<div id="templatemo_body_wrapper">
<div id="templatemo_wrapper">

SimpleSuggestionService类的代码[谁的函数生成输出]:

package patent;
import java.io.DataInputStream;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.search.spell.JaroWinklerDistance;
import org.apache.lucene.search.spell.LevensteinDistance;
import org.apache.lucene.search.spell.NGramDistance;
import org.apache.lucene.search.spell.PlainTextDictionary;
import org.apache.lucene.search.spell.SpellChecker;
import org.apache.lucene.search.spell.StringDistance;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;

public class SimpleSuggestionService {

    public SimpleSuggestionService ()
    {

    }

   public void Suggest (PrintWriter out,String st, String index,String fl) throws IOException {

        Scanner in = new Scanner (new DataInputStream(System.in));


        File dir = new File(index);

        // Directory directory = new RAMDirectory();

        Directory directory = FSDirectory.open(dir);

        StringDistance sd = new JaroWinklerDistance ();
        StringDistance sd2 = new LevensteinDistance ();
        StringDistance sd3 = new NGramDistance ();
          System.out.println("Enter Word: ");
        String w= st;
        out.print("<div style=\"height: 180px; overflow: auto; position: absolute; top: 622px; left: 333px; z-index: 10; width: 476px;\" > ");
      out.println("Did you mean:<br>"); 
        checkspell( directory , sd,  w,out,fl);
        checkspell(directory , sd2,w ,out ,fl);   
        checkspell(directory , sd3  ,w,out,fl);
        out.println("</div>");
   }




    public static void checkspell(Directory dir , StringDistance sd,String wrd,PrintWriter out,String fl) throws IOException {



        SpellChecker spellChecker = new SpellChecker(dir);
        spellChecker.setStringDistance(sd); 


         long startTime = System.currentTimeMillis();

        spellChecker.indexDictionary(
             new PlainTextDictionary(new File(fl)  ), new IndexWriterConfig(Version.LUCENE_46, new StandardAnalyzer(Version.LUCENE_46)).setOpenMode(OpenMode.CREATE_OR_APPEND),false   );


        long endTime = System.currentTimeMillis();

        System.out.println("Total indexing time: " + (endTime - startTime) );

        String wordForSuggestions = wrd;

        int suggestionsNumber = 10;
       System.out.println("\n"+spellChecker.getStringDistance().toString());



       startTime = System.currentTimeMillis();
       String[] suggestions = spellChecker.suggestSimilar(wordForSuggestions, suggestionsNumber);
       endTime = System.currentTimeMillis();
       System.out.println("Total searching time: " + (endTime - startTime) );

        if (suggestions!=null && suggestions.length>0) {

            for (String word : suggestions) {

                out.print("<a href=searchpatent.jsp?query="+word+"&searchby=Title+%2F+Name&ext=none > "+word+"</a>&nbsp;&nbsp;|&nbsp;&nbsp;");
                System.out.println(word+"<br>");


            }

            System.out.println();
        }
        else {
            System.out.println("No suggestions found for word:"+wordForSuggestions+"\n");
        }
    }




}

为什么会发生这种错误?

我使用Java 7在Windows 7中使用Tomcat 7.0.27。

1 个答案:

答案 0 :(得分:1)

您在hello行使用out,在上一行使用response.getWriter()。如果不深入研究这个问题,我想知道当你拨打PrintStream时它是否会返回另一个getWriter对象。尝试传递,以确保它使用相同的对象写入响应流。

即改变这一行:

smp.Suggest(response.getWriter(), query2,config.getServletContext().getRealPath("/")+"WEB-INF/wordlist/spin/",config.getServletContext().getRealPath("/")+"WEB-INF/wordlist/whole_2_2.txt");

到此:

smp.Suggest(out, query2,config.getServletContext().getRealPath("/")+"WEB-INF/wordlist/spin/",config.getServletContext().getRealPath("/")+"WEB-INF/wordlist/whole_2_2.txt");