第三篇-->Servlet从细节开始(一)

package cn.lee;

import java.io.IOException;

import javax.servlet.Servlet;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

public class  HelloServlet implements Servlet{

@Override

public void destroy() {

// TODO Auto-generated method stub

System.out.println("destroy Servlet");

}

@Override

public ServletConfig getServletConfig() {

// TODO Auto-generated method stub

System.out.println("getServletConfig");

return null;

}

@Override

public String getServletInfo() {

// TODO Auto-generated method stub

System.out.println("getServletInfo");

return null;

}

@Override

public void init(ServletConfig arg0) throws ServletException {

// TODO Auto-generated method stub

System.out.println("init");

}

@Override

public void service(ServletRequest arg0, ServletResponse arg1)

throws ServletException, IOException {

// TODO Auto-generated method stub

System.out.println("service");

}

public HelloServlet(){

System.out.println("HelloServlet‘Construct");

}

}

以上是一个完整的Servlet

对于Servlet的生命周期应该有一个深刻的认识

1.构造器: 只有第一次请求Servlet时,创建Servlet的实例调用构造器,

这说明Servlet是一个单例。这就可以探讨其中的单例问题。

2.init方法:对象只被调用一次,在创建好实例后立即被调用,用于初始化当前Servlet

3.service:每次访问Servlet都会调用service方法

4.destroy:只被调用一次,在当前Servlet所在的Web应用被卸载前调用,用于释放当前Servlet所占用的资源。如数据库连接。

这些方法都由Servlet容器调用。

在web.xml中配置

5.load-on-startup参数

1)配置在Servlet节点中

<servlet>

<servlet-name>helloServlet</servlet-name>

<servlet-class>cn.lee.HelloServlet</servlet-class>

<load-on-startup>0</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>helloServlet</servlet-name>

<url-pattern>/hello</url-pattern>

</servlet-mapping>

<load-on-startup>0</load-on-startup>指定Servlet被创建的时机,若为负数,则表示第一次请求时被创建。若大于等于0,则在Servlet容器加载中就被创建,并且值越小越早被创建。

-------

