在Servlet的GenericServleta类中有两个init()方法,两个方法在使用的时候要注意:
如果我们直接通过实现Servlet接口来编写一个Servlet类,就需要实现 Servlet接口中定义的5种方法,为了简化Servlet的编写,在javax.servlet包中,给我们提供了一个抽象的类 GenericServlet,它提供了除service()方法外的其他4种方法的简单实现。GenericServlet类定义了一个通用的、不依赖于具体协议的Servlet,它实现了Servlet接口和ServletConfig接口。
如果我们要编写一个通用的Servlet,只需要从GenericServlet类继承,并实现其中的抽象方法service()。
GenericServlet类中,提供了两种重载的init()方法 (Tomcat中的源代码 ):
·public void init(ServletConfig config)throws ServletException{
this.config = config;
this.init();
}
·public void init()throws ServletException{
}
第一种init()方法是Servlet接口中init()方法的实现。这种方法中,首先将ServletConfig对象保存在一个transient实例变量中,然后调用第二种不带参数的init()方法。
通常我们在编写集成自GenericServlet的Servlet类时,只需重写 第一种不带参数的init() 方法就可以了。
如果覆盖了第二种init()方法,那么应该在子类的该方法中,包含一句super.init(config) 代码调用。( super.init(config)即 GenericServlet .init(config) ,即 this.config = config和 this.init()两句代码,如果没有这两句代码,由于Servlet中有这么一句代码:this.getServletConfig().getServletName(), getServletConfig()中的代码是return config , 要是程序员改写含参数的init方法时,要是忘了 super.init(config) ,那么 config为空 ,则 getServletName()为空 ,就会出现空指针异常 ,所以为了防止这个错误,程序员们一般改写init()这个方法,注:Tomcat调用的是 init(ServletConfig config)这个方法。 )
init(servletconfig config)
this.config = config
init();
重写必须得 super.init(config)
不然不能使用 this.getServletConfig
当然也就不能用 getInitParameter();
我们只需要重写 init();
如:
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
super.init(config);
String num=config.getInitParameter("num");
System.out.println("初始化数为:"+num);
}
分享到:
相关推荐
以上就是Servlet的主要知识点,包括其工作原理、配置方式、生命周期以及需要注意的问题。理解并掌握这些内容对于开发高质量的Java Web应用至关重要。在实际工作中,结合源码阅读和工具使用,如IDE的调试功能,可以...
9. **多线程安全**:Servlet默认是线程安全的,这意味着多个请求可能会并发地在同一个Servlet实例上执行,因此开发者需要注意同步和资源管理,以避免潜在的线程安全问题。 10. **性能优化**:通过使用Servlet的异步...
`init()`方法只会在Servlet的生命周期中被调用一次,主要用于加载资源、创建数据库连接等初始化操作。完成初始化后,Servlet便处于待命状态,准备接收客户端的请求。 #### 二、Servlet的请求处理 当客户端发送请求...
Servlet 线程安全问题是指在使用 Servlet 编程时,如果不注意多线程安全性问题,可能会导致难以发现的错误。Servlet/JSP 技术由于其多线程运行而具有很高的执行效率,但这也意味着需要非常细致地考虑多线程的安全性...
- `Servlet`: 这是所有Servlet的基类,定义了Servlet的基本方法,如`init()`(初始化Servlet)、`service()`(处理请求)和`destroy()`(销毁Servlet)。 - `GenericServlet`: 它实现了`Servlet`接口,提供了通用...
SERVLET 的多线程并发处理可以提高 SERVLET 的处理性能,但是也需要注意线程安全问题。SERVLET 容器会为每个用户的请求创建一个新的线程,以便可以并发处理多个用户的请求。 SERVLET 基本原理是指 SERVLET 的装载、...
由于Servlet实例默认是多线程的,因此在编写Servlet时需要注意线程安全问题。例如,避免在Servlet实例中使用非线程安全的全局变量。 7. **Servlet的异步处理**: 自Java Servlet 3.0版本开始,Servlet支持异步...
由于Servlet容器会复用Servlet实例来处理多个并发请求,因此开发者需要注意线程安全问题。在编写Servlet时,应避免在实例变量中存储请求特定的数据。 8. **URL映射**: 在Web应用的部署描述符(web.xml)中,我们...
- **初始化Servlet:** 最后一步是调用Servlet的`init()`方法,通常在此方法中进行初始化操作,如设置环境变量、加载配置文件等。`init()`方法接收一个`ServletConfig`对象作为参数。 **2. 自动加载** 除了首次...
以下是关于Servlet 2.4规范和API的一些关键知识点: 1. **Servlet生命周期**:Servlet的生命周期包括初始化、服务和销毁三个阶段。初始化阶段通常在Servlet首次被请求时发生,此时会调用`init()`方法。服务阶段处理...
开发者可以自定义默认Servlet,但需要注意,这可能会影响静态资源的正常访问。 使用ServletContext对象,开发者可以存储和检索全局配置信息,例如数据库连接参数,这些可以在XML配置文件中设置,然后通过...
初始化过程中,Servlet会执行`init()`方法,可以在此设置初始参数。服务阶段,Servlet通过`service()`或特定HTTP方法(如`doGet()`、`doPost()`)处理请求。 2. **Servlet配置**:在`web.xml`部署描述符中,我们...
初始化阶段,Servlet调用`init()`方法进行初始化。当接收到请求时,Servlet容器调用`service()`方法来处理请求。应用关闭或服务器重启时,Servlet会被销毁,调用`destroy()`方法清理资源。 2. **Servlet的注册与...
由于Servlet是多线程的,开发者需要注意线程安全问题,避免在Servlet实例中使用非线程安全的数据结构。通常,将数据存储在`ServletConfig`或`ServletContext`中,而非Servlet实例,可以解决这类问题。 七、过滤器...
以下是对Servlet的一些关键知识点的详细解释: 1. **Servlet概述**: Servlet是一种Java类,用于扩展服务器的功能。它们主要用于处理HTTP请求,可以接收和响应来自客户端(如Web浏览器)的请求,并返回相应的数据...
它实现了`service()`方法,并提供了生命周期方法如`init()`和`destroy()`,用于初始化和销毁Servlet实例。 三、HttpServlet `HttpServlet`是`GenericServlet`的子类,专门针对HTTP协议进行了优化。它扩展了`...
4. **调用`init()`方法**:一旦Servlet对象被创建出来,容器就会调用该对象的`init(ServletConfig config)`方法。在这个方法中,开发者可以执行一些必要的初始化工作,例如设置环境变量、建立数据库连接等。`init()`...
### Servlet知识点集锦 #### 一、Servlet简介与工作原理 **Servlet** 是Java平台上的一个重要的技术,它主要用于开发动态网页。Servlet是运行在服务器端的Java类,它可以接收客户端(例如浏览器)发送的HTTP请求,...
当Web容器启动时,根据配置文件(web.xml)加载Servlet,然后调用`init()`方法进行初始化。接收到请求时,调用`service()`方法处理请求。当Web容器关闭或Servlet不再使用时,调用`destroy()`方法释放资源。 3. **...
使用Servlet过滤器时应注意,尽管`Filter`、`FilterConfig`和`FilterChain`位于`javax.servlet`包下,但实际操作中涉及的请求和响应对象通常需转换为HTTP特定类型,即`HttpServletRequest`和`HttpServletResponse`,...