我怎样才能将这个servlet.java分解为更多的类?

时间:2014-03-10 21:10:07

标签: java class servlets

我正在使用运行Jetty和Java的GAE。我在一个单片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中的函数
ClassA.doGet();

但是我在令牌之后得到语法错误请求标识符。

2 个答案:

答案 0 :(得分:1)

用于调用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);
    }
}

如果您希望在完整堆栈跟踪后发布更多信息,那么我们可以提供更好的支持

答案 1 :(得分:1)

看起来你的doGet()方法在你的generatePageA()方法结束之前就开始了。 ClassA.doGet()是对方法的静态引用。该方法要么是静态的,要么需要像这样实例化类对象

new ClassA().doGet();

在像eclipse这样的IDE中工作会实时显示这些错误,并且它通常会提供有关如何修复的建议。 希望有所帮助