Java 如何使JSP页面扩展抽象HttpServlet
我正在开发一个Web应用程序,它可以处理数据库中的多个表。设计要求指定每个表都有自己的页面可供使用。在大多数情况下,服务器端代码的大部分在所有页面上都是相同的,页面特定的内容主要处理特定表的sql(顺便说一句,它们都有不同的结构) 因此,我认为谨慎的做法是组织代码,使所有常用方法都位于一个共享位置,只在JSP页面上留下唯一的实现 我试图创建的结构是有一个抽象超类,我们称之为Java 如何使JSP页面扩展抽象HttpServlet,java,jsp,servlets,abstract,extends,Java,Jsp,Servlets,Abstract,Extends,我正在开发一个Web应用程序,它可以处理数据库中的多个表。设计要求指定每个表都有自己的页面可供使用。在大多数情况下,服务器端代码的大部分在所有页面上都是相同的,页面特定的内容主要处理特定表的sql(顺便说一句,它们都有不同的结构) 因此,我认为谨慎的做法是组织代码,使所有常用方法都位于一个共享位置,只在JSP页面上留下唯一的实现 我试图创建的结构是有一个抽象超类,我们称之为MyServlet,它扩展了HttpServlet。我的每个JSP页面都扩展了这个超类 然而,当我去测试这一点时,我的页面现
MyServlet
,它扩展了HttpServlet
。我的每个JSP页面都扩展了这个超类
然而,当我去测试这一点时,我的页面现在无法加载http405methodnotallowed
错误
出于安全/业务原因,我不能简单地将代码复制粘贴到这里,但我可以发布一个通用结构。我的Servlet类如下所示:
public abstract class MyServlet extends HttpServlet
{
public void someMethod()
{
abstractMethod();
}
protected abstract void abstractMethod();
}
<%@ extends="package.MyServlet" %>
<%!
public void abstractMethod()
{
someCode;
}
%>
<% someMethod() %>
我的jsp如下所示:
public abstract class MyServlet extends HttpServlet
{
public void someMethod()
{
abstractMethod();
}
protected abstract void abstractMethod();
}
<%@ 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应用程序的这种基本组织
如果您有一个resultSet并希望显示它,请将必须显示的信息加载到集合(我喜欢列表)中,并将其设置在适当的范围内(会话、页面、请求,很可能不是应用程序)。停止将java代码放入jsp文件中。这在1997年很好,但在2005年(以及以后)却很糟糕。否则我该怎么做呢?我尝试从单独的servlet使用转发,但后来我遇到了两种情况:一是在我实际使用结果集之前关闭结果集(如果我可以直接从结果集写入页面,而不必首先将其转换为xml等其他格式,这将是一个很大的帮助),或者无法正确关闭连接。有很多方法可以做到这一点,而无需将java代码写入jsp。这实际上是我最初使用帮助器类中的静态方法完成的,效果很好。只是如果我的理论成立,它可以在我所有的页面上从Scriptlet中删除大量代码。Alternativley,在servlet中完成所有工作,使用servlet在请求中设置属性,并使用JSTL访问它们