java - 如何从 servlet 运行套接字服务器/客户端以更好地访问项目代码和文件到 Tomcat 服务器?

标签 java tomcat servlets file-io intellij-idea

(请阅读更新 #3 以了解我现在的问题到底出在哪里) 我编写了一个自定义 SQL 程序,它从 GUI 客户端获取用户命令并将它们发送到服务器(包含数据库)以处理所有使用套接字的操作。

现在我正在尝试使用 apache tomcat(和 JSP)为这个数据库编写一个 web 客户端。我已经将所有 java 文件从套接字版本放到 src 中,我也已经学会了如何使用 JSP 文件,所以现在用户可以从网页登录,程序将检查登录信息,与以前的服务器/客户端非常相似,但在运行 tomcat 时没有套接字。

现在我已经制作了一个带有文本区域和提交按钮的页面,单击提交按钮后将运行下面的 servlet 代码:

@WebServlet("/change")
public class SQLCommandSender extends HttpServlet {

    DataStorage ds = new DataStorage();
    QueryParser parser = new QueryParser();
    Query q;
    QueryResult res;
    String textAreaValue;

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        try {
            textAreaValue = request.getParameter("inConsole");
            q = parser.parse(textAreaValue);
            res = ds.execute(q);
            System.out.println(res.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

现在这就是问题所在;当我从 textarea 提交创建表命令时,命令处理到达一个点,将为新表创建一个新的 txt 文件:

  File tablez = new File("/Users/Sam/Documents/IntelliJ Projects/Login Database/C/DB/Tables/" + table.getName() + ".txt");

根据我从调试中发现的情况,当我从我的服务器套接字代码运行完全相同的创建命令时。这条线运行没有任何问题,并且创建表没有任何错误,但是当我从 tomcat 运行命令时;上面一行从上到下抛出以下异常:

java.io.IOException: No such file or directory
java.io.FileNotFoundException: null/cat1$was.txt (No such file or directory)
java.lang.NullPointerException

为什么会发生这样的事情?

我要强调的是,这两个程序都在访问同一个文件中的同一行代码。接收原始命令字符串并返回日志的代码块是上面 doPost 方法的 try 部分中的行。和相同的行代码在套接字版本中用于执行命令。

更新:Here是完整的堆栈跟踪

更新 2:我找到了 this问题看起来有点像我的问题,但我仍然无法正确理解它可能会帮助其他人有一些见解

更新 3:根据最新信息,我的问题可能源于 tomcat 服务器无法像套接字服务器/客户端操作文件那样访问文件。所以现在我正在尝试通过 Servlet 从程序的前一阶段运行套接字服务器/客户端。所以如果你能指导我如何使用 servlet 中的代码运行服务器/客户端(之前通过右键单击手动完成并单击之前的运行按钮)。在我解决并看到您的答案后,我将编辑问题以匹配新的详细信息。

附注我正在使用 Intellij,而 tomcat 以 Java EE Web 应用程序的形式与 Intellij 的插件一起运行。 我还检查了目录是否正确。正如我所说,确切的行适用于以前的服务器/客户端。

最佳答案

Tomcat 服务器抛出异常运行与 Socket 服务器正确运行相同的行,因为它不像 Socket 服务器/客户端那样直接访问 src 文件夹中的文件。

我解决了这个问题,方法是在 servlet 中创建一个套接字客户端,在数据库中创建一个套接字服务器,并由该客户端发送命令,而不是编写 servlet 代码,就像问题中直接使服务器运行数据库代码而无需任何代码像 socket 服务器这样的调解器会因为 tomcat 的访问受限而产生问题。

关于java - 如何从 servlet 运行套接字服务器/客户端以更好地访问项目代码和文件到 Tomcat 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31526949/

相关文章:

java - Eclipse 无法删除 lib.jar

java - 随着项目的增加,连接数增加

java - 在 java.library.path 上找不到基于 APR 的 Apache Tomcat Native 库,它允许在生产环境中实现最佳性能

java - 如何使用 NameValuePair 将数组值发送到 servlet?

java - 在 JTextArea 中添加边距?

java - .cancel() 之后重新启动计时器

jsf - 从 Servlet 访问 JSF ViewScoped 托管 bean

eclipse - 在 Eclipse EE 中为我的 servlet 设置 POI(在 Mac 上)

java - For Loop 遍历数组中的 JSON 对象

java - Apache httpd 和 Tomcat 如何协同工作?