Я хочу написать строку со своей страницы jsp и сохранить ее в сервлете. и если пользователи снова вводят ту же строку, сервлет считывает эту строку из текстового файла, если он существует, он сообщает, что строка уже сохранена, и если ее нет, он записывает эту строку в текстовый файл.

Вот мой код jsp, где я получаю строку под названием «начальная цена предложения».

       <%@page contentType="text/html" pageEncoding="UTF-8"%>
       <!DOCTYPE html>
       <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
            <h1>Hello World!</h1>
            <form action="mona.java" method="POST">
                Name:<input type="text" name="Name"><br>
                Email:<input type="text" name="Email"><br>
                Item Name:<input type="text" name="Item Name"><br>
                Item Description:<input type="text" name="Item Description"><br>
                Starting Bid Price:<input type="text" name="Starting bid Price"><br>
                <input type="submit" value="submit">
            </form>
        </body>
        </html>

Вот мой код сервлета.

import java.io.IOException;
import java.io.PrintWriter;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    String s1 = request.getParameter("Name");
    String s2 = request.getParameter("Email");
    String s3 = request.getParameter("Item Name");
    String s4 = request.getParameter("Item Description");
    String s5 = request.getParameter("Starting bid Price");

    try{

        File file = new File("c:/example/filedata.txt");
        FileReader fileReader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
                    String temp = bufferedReader.readLine();
        while (temp != null) {
        if(s5.equals(temp)) 
                    {
                    out.println("file already exist");
        //fileReader.close();
                    }
                    else 
                    {
                    PrintWriter fileWriter = new PrintWriter(new    
       FileOutputStream("c:/example/filedata.txt",true));  
                    fileWriter.println( s5 );
                    out.println("file saved");
                     fileWriter.close(); 
                            }
                    fileReader.close();
                    }
                     }  
    catch(FileNotFoundException fnfe) {    

  }  
  finally{  


      }  

}
1
Jawad Rauf 22 Дек 2013 в 15:35

2 ответа

Лучший ответ

Ваш вопрос немного неясен, но, если я хорошо понимаю, вам нужно только заставить этот фрагмент кода работать.

Ну, первая проблема

String temp = bufferedReader.readLine();
while (temp != null) {

Ваш код читает только первую строку из файла, и если она не равна нулю, вы бесконечно обрабатываете код в цикле while.

Должно получиться примерно так:

String temp = null;
while ((temp = bufferedReader.readLine()) != null) {
   // do your stuff here.

Другая возможная проблема:

out.println("file already exist");

Если это должно напечатать текст на консоли, он должен быть

System.out.println("file already exist");

Предложения: при обработке ресурсов, таких как File, вы должны закрыть потоки / читатели в блоке finally, потому что, если исключение возникает до закрытия ресурса, ресурс остается открытым.

И одно мнение в конце. Лично я бы не стал помещать обработку файлов в сервлет, ее нужно поместить в какой-то класс бизнес-логики. Затем я бы вызвал из первого метода сервлета, чтобы проверить, содержит ли файл определенную строку, а если нет, я бы вызвал другой метод, который добавит новую строку в существующий файл.

Если вам нужно что-то еще, не упомянутое в моем ответе, укажите еще немного. Надеюсь, это поможет.

Изменить Еще одну вещь я заметил. Когда вы найдете совпадение в своем файле, вы должны завершить цикл while (return или break) или, что еще лучше, определить логическую переменную как false перед циклом, если вы найдете совпадение в файле, установите для него значение true и прервите цикл. После завершения цикла while проверьте, истинна ли переменная, если нет, добавьте свою строку в файл (не в цикле while).

Edit2 Да, это проблема, о которой я говорил выше.

String temp = bufferedReader.readLine();
while (temp != null) {

Если первая строка файла не нулевая, вы будете обрабатывать цикл бесконечно.

Немного изменив ваш код, я бы предложил следующее:

 boolean found = false;
 File file = new File("c:/example/filedata.txt");
 FileReader fileReader = new FileReader(file);
 BufferedReader bufferedReader = new BufferedReader(fileReader);
 while ((temp = bufferedReader.readLine()) != null) {
   if(s5.equals(temp)) {
     System.out.println("file already exist");
     found = true;
     break;
   }
 }
 if (!found){
    PrintWriter fileWriter = new PrintWriter(new    
    FileOutputStream("c:/example/filedata.txt",true));  
    fileWriter.println( s5 );
    System.out.println("file saved");
 }
2
Jiri Kusa 22 Дек 2013 в 13:16

Использовать

HttpSession session= request.getSession();
session.setAttribute ("name", name);

Для сохранения данных в сеансе и:

(String)session.getAttribute ("name");

Чтобы вернуть его

0
Alaychem goes to Codidact 22 Дек 2013 в 11:51