【发布时间】:2017-02-24 01:56:13
【问题描述】:
我已经扩展了javax.http.servlet.HttpServlet 类以向该类添加一些方法供我使用。我的应用程序的所有 servlet 都将扩展这个新类。这个类的基本版本如下:
public class MyCustomServletClass extends HttpServlet{
protected void startWork(){
// do some stuff
}
protected void finishWork(){
// do more stuff
}
}
这两个方法将在每个 HttpServlet 请求方法(例如 doGet、doPost 等)的开始/结束处执行。这是一个简单的 servlet 示例,我可以使用我的自定义 MyCustomServletClass 创建它:
public class SomeServlet extends MyCustomServletClass{
protected void doGet(HttpServletRequest request, HttpServletResponse response){
this.startWork();
// some servlet specific work here
this.finishWork();
}
}
所以我的问题是这样的:Java 中有什么方法可以让 doGet 方法在方法的开头/结尾自动运行这两个方法?
我正在尝试找到一种好方法,不必在我拥有的每个 servlet 中的每个 doGet、doPost 等中手动调用 startWork() 和 endWork()。我希望能够扩展 MyCustomServletClass,实现 doGet,并在幕后开始时调用 startWork(),并在幕后结束时调用 endWork()。
理想情况下,在我扩展 MyCustomServletClass 的 servlet 中,doGet 方法应该是:
protected void doGet(HttpServletRequest request, HttpServletResponse response){
// doGet specific work here
}
无需每次都手动调用我的两个父方法。
我想我可以在构造函数中执行 startWork(),但我认为我对 servlet 的生命周期没有足够的控制权来在析构函数中执行 endWork()。
有没有办法让这两个方法在 doGet 的开始/结束时自动和在幕后执行?
【问题讨论】:
-
想想在
startWork和finishWork之间调用一个抽象函数doWork。
标签: java class servlets inheritance jakarta-ee