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

标签 java jsp jakarta-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。

最佳答案

您在问候行中使用了 out,在前一行中使用了 response.getWriter()。无需深入研究,我想知道当您调用 getWriter 时它是否返回另一个 PrintStream 对象。尝试传递出去,以确保它使用相同的对象写入响应流。

也就是改变这一行:

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");

关于java - JSP 函数输出在错误的位置?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22409324/

相关文章:

java - 嵌入式 GlassFish 忽略 Maven 测试资源

java - 仅当新属性大于现有属性时 DynamoDb 更新项目

java - 如何为 request.getRequestDispatcher() 指定 .JSP 文件的路径?

java - 设置 pdf 内容页的标题

java - 页眉和页脚的良好 JSP 代码结构

hibernate - JDBC 无法获得托管连接

java - 读取 .csv 文件比读取压缩为 .gz 的同一文件更快

java - 如何更改 TextView 在屏幕上的位置以及如何更改其文本?

java - 使用 Commons-Email 发送电子邮件到 Gmail

java - JSF2 和 PrettyFaces...如何获取原始 URL 或查询字符串?