Podemos, além de definir no formulário como os dados serão passados, também definir quais métodos HTTP nossa servlet aceitará.
Toda Servlet deve possuir um construtor sem argumentos para que o container possa criá-lo. Após a criação, o servlet container inicializa a Servlet com o método init(ServletConfig config) e o usa durante todo o seu período ativo, até que vai desativá-lo através do método destroy(), para então liberar o objeto.
É importante perceber que a sua Servlet será instanciado uma única vez pelo container e esse único objeto será usado para atender a todas as requisições de todos os clientes em threads separadas. Aliás, é justo isso que traz uma melhoria em relação aos CGI comuns que disparavam diversos processos.
Na inicialização de uma Servlet, quando parâmetros podem ser lidos e variáveis comuns a todas as requisições devem ser inicializadas, é um bom momento, por exemplo, para carregar arquivos diversos de configurações da aplicação:
Os métodos init e destroy, quando reescritos, são obrigados a chamar o super.init() e super.destroy() respectivamente. Isso acontece pois um método é diferente de um construtor. Quando estendemos uma classe e criamos o nosso próprio construtor da classe filha, ela chama o construtor da classe pai sem argumentos, preservando a garantia da chamada de um construtor. O mesmo não acontece com os métodos.