我有一个奇怪的问题..
也就是说,在我的程序中,在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> | <a href=searchpatent.jsp?query=methody&searchby=Title+%2F+Name&ext=none > methody</a> | <a href=searchpatent.jsp?query=method's&searchby=Title+%2F+Name&ext=none > method's</a> | <a href=searchpatent.jsp?query=methodic&searchby=Title+%2F+Name&ext=none > methodic</a> | <a href=searchpatent.jsp?query=methodics&searchby=Title+%2F+Name&ext=none > methodics</a> | <a href=searchpatent.jsp?query=methodios&searchby=Title+%2F+Name&ext=none > methodios</a> | <a href=searchpatent.jsp?query=methodise&searchby=Title+%2F+Name&ext=none > methodise</a> | <a href=searchpatent.jsp?query=methodism&searchby=Title+%2F+Name&ext=none > methodism</a> | <a href=searchpatent.jsp?query=methodist&searchby=Title+%2F+Name&ext=none > methodist</a> | <a href=searchpatent.jsp?query=methodize&searchby=Title+%2F+Name&ext=none > methodize</a> | <a href=searchpatent.jsp?query=methods&searchby=Title+%2F+Name&ext=none > methods</a> | <a href=searchpatent.jsp?query=methody&searchby=Title+%2F+Name&ext=none > methody</a> | <a href=searchpatent.jsp?query=methol&searchby=Title+%2F+Name&ext=none > methol</a> | <a href=searchpatent.jsp?query=method's&searchby=Title+%2F+Name&ext=none > method's</a> | <a href=searchpatent.jsp?query=methodic&searchby=Title+%2F+Name&ext=none > methodic</a> | <a href=searchpatent.jsp?query=methols&searchby=Title+%2F+Name&ext=none > methols</a> | <a href=searchpatent.jsp?query=poethod&searchby=Title+%2F+Name&ext=none > poethod</a> | <a href=searchpatent.jsp?query=methodics&searchby=Title+%2F+Name&ext=none > methodics</a> | <a href=searchpatent.jsp?query=methodios&searchby=Title+%2F+Name&ext=none > methodios</a> | <a href=searchpatent.jsp?query=methodise&searchby=Title+%2F+Name&ext=none > methodise</a> | <a href=searchpatent.jsp?query=methol&searchby=Title+%2F+Name&ext=none > methol</a> | <a href=searchpatent.jsp?query=methods&searchby=Title+%2F+Name&ext=none > methods</a> | <a href=searchpatent.jsp?query=methody&searchby=Title+%2F+Name&ext=none > methody</a> | <a href=searchpatent.jsp?query=methols&searchby=Title+%2F+Name&ext=none > methols</a> | <a href=searchpatent.jsp?query=method's&searchby=Title+%2F+Name&ext=none > method's</a> | <a href=searchpatent.jsp?query=methodic&searchby=Title+%2F+Name&ext=none > methodic</a> | <a href=searchpatent.jsp?query=methomyl&searchby=Title+%2F+Name&ext=none > methomyl</a> | <a href=searchpatent.jsp?query=methodics&searchby=Title+%2F+Name&ext=none > methodics</a> | <a href=searchpatent.jsp?query=methodios&searchby=Title+%2F+Name&ext=none > methodios</a> | <a href=searchpatent.jsp?query=methodise&searchby=Title+%2F+Name&ext=none > methodise</a> | </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> | ");
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。
答案 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");