如何使JSP页面扩展抽象HttpServlet

时间:2014-10-23 14:30:38

标签: java jsp servlets abstract extends

我正在处理一个与数据库中的多个表一起使用的Web应用程序。设计要求指定每个表都有自己的页面可供使用。在大多数情况下,服务器端代码的很大一部分在所有页面中是相同的,页面特定的东西主要处理特定表的sql(并且它们都具有不同的结构,BTW)。

所以我认为组织代码是明智的,这样所有常用方法都在一个共享位置,只留下JSP页面上的唯一实现。

我试图创建的结构是有一个抽象的超类,我们称之为MyServlet,它扩展了HttpServlet。我的每个JSP页面都扩展了这个超类。

然而,当我去测试时,我的页面现在无法加载HTTP 405 Method not allowed错误。

出于安全/商业原因,我不能简单地复制和粘贴我的代码,但我可以发布一般结构。我的Servlet类看起来像这样:

public abstract class MyServlet extends HttpServlet
{
     public void someMethod()
     {
          abstractMethod();
     }

     protected abstract void abstractMethod();
}

我的jsp是这样的:

<%@ extends="package.MyServlet" %>
<%! 
     public void abstractMethod()
     {
          someCode;
     }
%>
<% someMethod() %>

我应该指出MyServlet没有实现doGet()doPost()。我假设JSP页面本身是HttpServlet的扩展,他们为这些方法提供了实现,但我也知道错误405的发生是因为至少doGet()不存在。

是否发生了错误,因为我没有实现doGet(),如果是这样,我如何实现它以使其适用于我的JSP页面?或者是否有其他原因导致我收到此错误?

2 个答案:

答案 0 :(得分:2)

你能在一些实用程序类中创建你的方法然后包含它,而不是扩展它吗?

<%@ page import="org.foo.HelperClass, org.foo.StaticHelper" %>
 <%! 
 HelperClass helper = new HelperClass();
 %>
 Helper Stuff: <%= helper.someMethod() %><br/>
 Static Stuff: <%= StaticHelper.someStaticMethod() %>

这会实现你的目标吗?

答案 1 :(得分:0)

我喜欢这种servlet和JSP Web应用程序的基本协议

  1. 业务代码(包括数据库访问)位于servlet(或servlet调用的业务层)中。
  2. JSP专门用于呈现数据和检索用户输入。
  3. 如果您有一个resultSet并想要呈现它,请将必须呈现的信息加载到Collection(我喜欢List)并将其设置在适当的范围内(会话,页面,请求,很可能不是应用程序)。 / p>