簡體   English   中英

如何從Servlet運行套接字服務器/客戶端,以便更好地訪問項目代碼和文件,從而更好地訪問Tomcat服務器?

[英]How to run socket server/client from a servlet to give better access on project code and files to Tomcat Server?

(請閱讀更新#3,以了解我現在的問題到底在哪里)我編寫了一個自定義SQL程序,該程序從GUI客戶端獲取用戶命令,並將其發送到服務器(包含數據庫)以使用Socket處理所有命令。

現在我正在嘗試使用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提交create table命令時,命令處理達到了為新表創建新txt文件的地步:

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

從調試中發現,當我從服務器套接字代碼運行完全相同的create命令時。 這行運行沒有問題,並且創建了表也沒有任何錯誤,但是當我從tomcat運行命令時; 上面的行從上到下拋出以下異常:

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

為什么會發生這樣的事情?

我要強調的是,這兩個程序都在同一文件中訪問同一行代碼。接收原始命令String並返回日志的代碼塊是上述doPost方法的try部分中的行。在套接字版本中使用以執行命令。

更新: 是完整的堆棧跟蹤

UPDATE2:我發現這個問題看起來有點像我的問題,但是我仍然無法正確理解它,這可能有助於其他人獲得一些見解

更新3:從最新的信息,我有問題可能是由於tomcat服務器無法以套接字服務器/客戶端可以操縱文件的方式訪問文件。 因此,現在我正在嘗試使用Servlet從程序的上一階段運行套接字服務器/客戶端。因此,如果您可以指導我如何使用Servlet中的代碼運行服務器/客戶端(之前通過右鍵單擊手動完成)然后點擊運行按鈕)。 解決並查看您的答案后,我將編輯問題以匹配新的詳細信息。

ps我正在使用Intellij,而tomcat是通過Intellij的插件以Java EE Web應用程序的形式運行的。 我也檢查過了,目錄是正確的。正如我所說,確切的行適用於以前的服務器/客戶端。

Tomcat Server引發了一個異常,因為它與Socket Server / Client沒有相同的直接訪問src文件夾中文件的權限,因此它與Socket Server正常運行在同一行。

我通過在servlet中創建套接字客戶端和在數據庫中創建套接字服務器並由該客戶端發送命令來解決此問題,而不是編寫servlet代碼(例如直接使服務器運行數據庫代碼而無需套接字等任何中介程序的問題)出現問題的服務器為tomcat,但訪問受到限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM