Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使JSP页面扩展抽象HttpServlet_Java_Jsp_Servlets_Abstract_Extends - Fatal编程技术网

Java 如何使JSP页面扩展抽象HttpServlet

Java 如何使JSP页面扩展抽象HttpServlet,java,jsp,servlets,abstract,extends,Java,Jsp,Servlets,Abstract,Extends,我正在开发一个Web应用程序,它可以处理数据库中的多个表。设计要求指定每个表都有自己的页面可供使用。在大多数情况下,服务器端代码的大部分在所有页面上都是相同的,页面特定的内容主要处理特定表的sql(顺便说一句,它们都有不同的结构) 因此,我认为谨慎的做法是组织代码,使所有常用方法都位于一个共享位置,只在JSP页面上留下唯一的实现 我试图创建的结构是有一个抽象超类,我们称之为MyServlet,它扩展了HttpServlet。我的每个JSP页面都扩展了这个超类 然而,当我去测试这一点时,我的页面现

我正在开发一个Web应用程序,它可以处理数据库中的多个表。设计要求指定每个表都有自己的页面可供使用。在大多数情况下,服务器端代码的大部分在所有页面上都是相同的,页面特定的内容主要处理特定表的sql(顺便说一句,它们都有不同的结构)

因此,我认为谨慎的做法是组织代码,使所有常用方法都位于一个共享位置,只在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应用程序的这种基本组织

  • 业务代码(包括数据库访问)位于servlet(或servlet调用的业务层)中
  • JSP专门用于表示数据和检索用户输入

  • 如果您有一个resultSet并希望显示它,请将必须显示的信息加载到集合(我喜欢列表)中,并将其设置在适当的范围内(会话、页面、请求,很可能不是应用程序)。

    停止将java代码放入jsp文件中。这在1997年很好,但在2005年(以及以后)却很糟糕。否则我该怎么做呢?我尝试从单独的servlet使用转发,但后来我遇到了两种情况:一是在我实际使用结果集之前关闭结果集(如果我可以直接从结果集写入页面,而不必首先将其转换为xml等其他格式,这将是一个很大的帮助),或者无法正确关闭连接。有很多方法可以做到这一点,而无需将java代码写入jsp。这实际上是我最初使用帮助器类中的静态方法完成的,效果很好。只是如果我的理论成立,它可以在我所有的页面上从Scriptlet中删除大量代码。Alternativley,在servlet中完成所有工作,使用servlet在请求中设置属性,并使用JSTL访问它们