我正在尝试编写一个Java servlet,该Java servlet会收到一个简单的帖子,并将内容写为文本文件。我正在Windows 10机器上使用Glassfish在NetBeans 8.2中进行开发。我可以通过Java applet编写文本文件,但是相同的文件编写代码在servlet中不起作用。我是NetBeans和Glassfish的新手。
我有做简单文章的html。我在NetBeans中生成了servlet的框架代码。我相信html会将帖子发布到正确的位置,因为它会启动由NetBeans自动创建的index.html文件。但是,没有文本文件被创建。我没有在Netbeans中看到错误消息,但我可能不知道在哪里查找。发布后,我偶尔会在/ build / web文件夹中看到一个名为gfv3ee6.dpf的空文件。我正在以管理员身份运行NetBeans和html。
附上我的html和当前的Java代码。我已经尝试过在Stackoverflow上讨论过的多种变体(不同的功能,不同的定义文件路径的方式),但是没有找到正确的组合。随函附上我尝试过的更简单的示例之一。一旦我克服了文件写入的障碍,我希望将来可以进行追加操作。
当最终将我的html和servlet部署到服务器时,我也将对最佳实践的任何建议表示赞赏。我的总体目标是使html成为一份较长的调查表,将响应发布到Java servlet,然后servlet对响应进行评分并将pdf文件发送给用户。我实际上已经在applet中完成了所有这些业务逻辑(没有发布),但是我无法在servlet中执行简单的文件写入。
在我看来,小服务程序和小程序写文件的方式不同,而我找不到正确的小程序代码。
我不认为这是一个问题,但是项目的名称是JustReact5,而类的名称是Just5React。
HTML
<form action="http://localhost:8080/JustReact5" method="post">
Your name:<br>
<input type="text" name="yourname" <br>
<input type="submit" value="Submit">
</form>
Java
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author joseph
*/
public class Just5React extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter pw = response.getWriter();
String yourname = request.getParameter("yourname");
try{
File file = new File("C:/temp/outputfile.txt");
FileWriter fstream = new FileWriter(file,true);
BufferedWriter out = new BufferedWriter(fstream);
out.write(yourname);
out.newLine();
out.close();
}
catch (Exception e){
System.err.println("Error: " + e.getMessage());
}
}
// NetBeans doGet, doPost, getServletInfo code
// omitted for brevity
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<servlet>
<servlet-name>Just5React</servlet-name>
<servlet-class>Just5React</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Just5React</servlet-name>
<url-pattern>/Just5React</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
请找到可能有用的代码。我已经使用Java 8来存储对文件的响应。
response.getWriter().append("Served at: ").append(request.getContextPath());
String emailID = request.getParameter("email");
String password = request.getParameter("psw");
String password_repeat = request.getParameter("psw-repeat");
String remember = request.getParameter("remember");
List<String> responseList = new ArrayList<>();
responseList.add(emailID);
responseList.add(password);
responseList.add(password_repeat);
responseList.add(remember);
System.out.println("Writing data : " + responseList);
writeResponseToFile(responseList);
private void writeResponseToFile(List<String> responseList) {
String filePath = "/Users/sunilchityala/Desktop/writeResponseToFile.txt";
try {
Files.write(Paths.get(filePath), responseList, StandardCharsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.APPEND);
} catch (IOException e) {
e.printStackTrace();
}