【发布时间】:2019-12-27 03:38:38
【问题描述】:
我正在尝试编写一个 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 文件发送给用户。我实际上已经在一个小程序中完成了所有这些业务逻辑(没有帖子),但我无法在 servlet 中执行简单的文件写入。
在我看来,servlet 和 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>
【问题讨论】:
-
您需要记录异常,这肯定发生了,您需要查看服务器日志才能找到它。
-
如何在这种情况下记录异常?我已经有 System.err.println("Error: " + e.getMessage());在 Java 代码中,但没有打印任何内容(到 IDE 或我可以找到的任何日志文件)。 System.out.println() 在 servlet 中也不起作用。我在 IDE(JustReact5 运行,Glassfish 服务器)底部没有看到任何错误或异常列表。那里没有任何陈述表明错误/异常。我在 domain1 中找到了一个 glassfish 日志文件,但它也没有错误/异常。
标签: java servlets netbeans glassfish-3