簡體   English   中英

如何將這個servlet.java分解為更多類?

[英]How can I break down this servlet.java into more classes?

我正在使用運行Jetty的GAE和Java。 我在一個整體Java文件中有一個工作的servlet。 我想開始將其分解為不同的類。

在這一點上,我真的只想將大多數代碼放入另一個類中,並根據輸入的不同類生成不同網頁的想法來調用它。

現在,在/Servlet.java中,我有:

package webapp
        public class servlet extends HttpServlet {
           public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
           ...
           try {
               temp.process(root, resp.getWriter());
           } catch (TemplateException e) {
               throw new IOException("Error while processing Freemarker template", e);
           } 
        }

當我嘗試使用以下方法創建新類時:

public classA {

public void generatePageA() {

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        ...
        resp.setContentType("text/html; charset=UTF-8");

        try {
        temp.process(root, resp.getWriter());
    } catch (TemplateException e) {
        throw new IOException("Error while processing Freemarker template", e);
    } 

    }


}

然后回到servlet.java中,我嘗試使用

ClassA.doGet();

但是我在標記后請求標識符時遇到語法錯誤。

用於調用ClassA.doGet(); 您需要將其設置為靜態

public classA {

    public static void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        resp.setContentType("text/html; charset=UTF-8");
        try {
            temp.process(root, resp.getWriter());
        } catch (TemplateException e) {
           throw new IOException("Error while processing Freemarker template", e);
        } 
    }
}

您還必須傳遞如下參數:

package webapp
public class servlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        ClassA.doGet(req,resp);
    }
}

如果您需要更多信息來發布完整的堆棧跟蹤,那么我們可以提供更好的支持

看起來您的doGet()方法在您的generatePageA()方法結束之前開始。 而且ClassA.doGet()是對方法的靜態引用。 該方法要么需要是靜態的,要么需要像這樣實例化類對象

new ClassA().doGet();

在像eclipse這樣的IDE中進行操作將實時向您顯示這些錯誤,並且通常會提供有關修復方法的建議。 希望能有所幫助

暫無
暫無

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

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