下边是我们写的一个实现接口Servlet的实现类,我们发现里边有五个要实现的方法,其中只有service方法是我们经常用的,所以我们将这个方法写成抽象方法,让子类去继承它。而不是直接在这个方法写我们要实现的代码,如果我们有多个用户请求,都写在这个类里去实现既不美观,可读性也差。二继承后我们可以一个请求写一个类,增加可读性
public abstract class GenericServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
/*
* 我们最常用的是这个方法,所哟我们将这个方法改成abstractfangfa
* 让子类去继承实现
* */
@Override
public abstract void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException;
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
子类继承
public class Login extends GenericServlet{
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("正在处理用户登录请求");
}
}
xml文件
<servlet>
<servlet-name>loginServlet</servlet-name>
<servlet-class>com.java.servlet.Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
执行成功
方法中变量引用的问题
init方法中有一个自带的 servletConfig对象,这个跟对象是Tomcat启动时自己创建的不是null。又是我们的servlet方法需要使用这个变量,但他在init方法中,servlet无法直接调用。解决方法看下面。
public void init(ServletConfig servletConfig)
解决方法
- 创建一个成员变量
- 将 servletConfig赋值给成员变量
- 其他方法可以调用 servletConfig的get方法就可以使用这个变量
public abstract class GenericServlet implements Servlet {
//成员变量
private ServletConfig Config;
@Override
public void init(ServletConfig servletConfig) throws ServletException {
this.Config= servletConfig;//赋值
}
@Override
public ServletConfig getServletConfig() {
return Config;
}
其他方法或类调用
public class Login extends GenericServlet{
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("正在处理用户登录请求");
// 在此类在使用ServletConfig对象
ServletConfig config = this.getServletConfig();
}
}