目录
一.servlet接口
Servlet接口,Servlet就是一种实现了Servlet接口的类,它是由web容器负责创建 并调用,用于接收和响应用户的请求.
在 Servlet 接口中定义了 5 个抽象方法,具体如下:
二.Servlet的使用
第一步:编写一个类,实现Servlet接口
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 Myservlet implements Servlet {
/**
* Servlet实例化后,调用init()方法进行初始化
* Servlet什么时候进行初始化?
* 不是服务器一启动就进行实例化,二是第一次请求时,才会进行实例化.
* init()只执行一次.
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("Servlet初始化了");
String encoding= servletConfig.getInitParameter("encoding");
System.out.println(encoding);
}
/**
* service方法调用时需要使用两个参数:ServletRequest和ServletResponse
* 每一次请求都会创建新的ServletRequest和ServletResponse对象
* service()有几次请求就执行几次
*/
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
//向控制台输出
System.out.println("hello servlet");//service处理请求比较麻烦,比如我们需要判断用户的请求方式
//向浏览器输出
response.getWriter().write("hello service");
}
/**
* Servlet什么销毁?
* Web应用停止或者服务器关闭
* 只执行一次
*/
@Override
public void destroy() {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
}
第二步:配置
在 WebContent->WEB-INF,web.xml 文件下添加配置信息
<?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">
<display-name>day33</display-name>
<welcome-file-list>
<welcome-file>/login.jsp</welcome-file>
</welcome-file-list>
<!--配置servlet信息-->
<servlet>
<!--配置servlet的名称,必须唯一-->
<servlet-name>Myservlet</servlet-name>
<!--配置servlet的全类名-->
<servlet-class>servlet快速入门.Myservlet</servlet-class>
<!--配置初始化参数-->
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<!--配置Servlet的加载时机,值时一个正整数,值越小,表示越先被加载,值相同,谁在上面,谁先被加载-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<!--需要和上面的名字一致-->
<servlet-name>Myservlet</servlet-name>
<!--配置servlet的请求路径-->
<url-pattern>/myServlet</url-pattern>
</servlet-mapping>
</web-app>
第三步:运行访问
控制台显示:
浏览器显示:
三.Servlet生命周期
Servlet 生命周期三个阶段
阶段一:初始化阶段 Servlet 接收到请求后,会先检查内存中是否有该 Servlet 对象,如果有直接使用该 对象,如果没有就创建实例,后调用 init()方法,需要注意,在 Servlet 的整个生命周期 内,它的 init() 方法只会调用一次。
阶段二:运行阶段 Servlet 生命周期中最主要的阶段,该阶段会为这个请求创建`ServletRequest`对象和 `ServletResponse`对象,然后传递给 service()方法,在整个 Servlet 生命周期内,每一次 访问请求,都会创建新的`ServletRequest`和`ServletResponse`对象。并且调用 service()方 法 。
阶段三:销毁阶段 Servlet 随着 Web 应用的销毁而销毁,在销毁 Servlet 之前,Servlet 的 destroy() 方 法会被调用,在该方法里面可以进行资源释放操作,destroy()只会被调用一次,需要注 意的是 Servlet 对象一旦被创建就会驻留在内存中,直到服务器关闭。
四.使用便捷类
HttpServlet 类
抽象类,专门用于处理 HTTP 请求的 Servlet
主要功能 : 1. 根据用户请求方式不同,定义相应的 doXxx()方法处理用户请求。
2. 通 过 service() 方 法 将 HTTP 请 求 和 响 应 分 别 转 为 HttpServletRequest 和 HttpServletResponse 类型的对象
使用步骤: 1. 新建类,基础 HttpServlet
2. 重写 doGet、doPost 方法
3. 在 web.xml 文件中配置
测试 doGet 方法 :
采用 GET 方式访问`HttpServletDemo`,只需要在地址栏输入 HttpServletDemo 访问地址 即可打印`thisisdoGet!!!`
测试 doPost 方法 :
采用POST就必须使用表单了,创建表单提交html文件 ,设置提交数据到`HttpServletDemo`即可.
注意:表单action里的数据.
第二步路径只输入/,action就可以只写/loginServlet了
五.路径通配符
通配符优先级 有如下映射关系
Servlet1 映射到 /abc/*
Servlet2 映射到 /*
Servlet3 映射到 /abc
Servlet4 映射到 *.do
当请求 URL 为`/abc/a.html`,“/abc/*”和“/*”都匹配,Servlet1 响应
当请求 URL 为`/abc`时,“/abc/*”和“/abc”都匹配,Servlet3 响应
当请求 URL 为`/abc/a.do`时,“/abc/*”和“*.do”都匹配,Servlet1 响应
当请求 URL 为`/a.do`时,“/*”和“*.do”都匹配,Servlet2 响应
当请求 URL 为`/xxx/yyy/a.do`时,“/*”和“*.do”都匹配,Servlet2 响应
六、.默认 Servlet(掌握)
如果每个 Servlet 的映射路径仅仅是一个正斜线(/),那么这个 Servlet 就是当前 Web 应用 的默认 Servlet,默认 Servlet 用于处理其它 Servlet 都不处理的访问请求。
如下配置,Servlet 服务器在接收访问请求时,如果再 web.xml 文件中找不到匹配的 <servlet-mapping>元素的 URL,就会将访问请求交给默认 Servlet 处理
<servlet>
<servlet-name>DefaultServlet</servlet-name>
<servlet-class>yyy.demo01.DefaultServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DefaultServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>