什么是Servlet
Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口)
- servlet接收响应请求
- filter过滤器
- listener监听器
用来处理客户端请求、响应给浏览器的动态资源,servlet的实质就是java代码,通过java的API动态的向客户端输出内容,以后写的程序就不在是在本地执行了。而是编译成字节码,放到服务器上来去执行。编写程序时, 不需要有main函数了。因为写完后,就把编写的程序编译成字节码,放到服务器上面。当前发送就一个请求的时候,服务器就会按照一定规则调用编写的代码。
Servlet快速入门
创建一个类Hello,实现Servlet接口
package org.youyuan.servlet;
import javax.servlet.*;
import java.io.IOException;
public class Hello implements Servlet {
//访问servlet时调用
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init");
}
public ServletConfig getServletConfig() {
return null;
}
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("hello service");
}
public String getServletInfo() {
return null;
}
//服务器关闭或者web应用移除容器时调用
public void destroy() {
System.out.println("destroy");
}
}
在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">
<servlet>
<servlet-name>youyuan</servlet-name>
<servlet-class>org.youyuan.servlet.Hello</servlet-class>
<!--设置servlet在web应用启动时初始化-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>youyuan</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
</web-app>
启动tomcat,在浏览器中输入
输出结果:
生命周期
Servlet什么时候被创建:
- 默认情况下第一次访问的时候创建。
- 可以通过配置文件设置服务器启动的时候就创建。
init:servlet对象创建的时候调用,默认第一次访问时创建。
service:每次请求都会执行一次。
destroy:servlet对象销毁的时候执行,默认服务器关闭时销毁。
load-on-startup:对象在服务器启动时就创建,值为数字代表优先级,数据越小,优先级越高,不能为负数。
Servlet配置信息
init-params:
1.<init-name>名称</init-name>
2.<init-value>值</init-value>
3.config参数
-该servlert的配置信息
-获得web.xml当中参数
-初始化参数
-获取servletContext对象
url-patten
- 完全匹配
- 目录匹配
- 扩展名匹配
缺省Servlet:访问的资源不存在时,就会找缺省的地址。
<url-patten>/</url-patten>
全局Web.xml:
- 对于部署在服务器上的所有应用都有效。
- 先到自己工程当中找web.xml配置。
- 再到全局web.xml当中去找配置。
- 如果两个当中有相同的配置,自己当中配置的内容会生效
静态资源加载过程:
- 在path后面写的静态资源名称index.html或者是其它的.html它都是会找ur-patten当中有没有匹配的内容。
- 如果有,就加载对应的servlet,如果没有就到自己配置当中找缺省的url-patten。
- 如果自己配置文件当中没有缺省的,就会找全局配置缺省的url-patten,在全局配置当中有一个缺省的url-patten。
- 对应的是default的Servlet,defaultServlet内部会到当前访问的工程根目录当中去找对应的名称的静态资源。
- 如果有,就把里面的内容逐行读出。响应给浏览器。如果没有,就会报404错误