在这里为行业的新手,我目前正在尝试开发一个处理不同形式的Web应用程序。在我开发Web应用程序的时间里,我注意到我正在为处理相似但不相同功能的不同servlet添加一种方法,现在知道某人可能在某个时候寻找/对系统进行更改,我想通过抽象类创建这些servlet的模板,因此添加新表单
时,系统代码保持一致 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
SampleMethodName(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
SampleMethodName(request,response);
}
private void SampleMethodName(HttpServletRequest request, HttpServletResponse response) throws IOException {/* do stuff */}
我想创建一个抽象类作为这些servlet的模板,但是我不能,因为Java Servlet已经扩展了一个抽象类
public class SampleClassName extends HttpServlet {
private static final long serialVersionUID = 1L;
我觉得我需要更改方法,但我想还是要问
让一个抽象类扩展另一个抽象类是没有问题的。因此,您的特殊课看起来像这样:
public abstract class AbstractSampleServlet extends HttpServlet {
protected final void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
sampleMethodName(request, response);
}
protected abstract void sampleMethodName(HttpServletRequest request, HttpServletResponse response) throws IOException;
}
就是这样。现在,使所有实施者直接扩展您的新基类,而不是直接扩展HttpServlet
。这里有一些其他注释:
-
doGet
应标记为final
,因此实施者不会偶然地覆盖它,从而绕过您的实现。 - 抽象方法必须是
public
或protected
,但不能是private
(如您的示例中)。 - 在Java中,具有方法名称以小写字符开头是常见的做法。