6.url-pattern  可以是/*, *.do  前者优先匹配

-------

7.ServletConfig 封装了Servlet的配置信息,

1).配置Servlet的初始化参数

<!--  init-param must be put before loadonstartup-->

<servlet>

<init-param>

<param-name>user</param-name>

<param-value>root</param-value>

</init-param>

<init-param>

<param-name>password</param-name>

<param-value>123</param-value>

</init-param>

<load-on-startup>0</load-on-startup>

</servlet>

初始化参数必须放在load-on-startup前面

2).获取初始化参数:

getInitParameter(String name):获取指定参数名的初始化参数

getInitParameterNames():获取参数名组成的Enumeration对象

public void init(ServletConfig arg0) throws ServletException {

// TODO Auto-generated method stub

System.out.println("init");

String user=arg0.getInitParameter("user");

System.out.println(user);

Enumeration <String> names=arg0.getInitParameterNames();

while(names.hasMoreElements()){

String name=names.nextElement();

String value=arg0.getInitParameter(name);

System.out.println(name+":"+value);

}

String servletName=arg0.getServletName();

System.out.println(servletName);

}

这也是Request的原型

------------------------

时间: 2024-08-04 19:25:40

第三篇-->Servlet从细节开始(一)的相关文章

第三篇--&gt;Servlet从细节开始(二)

8.ServletContext 1).可以由ServletConfig获取,    ServletContext context=arg0.getServletContext(); 2).该对象代表当前WEB应用:可以认为ServletContext是当前Web应用的一个大管家,可以获取当前WEB应用的各方面信息 <!-- 配置当前WEB应用的初始化参数--> <context-param> <param-name>driver</param-name>

C语言中容易被忽略的细节(第三篇)

前言:本文的目的是记录C语言中那些容易被忽略的细节.我打算每天抽出一点时间看书整理,坚持下去,今天是第一篇,也许下个月的今天是第二篇,明年的今天又是第几篇呢?--我坚信,好记性不如烂笔头.第三篇了,fight~... 第一篇链接:C语言中容易被忽略的细节(第一篇) 第二篇链接:C语言中容易被忽略的细节(第二篇) 1.__attribute__((noreturn)) __attribute__可设置函数属性.变量属性和类型属性.__attribute__((noreturn))设置了函数属性,n

认识元数据和IL(上) &lt;第三篇&gt;

说在,开篇之前 很早就有说说Metadata(元数据)和IL(中间语言)的想法了,一直在这篇开始才算脚踏实地的对这两个阶级兄弟投去些细关怀,虽然来得没有<第一回:恩怨情仇:is和as>那么迅速,但是Metadata和IL却是绝对重量级的内容,值得我们在任何时间关注,本文就是开始. 1 引言 你可曾想到,我们的C#代码,编译之后究竟为何物?你可曾认知,我们的可执行程序,运行之时的轨迹究竟为哪般?那么,本文通过对Metadata(元数据)和IL(Intermediate Language, 中间语

JAVA Web学习篇--Servlet

Servlet由来 做过BS项目的人都知道,浏览器可以依据HTML静态标记语言来显示各式各样的网页.可是假设我们须要在网页上完毕一些业务逻辑:比方登陆验证.或者说网页显示的内容在server的数据库中.假设是这样,除了负责显示的HTML标记之外,必须还要有完毕这些业务功能的代码存在.这样的网页我们就叫做动态网页. 对于静态网页而言,server上存在的是一个个纯HTML文件.当client浏览器发出HTTP请求时,server能够依据请求的URL找到相应的HTML文件,并将HTML代码返回给cl

PHP 性能分析第三篇: 性能调优实战

注意:本文是我们的 PHP 性能分析系列的第三篇,点此阅读 PHP 性能分析第一篇: XHProf & XHGui 介绍 ,或  PHP 性能分析第二篇: 深入研究 XHGui. 在本系列的 第一篇 中,我们介绍了 XHProf .而在 第二篇 中,我们深入研究了 XHGui UI, 现在最后一篇,让我们把 XHProf /XHGui 的知识用到工作中! 性能调优 不用运行的代码才是绝好的代码.其他只是好的代码.所以,性能调优时,最好的选择是首先确保运行尽可能少的代码. OpCode 缓存 首先

EnjoyingSoft之Mule ESB基础系列第三篇:Mule message structure - Mule message结构

目录 1. 探索Mule Message结构 2. Mule Message的Payload 3. Mule Message的Property 4. Mule Message的Attachment 5. Mule的Variable 6. 使用Java操作Mule Message Mule ESB是一个使用Java语言编写的开源企业服务总线,企业服务总线英文Enterprise Service Bus,简称ESB.其相关源代码也托管在GitHub上,可以在https://github.com/mu

HttpApplication处理对象与HttpModule处理模块 (第三篇)

一.HttpApplication对象简述 在HttpRuntime创建了HttpContext对象之后,HttpRuntime将随后创建一个用于处理请求的对象,这个对象的类型为HttpApplication. HttpRuntime管理一个定义在System.Web命名空间下的HttpApplicationFactory类的时候,HttpApplicationFactory通过工厂模式管理HttpApplication对象.在HttpApplicationFactory内部维护了一个HttpA

Python之路【第三篇】:Python基础(二)

Python之路[第三篇]:Python基础(二) 内置函数 一 详细见python文档,猛击这里 文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 1 文件句柄 = file('文件路径', '模式') 注:python中打开文件有两种方式,即:open(...) 和  file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open. 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作.

SylixOS ARM BSP 第三篇【bspInit.c】

此篇博客为 SylixOS ARM BSP 编写连载的第三篇,主要介绍 bspInit.c 文件具体实现. bspInit.c 为 BSP 操作系统初始化部分代码,通常由 startup.S 初始完基本处理器参数后调用,下面以 S3C2440A 处理器为例,逐块介绍 bspInit.c 代码. SylixOS ARM BSP 第二篇中提到 startup.S 初始化完成会将会调用 bspInit() 函数,此函数用于初始化操作系统,并开始多任务调度. int bspInit (void) {