我想从我的jsp页面写一个字符串并将其存储在servlet中。如果用户再次输入相同的字符串,servlet会从文本文件中读取该字符串(如果存在),它会告诉字符串已经存储,如果不存在,则将该字符串写入文本文件中。
这是我的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>
这是我的servlet代码。
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{
}
}
答案 0 :(得分:2)
你的问题有点不清楚,但如果我理解得很好,你只需要让这段代码工作。
嗯,第一个问题是
String temp = bufferedReader.readLine();
while (temp != null) {
您的代码只读取文件的第一行,如果它不为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块中关闭流/读取器,因为如果在资源关闭之前发生异常,则资源仍然打开。
最后有一个意见。我个人不会将文件处理放在servlet中,它应该放在一些业务逻辑类中。然后我会从servlet第一个方法调用来测试,如果文件包含特定字符串,如果没有,我会调用另一个方法,它会将新行附加到现有文件。
如果您需要我的答案中未涵盖的其他内容,请指明一点。 希望它有所帮助。
修改强> 还有一点我注意到了。当你在你的文件中找到匹配时,你应该终止while循环(返回或中断),或者甚至更好,在循环之前将boolean变量定义为false,如果你在文件中找到你的匹配,将它设置为true并断开循环。 while循环结束后,测试变量是否为真,如果不是,则将行追加到文件中(不在while循环中)。
<强> EDIT2 强> 是的,这是我上面提到的问题。
String temp = bufferedReader.readLine();
while (temp != null) {
如果第一行文件不为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");
}
答案 1 :(得分:0)
使用
HttpSession session= request.getSession();
session.setAttribute ("name", name);
为了在会话中保存数据,并且:
(String)session.getAttribute ("name");
将其取回