繁体   English   中英

如何使JSP页面扩展抽象HttpServlet

[英]How to make JSP page extend abstract HttpServlet

我正在开发一个可以处理数据库中多个表的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页面? 或者是否有其他原因导致我收到此错误?

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

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

这会实现你的目标吗?

我喜欢servlet和JSP Web应用程序的基本组合

  1. 业务代码(包括数据库访问)位于servlet(或servlet调用的业务层)中。
  2. JSP专门用于呈现数据和检索用户输入。

如果您有一个resultSet并想要呈现它,请将必须呈现的信息加载到Collection(我喜欢List)并将其设置在适当的范围内(会话,页面,请求,很可能不是应用程序)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM