我正在处理一个与数据库中的多个表一起使用的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页面?或者是否有其他原因导致我收到此错误?
答案 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应用程序的基本协议
如果您有一个resultSet并想要呈现它,请将必须呈现的信息加载到Collection(我喜欢List)并将其设置在适当的范围内(会话,页面,请求,很可能不是应用程序)。 / p>