1.1什么是Servlet
Servlet是运行在服务器端的Java小程序,是sun公司提供的一套规范,用来处理客户端请求、响应浏览器的动态资源。
Servlet是JavaWeb三大组件(Servlet、Filter、Listener)之一,且最重要。
1.2 Servlet的作用
用来处理从客户端发送过来的请求,并对该请求作出响应。
Servlet的任务有:
1.获取请求数据 2.处理请求 3.完成响应
1.3 Servlet的准备工作:
Servlet规范要求:Servlet程序需要编写实现类,并在web.xml进行配置。
(1)实现类:通常继承javax.servlet.http.HttpServlet类,并复写doGet()和doPost()方法。
(2)doGet()方法用于处理get请求。
(3)doPost()方法用于处理post请求。
配置信息:在web.xml进行配置。
1.4 Servlet编写步骤
1.创建类,继承HttpServlet,复写doGet和doPost方法
//ServletDemo.java
package cn.itcast.web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ServletDemo
*/
public class ServletDemo extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("get请求将执行");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("post请求将执行");
}
}
2.编写配置文件web.xml
<!-- ServletDemo.java
* <servlet> 注册servlet
<servlet-name> servlet名称,当前xml中唯一
<servlet-class> servlet实现类的全限定类名
* <servlet-mapping> 给注册的servlet添加映射路径
<servlet-name> 已经注册的servlet名称。注意:必须与注册的名称一致。
<url-pattern> 访问路径。要求:必须以/开头
-->
<servlet>
<description></description>
<display-name>ServletDemo</display-name>
<servlet-name>ServletDemo</servlet-name>
<servlet-class>cn.it.web.ServletDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletDemo</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
3.浏览器访问
在浏览器地址栏输入:http://localhost:8080/demo
(1)浏览器显示空白页面
(2)控制台打印信息:get请求将执行
1.5 Servlet的执行流程详解
(1)浏览器的地址栏中输入localhost:8080/demo
(2)浏览器找到web.xml文件中的访问路径--> /demo
(3)根据/demo找到注册了的Servlet名称--> ServletDemo
(4)根据ServletDemo找到servlet实现类的全限定类名,从而到相应的实现类中执行程序。
1.6 Servlet的生命周期
生命周期:就是一个对象从创建到销毁的过程。
何时创建:用户第一次访问Servlet时创建Servlet实例(单实例)
何时销毁:当项目从服务器中移除的时候,或者关闭服务器的时候
1.7 Servlet规范规定
所有的servlet必须实现javax.servlet.Servlet接口:
1.第一次调用时,将执行初始化方法:init(ServletConfig)方法
2.第一次调用,都将执行service(ServletRequest, ServletResponse)方法
3.服务器关闭或项目被移除(调用destroy方法销毁servlet对象)
JavaEE规范中提供Servlet接口实现类:
GenericServlet:通用servlet实现。没有实现service
HttpServlet:与Http协议有关的实现。实现service方法,完成与http协议有关的操作。
request.getMethod()获得请求方式(get、post)
如果是get,将调用doGet()方法
如果是post,将调用doPost()方法
1.8 Servlet被访问过程描述
1.用户第一次访问servlet的时候,服务器会创建一个servlet实例
2.创建servlet实例的同时执行servlet的init()方法
3.每一次请求,服务器都会创建一个新的线程访问servlet中的service方法,在service方法内部根据请求的方式的不同调用doXXX的方法(get请求调用doGet, post请求调用doPost)
4.当servlet从服务器中被移除,或者关闭服务器,servlet的实例就会被销毁,同时destroy方法将会被执行
1.9 Servlet相关的配置
1.9.1启动时创建Servlet
Servlet默认是在第一次访问的时候被创建的。可以让Servlet在服务器启动的时候创建好,对Servlet进行配置。
在web.xml中的<servlet> </servlet>标签中配置:
<load-on-startup>2</load-on-startup>
传入正整数,整数越小,被创建的优先级就越高。
1.9.2 url-pattern的配置
url-pattern配置方式共有三种:
1.完全路径匹配:以/开始
例如:/Servlet/Demo4,/aaa/ServletDemo5
2.目录匹配:以/开始,以*结束
例如:/* (所有),/aaa/* (aaa目录下的所有),/aaa/bbb/*
3.扩展名匹配:不能以/开始,要以*开始
例如:*.do,*.action,*.jsp,*.jpg
4.缺省路径 /
通常情况访问html页面时,首先从当前web项目的web.xml文件寻找匹配路径,如果没有找到,再从tomcat默认的web.xml匹配,将使用缺省servlet.
Tomcat获得匹配路径的优先级顺序如下:
完全路径匹配 > 目录匹配 > 扩展名匹配 > 缺省路径
1.10开发中的路径的编写
相对路径:都是需要找位置相对关系,不能以/开始的
当前路径 ./
上级目录 ../
绝对路径:不需要找位置相对关系,以/开始的
绝对路径中分为客户端路径和服务器端路径
客户端路径一定要加工程名 /day/sd6
服务器端路径不需要加工程名 /sd6
1.11 ServletContext 全局管理对象
服务器启动的时候,为每个WEB应用创建一个单独的ServletContext对象,我们可以使用这个对象存取数据,用这个对象存取的数据可以在整个WEB应用中获得。
1.可以在多个servlet之间共享数据
setAttribute(String name,Object obj) 向ServletContext中存数据
getAttribute(String name) 从ServletContext中取数据
removeAttribute(String name) 从ServletContext中移除数据
2.可以获得当前WEB项目中的指定资源(文件)
InputStream getResourceAsStream(String path) 返回一个输入流对象
String getRealPath(String path) 返回资源文件的绝对路径(path为/)
Set getResourcePaths(String path) 返回一个Set集合,集合中包含资源目录中子目录和文件的路径名称。参数path必须以/开始,指定匹配资源的部分路径
URL getResource(String path) 返回映射到某个资源文件的URL对象。参数path必须以/开始,”/”表示当前WEB应用的根目录
3.可以进行整个WEB项目初始化数据设置
String getIntParameter(String) 获得Servlet的初始化参数
在web.xml可以给整个WEB项目配置初始化参数
<!-- 全局初始化参数(整个项目) -->
<context-param>
<param-name>参数名</param-name>
<param-value>参数值</param-value>
</context-param>
在实际开发中,有时候可能会需要读取WEB应用中的一些资源文件,为此,在ServletContext接口中定义了一些读取WEB资源的方法,这些方法是依靠servlet容器来实现的。Servlet容器根据资源文件名相对于WEB应用的路径,返回关联资源文件的IO流、资源文件在文件系统的绝对路径等。
1.12 ServletConfig:获得Servlet的配置信息
String getIntParameter(String) 获得Servlet的初始化参数
Enumeration getIntParameterNames() 获得Servlet初始化参数的名称
ServletContext getServletContext() 获得ServletContext对象的引用
String getServletName() 获得Servlet在web.xml中配置的name的值,及<servlet-name>中标签配置内容