【问题标题】:Java servlet to write text file in Windows 10, NetBeans and Glassfish在 Windows 10、NetBeans 和 Glassfish 中编写文本文件的 Java servlet
【发布时间】: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


【解决方案1】:

请找到可能有帮助的代码。我使用 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();
    }

【讨论】:

  • 谢谢你,Sunil,这个代码对我不起作用。 response.getWriter().append("服务于:").append(request.getContextPath());, System.out.println() 和 e.printStackTrace();不要为我生成任何输出。
  • @jschreiner 请忽略该部分,因为这与您使用的应用程序服务器有关。我当前的配置不同。为了您的理解,我使用了 Apache Tomcat 9 Java 11.05 LTS 并在 Mac 上运行该应用程序。但是代码是通用的,它应该适用于大多数情况,只需更改 filePath 的参数。我希望这是有道理的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 2016-11-09
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
相关资源
最近更新 更多