什么是Servlet
Servlet
运行在服务端的Java小程序,是sun公司提供一套规范(接口)
1.servlet
接收响应请求
2.filter
过滤器
3.listener
监听器- 用来处理客户端请求、响应给浏览器的动态资源
- servlet的实质就是java代码,通过java的API动态的向客户端输出内容
- 以后写的程序就不在是在本地执行了。而是编译成字节码,放到服务器上来去执行。
- 编写程序时, 不需要有main函数了。因为写完后,就把编写的程序编译成字节码,放到服务器上面。当前发送就一个请求的时候,服务器就会按照一定规则调用编写的代码
Servlet 快速入门
- 创建一个web工程
- 在
JavaResource
中src
下创建一个包名称为com.iris.servlet
- 在创建的servlet包当中创建一个class文件起名为
FirstServlet.class
- 进入该class实现一个Servlet接口,实现它未实现的方法
重点看service方法
在该方法当中写入一句话进行输出
FirstServlet.class
package com.iris.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;
import javax.servlet.http.HttpServletResponse;
public class FirstServlet implements Servlet {
//servlet 什么时候会被创建?
//默认:第一次访问的时候会被创建
//通过配置可以设置服务器一启动的时候创建对象
//创建的对象会被缓存
//每一次请求的时候,都会调用的一个方法,会把请求和响应都会传给您
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("Hello Servlet");
HttpServletResponse res = (HttpServletResponse)arg1;
res.getWriter().write("this is http servlet Response");
}
//当servlet销毁的时候调用,即服务器关闭
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("服务器关闭");
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
//init 当servlet创建的时候调用
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
System.out.println("Initing..");
//arg0参数,如果关联源码自动变成config,
//表示可以获取一些配置信息
//可以获取Servlet名称 web.xml
String name = config.getServletName();
System.out.println("ServletName = " + name);
//获取web.xml初始化参数
String value = config.getInitParameter("my_init_name");
System.out.println("getInitParameter "+value);
//3.获取 ServletContext
ServletContext sc = config.getServletContext();
}
}
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_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>MytestProject</display-name>
<servlet>
<servlet-name>abc</servlet-name> <!-- 自己起一个名称 -->
<servlet-class>com.iris.servlet.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>abc</servlet-name> <!-- 必须和上面起的名一致 -->
<url-pattern>/first</url-pattern> <!-- path后面跟的名称 servlet/first -->
<load-on-startup>3</load-on-startup> <!-- 存在多个servlet时的优先级 -->
<init-param> <!-- 初始化参数 -->
<param-name>my_init_name</param-name>
<param-value>1234</param-value>
</init-param>
</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>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
Path 路径的重新配置
重新启动Tomcat服务器
访问自己写的JAVA程序
生命周期
- Servlet什么时候被创建
- 默认情况下第一次访问的时候创建
- 可以通过配置文件设置服务器启动的时候就创建
<load-on-startup>
对象在服务器启动时就创建
值为数字代表优先级
数据越小,优先级越高,不能为负数
init
servlet对象创建的时候调用
默认第一次访问时创建service
每次请求都会执行一次destroy
servlet对象销毁的时候执行
默认服务器关闭时销毁
servlet配置信息
<url-patten>
三种写法
- 完全匹配
<url-pattern>/first</url-pattern>
- 目录匹配
<url-pattern>/my/test/*</url-pattern>
3. 扩展名匹配
<url-pattern>*.myxq</url-pattern>
4. 缺省匹配
都没有匹配成功任何一个 url-pattern,就会执行缺省对应的 Servlet
<url-pattern>/</url-pattern>
静态资源加载过程
- 在path后面写的静态资源名称index.html或者是其它的
.html
它都是会找ur-patten当中有没有匹配的内容 - 如果有,就加载对应的servlet,如果没有就到自己配置当中找缺省的url-patten
- 如果自己配置文件当中没有缺省的,就会找全局配置缺省的url-patten
- 在全局配置当中有一个缺省的url-patten 对应的是
default的Servlet
defaultServlet
内部会到当前访问的工程根目录当中去找对应的名称的静态资源,如果有,就把里面的内容逐行读出。响应给浏览器。- 如果没有,就会报404错误