编写自定义GenericServlet
2024-08-29 12:51:55
用途:
编写自定义GenericServlet类后,子类只需继承这个类,就可以直接使用ServletConfig的config对象和ServletConfig接口的方法,而不需要init()方法获取config对象,也不需要通过config对象调用ServletConfig接口的方法,直接通过方法名()就可以调用
具体步骤如下:
1、新建类MyGenericServlet,实现Servlet,ServletConfig接口
2、重写父类的相关方法
3、将service()方法定义为抽象(abstract)方法,将类定义为抽象类,以便在子类予以service()方法新的实现
4、定义MyGenericServlet的成员变量protected ServletConfig config,并通过初始化方法init(ServletConfig config)赋值this.config=config;
5、重载init()的无参方法,当子类需要在初始化时执行某些操作时调用,并通过init(ServletConfig config)方法调用init()无参方法
具体代码如下:
public abstract class MyGenericServlet implements Servlet,ServletConfig { protected ServletConfig config; //定义成员变量
@Override
public void init(ServletConfig config) throws ServletException {
this.config=config; //config赋值
init();
} public void init(){ //为了子类重写,创建无参方法init() } @Override
public ServletConfig getServletConfig() {
return config; //返回config
} @Override
public abstract void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException ; //抽象方法 @Override
public String getServletInfo() {
return null;
} @Override
public void destroy() { } @Override
public String getServletName() {
return config.getServletName(); //返回config.getServletName()的结果,子类直接调用该方法相当于调用config.getServletName()
} @Override
public ServletContext getServletContext() {
return config.getServletContext();
} @Override
public String getInitParameter(String name) {
return config.getInitParameter(name);
} @Override
public Enumeration<String> getInitParameterNames() {
return config.getInitParameterNames();
}
}
子类只需继承GenericServlet类,就可以通过方法名直接调用方法
public class MyServlet1 extends MyGenericServlet { @Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
String name = getServletName(); //直接调用,不需要config.getServletName()
System.out.println(name);
} }
最新文章
- intellij idea 15 修改基础配置加载路径
- window frida安装
- embed chrome 无法播放问题
- LINQ系列:Linq to Object联接操作符
- mysql 简单优化方法
- 关于HTML+CSS设置图片居中的方法
- Pig Run on Hadoop, V1.0
- 使用Java辅助类(CountDownLatch、CyclicBarrier、Semaphore)并发编程
- Opencv各个版本的万能头文件
- Spring.Net+Nhibernate+Asp.Net Mvc 框架
- [Android开发常见问题-12] Android开发中debug.keystore如何使用。
- CocosCreator检测动作执行完毕的方法~之一吧,应该= =
- 使用Xilinx UART-LITE IP实现串口--逻辑代码实现
- yolov3中 预测的bbox如何从特征图映射到原图?
- jmeter聚合报告导出时乱码的解决
- 借鉴seisman安装软件时的文件放置选择
- django会话跟踪技术
- Python需要知道的知识点
- canvas图像绘制过程中的注意
- linux删除乱码文件[转载]
热门文章
- PyCharm配置过程记录
- hdu-5640 King&#39;s Cake (水题)
- 【leetcode刷题笔记】Pow(x, n)
- Gym - 100513K :Treeland (按距离还原一棵树)
- ES+open-falcon之报警自动发送请求信息
- bzoj 1006: 神奇的国度 MCS
- Unity3D中的Coroutine及其使用(延时、定时调用函数)
- IPC的使用
- nginx利用proxy_cache来缓存文件
- Android Studio的Android Monitor窗口中把标签拉出来之后放不回去的解决方法