Servlet
一、Servlet简介
什么是Servlet
Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口):
- servlet接收响应请求
- filter过滤器
- listener监听器
用来处理客户端请求、响应给浏览器的动态资源。
servlet的实质就是java代码,通过java的API动态的向客户端输出内容。以后写的程序就不在是在本地执行了。而是编译成字节码,放到服务器上来去执行。
编写程序时, 不需要有main函数了。因为写完后,就把编写的程序编译成字节码,放到服务器上面。当前发送就一个请求的时候,服务器就会按照一定规则调用编写的代码。
Servlet快速入门
- 创建一个web工程
- 在src下创建一个包名称为com.myxq.servlet
- 在创建的servlet包当中创建一个class文件起名为FirstServlet
- 进入该class实现一个Servlet接口,实现它未实现的方法
- 重点看service方法
- 在该方法当中写入一句话进行输出
- 在web.xml当中进行配置
// Servlet 是sun公司提供一套规范(接口),要想用就必须遵循这套规范(实现接口)
public class FirstServlet implements Servlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Hello Servlet");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
web.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<absolute-ordering/>
<display-name>servlet</display-name>
<!--配置Servlet-->
<servlet>
<servlet-name>myServlet</servlet-name><!--自己起的一个名字-->
<servlet-class>com.study.servlet.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myServlet</servlet-name><!--必须和上面自己起的名字相同-->
<url-pattern>/firstServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
生命周期
Servlet什么时候被创建
- 默认情况下第一次访问的时候创建
- 可以通过配置文件设置服务器启动的时候就创建
init
- servlet对象创建的时候调用
- 默认第一次访问时创建
service
- 每次请求都会执行一次
destroy
- servlet对象销毁的时候执行
- 默认服务器关闭时销毁
load-on-startup
- <load-on-startup>标签(在项目web.xml中里添加标签)
- 对象在服务器启动时就创建
- 值为数字代表优先级,数据越小,优先级越高,不能为负数。
// Servlet 是sun公司提供一套规范(接口),要想用就必须遵循这套规范(实现接口)
public class FirstServlet implements Servlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Hello Servlet");
System.out.println("每次请求都会执行一次");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("servlet对象创建的时候调用,默认第一次访问时创建");
}
@Override
public void destroy() {
System.out.println("servlet对象销毁的时候执行,默认服务器关闭时销毁");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
}
二、Servlet配置信息
标签 init-params
初始化参数,在项目web.xml中里添加该标签
<init-name>名称</init-name>
<init-value>值</init-value>
通过config参数,可以
- 获得该servlert的配置信息
- 获得web.xml当中参数
- 初始化参数
- 获取servletContext对象
标签 url-patten
完全匹配
<url-pattern>/firstServlet</url-pattern>
目录匹配
<url-pattern>/my/xq/*</url-pattern>
扩展名匹配
<url-pattern>*.myxq</url-pattern>
缺省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错误
欢迎页面
Welcome-file-list 标签
- 不写任何资源名称的时候,会访问欢迎页面
- 默认从上往下找
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>