Servlet:Server applet
*概念:运行在服务器端的小程序,Servlet就是一个接口,定义了java类被浏览器访问(容器)的规则
快速入门创建servlet:
1.创建javaEE项目
2.定义一个类,实现Servlet接口
3.实现Servlet的抽象方法
4.配置Servlet
在web.xml文件的跟标签
package com.xiaoqiang.web;
import javax.servlet.*;
import java.io.IOException;
public class FirstServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init:servlet被加载");
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service:servlet被调用");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("destroy:servlet被销毁");
}
}
firstServlet com.xiaoqiang.web.FirstServlet 0 firstServlet /firstServlet
servlet3.0版本:支持注解配置可以不使用 web.xml
1.创建javaEE项目,使用3.0以上servlet版本,可以不创建servlet
2.定义实现servlet接口的类
3.复写抽象方法
4.在类上使用@WebServlet("资源路径")
package com.xiaoqiang.web;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet(urlPatterns = "/twoServlet")//urlPatterns资源路径,注解默认属性可以省略简化为
public class TwoServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Servlet3.0注解配置");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
servlet的方法:
1.init 初始化方法,在Servlet被创建时执行一次,默认首次访问servlet时,容器会加载servlet,在加载的时候执行init方法。
在servlet标签中,可以使用load-on-startup标签定义servlet创建时机,值为负数访问时创建,值为>=0时启动时创建。
servlet的init方法只执行一次,证明servlet是单例对象,为避免线程安全问题,尽量不要在Servlet中定义成员变量,或修改成员变量的值
2.service 提供服务的方法,每次被访问的时候执行
3.destroy 销毁方法,在服务器正常关闭时执行一次,在servlet销毁前执行,用于销毁资源
4.ServletConfig 获取servlet的配置对象
5.getServletInfo 获取servlet的一些信息,例如版本、作者等
servlet生命周期:
init初始化servlet、service提供处理客户端调用请求 、destroy在服务器正常关闭时销毁servlet
servlet 继承体系结构
service() Servlet提供服务的方法,每次被访问的时候执行
抽象类 GenericServlet inplements Servlet
GenericServlet:将Servlet将service()方法作为抽象,其他方法空处理,定义servlet类时,可以继承将GenericServlet实现service()方法,在方法中处理不同类型的请求
抽象类 HttpServlet extends GenericServlet
HttpServlet 封装了service接口,将不同类型的http请求分发到对应的处理方法中,我们复写对应的处理方法即可处理请求数据
HttpServlet:对http协议的一种封装,复写 doGet / doPost 方法即可,简化操作
1.定义类继承 Httpservlet
2.复写 doGet / doPost 方法
package com.xiaoqiang.web;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//public class TwoServlet extends GenericServlet{
//
// @Override
// public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
// System.out.println("GenericServlet-service");
// }
//}
@WebServlet("/threeServlet")
public class ThreeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HttpServlet:doGet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HttpServlet:doPost");
}
}
Servlet配置
1.urlPatterns:Servlet访问路径
1.一个servlet可以定义多个路径:@WebServlet({"path1","path2","path3"})
2.路径定义规则
/XXX 单层访问路径
/xxx/xxx... 多层访路径
/* *是通配符,访问优先级最低
*.do 访问后缀



