Le code fonctionnait bien avant que j'aie inclus le code de lecture d'un fichier texte dans mon programme servlet. En fait, j'ai besoin de lire le fichier texte et en utilisant la correspondance de modèle regex doivent rechercher le motif dans le fichier texte. J'ai essayé beaucoup mais je ne peux pas comprendre. Chaque fois que je le lance en utilisant localhost, il entre directement dans catch et avant que je mette try-catch il montre error:500 file not found "database.txt"
alors que database.txt
est dans le même endroit que mon programme de servlet webapps/myprogram/database.txt
. J'utilise tomcat8. S'il vous plaît aidez-moi pourquoi il ne reçoit pas le fichier et entrer dans la prise ..Lire le fichier texte dans le servlet
Voici mon programme de servlet:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JOptionPane;
import java.io.*;
/**
* @author hp
*/
@WebServlet(urlPatterns = {"/servlet1"})
public class servlet1 extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String txt = request.getParameter("query");
try {
FileInputStream fstream = new FileInputStream("database.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
if (txt.matches("Who is the(.*)")) {
String re1 = ".*?";
String re2 = "(?:[a-z][a-z]+)";
String re3 = ".*?";
String re4 = "(?:[a-z][a-z]+)";
String re5 = ".*?";
String re6 = "(?:[a-z][a-z]+)";
String re7 = ".*?";
String re8 = "((?:[a-z][a-z]+))";
String re9 = ".*?";
String re10 = "(?:[a-z][a-z]+)";
String re11 = ".*?";
String re12 = "((?:[a-z][a-z]+))";
Pattern p =
Pattern.compile(re1 + re2 + re3 + re4 + re5 + re6 + re7 + re8 + re9 + re10 + re11 + re12, Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher m = p.matcher(txt);
if (m.find()) {
String word1 = m.group(1);
String word2 = m.group(2);
String z = word2.toString() + "&&" + word1.toString() + "&&" + "name.*" + "\n";
while ((strLine = br.readLine()) != null) {
if (Pattern.matches(z, strLine)) {
Pattern pattern = Pattern.compile("'(.*?)'");
Matcher matcher = pattern.matcher(strLine);
if (matcher.find()) {
String a = matcher.group(1);
request.setAttribute("a", a);
request.getRequestDispatcher("/output.jsp").forward(request, response);
}
}
}
}
} else {
String z = "Sorry......Invalid query !!!";
request.setAttribute("z", z);
request.getRequestDispatcher("/output.jsp").forward(request, response);
}
} catch (Exception e) {
throw new ServletException(e);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//processRequest(request, response);
doGet(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
Je pense que la plupart des gens ici apprécieraient que vous formiez votre code pour une meilleure lisibilité et que vous essayiez de vous concentrer sur le problème. –
getRealPath() tel qu'utilisé dans la réponse ci-dessous est ** mauvaise pratique **. Voir aussi http://stackoverflow.com/q/12160639 Utilisez juste 'getResourceAsStream()' exactement sur le même chemin. – BalusC