什么是Servlet
服务器会把接受的请求交给Servlet,每个Servlet必须实现javax.servlet.Servlet接口
- 接受请求数据
- 处理请求
- 完成响应
实现Servlet的方式
-
三种
实现javax.servlet.Servlet接口
继承javax.servlet.GennericServlet类
继承javax.servlet.http.HttpServlet类
Servlet中的方法不由我们来调用,是由tomcat来调用的,并且Servlet中的对象不由我们来创建,也是由tomcat来创建
package Servlet;
import javax.servlet.*;
import javax.servlet.Servlet;
import java.io.IOException;
public class AServlet implements Servlet {
//实现生命周期方法
//他会在Servlet对象创建之后马上执行,并且只执行一次(出生之后)
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init.....");
}
//获取Servlet的配置信息
@Override
public ServletConfig getServletConfig() {
System.out.println("getServletConfig...");
return null;
}
//实现生命周期方法
//这个方法会被调用多次,每次处理请求都是在调用这个方法
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service....");
}
//获取Servlet的信息
@Override
public String getServletInfo() {
System.out.println("getServletInfo...");
return null;
}
//实现生命周期方法
//它会在Servlet销毁之前调用一次,并且只调用一次
@Override
public void destroy() {
System.out.println("destroy...");
}
}
- 生命周期方法:
void init(ServletConfig):出生之后,(一次)
void service(ServletRequest request,ServletResponse response):没你处理请求时都会调用
void destroy():临死之前,(一次)//销毁 - 特性:
单例,一个类只有一个对象,可能存在多个Servlet类
线程不安全的,所以效率很高
Servlet是自己写,但对象是服务器来创建,并且服务器来调用相应的方法
- servletConfig是什么?
一个ServletConfig对象,对应一段web.xml中的Servlet的配置信息,可以用来获得servlet的配置信息
String getServletName()
获得的是<servlet-name>里面的内容
Servlet Context getServletContext()
:获取Servlet上下文对象
String getInitParameter(String name)
:通过名称获取指定初始化参数的值
Enumeration getInitParamenterNames()
:获取所有初始化参数的名称
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>Servlet</servlet-name>
<servlet-class>Servlet.AServlet</servlet-class>
<init-param>
<param-name>p1</param-name>
<param-value>v1</param-value>
</init-param>
<init-param>
<param-name>p2</param-name>
<param-value>v2</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Servlet</servlet-name>
<url-pattern>/A</url-pattern>
</servlet-mapping>
</web-app>
package Servlet;
import javax.servlet.*;
import javax.servlet.Servlet;
import java.io.IOException;
import java.util.Enumeration;
public class AServlet implements Servlet {
//实现生命周期方法
//他会在Servlet对象创建之后马上执行,并且只执行一次(出生之后)
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init.....");
//获取初始化参数
System.out.println(servletConfig.getInitParameter("p1"));
System.out.println(servletConfig.getInitParameter("p2"));
//获取所有初始化参数的名称
Enumeration a = servletConfig.getInitParameterNames();
while(a.hasMoreElements()){
System.out.println(a.nextElement());
}
}
//获取Servlet的配置信息
@Override
public ServletConfig getServletConfig() {
System.out.println("getServletConfig...");
return null;
}
//实现生命周期方法
//这个方法会被调用多次,每次处理请求都是在调用这个方法
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service....");
}
//获取Servlet的信息
@Override
public String getServletInfo() {
System.out.println("getServletInfo...");
return null;
}
//实现生命周期方法
//它会在Servlet销毁之前调用一次,并且只调用一次
@Override
public void destroy() {
System.out.println("destroy...");
}
}