一、Servlet
是和平台无关的服务器组件,运行在Servlet容器中,可完成如下功能:
1、创建并返回基于客户请求的动态HTML页面
2、创建可嵌入到现有HTML页面的HTML页面片段
3、与其他服务器资源进行通信(如数据库或基于java的应用程序)
二、Servlet容器
运行 Servlet、JSP、Filter 等的软件环境.
1、 可以来创建 Servlet, 并调用 Servlet 的相关生命周期方法.
2、 JSP, Filter, Listener, Tag ...
三、Servlet 生命周期的方法: 以下方法都是由 Serlvet 容器负责调用.
1、构造器: 只被调用一次. 只有第一次请求 Servlet 时, 创建 Servlet 的实例. 调用构造器.
2、init 方法: 只被调用一次. 在创建好实例后立即被调用. 用于初始化当前 Servlet.
3、service: 被多次调用. 每次请求都会调用 service 方法. 实际用于响应请求的.
4、destroy: 只被调用一次. 在当前 Servlet 所在的 WEB 应用被卸载前调用. 用于释放当前 Servlet 所占用的资源.
好了 现在皮皮开始写第一个Servlet程序啦 老规矩 HelloWorld
新建Servlet后 可在web.xml文件中看到Servlet的配置信息:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<servlet>
<servlet-name>NewServlet</servlet-name> servlet的注册名字
<servlet-class>com.pipi.first.NewServlet</servlet-class> Servlet 的全类名
</servlet>
<servlet-mapping>
<servlet-name>NewServlet</servlet-name> 需要和servlet 节点的 serlvet-name 子节点的文本节点一致
<url-pattern>/HelloWorld</url-pattern> 映射具体的访问路径
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
关于serlvet-mapping
1、同一个Servlet可以被映射到多个URL上,即多个 <servlet-mapping> 元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名。
2、在Servlet映射到的URL中也可以使用 * 通配符,但是只能有两种固定的格式:
一种格式是“*.扩展名”,另一种格式是以正斜杠(/)开头并以“/*”结尾。
好 现在我们开始编辑NewServlet.java文件 来看一下sevlet 的生命周期 看看几个方法的调用情况。
编辑一下几个方法
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.service(req, resp); //To change body of generated methods, choose Tools | Templates.
System.out.println("service!");
}
@Override
public void init() throws ServletException {
super.init(); //To change body of generated methods, choose Tools | Templates.
System.out.println("init!");
}
public NewServlet(){
System.out.println("hello world!");
}
@Override
public void destroy() {
super.destroy(); //To change body of generated methods, choose Tools | Templates.
System.out.println("destory!");
}
运行后是这样的
多次刷新 会打印多次 service
关闭服务器后 会打印destroy
可见 :
1、构造器: 只被调用一次. 只有第一次请求 Servlet 时, 创建 Servlet 的实例. 调用构造器.
2、init 方法: 只被调用一次. 在创建好实例后立即被调用. 用于初始化当前 Servlet.
3、service: 被多次调用. 每次请求都会调用 service 方法. 实际用于响应请求的.
4、destroy: 只被调用一次. 在当前 Servlet 所在的 WEB 应用被卸载前调用. 用于释放当前 Servlet 所占用的资源.