Я хочу написать строку со своей страницы 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{
}
}
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");
}
Использовать
HttpSession session= request.getSession();
session.setAttribute ("name", name);
Для сохранения данных в сеансе и:
(String)session.getAttribute ("name");
Чтобы вернуть его
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].