概念
运行在服务器上的小程序
Servelt就是一个接口,定义了java类被浏览器访问到(tomcat识别)的规则
需要自定义一个类,实现接口复写方法
快速入门
创建JavaEE项目
定义一个类,实现servelt接口
实现接口的抽象方法
配置servelt
简单例子
类实现servelt接口
这里只改写了service方法
package servelt;
import javax.servlet.*;
import java.io.IOException;
public class ServeltDemo1 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("tql");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
web.xml添加内容 配置servelt
在web.xml文件下的框里添加内容
demo1
servelt.ServeltDemo1
demo1
/demo1
运行程序:
每次加载这个页面以后 idea输出框都会输出一次tql
工作原理
Servlet的5个方法
package servelt;
import javax.servlet.*;
import java.io.IOException;
public class ServeltDemo2 implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
/*初始化方法
* 在Servlet被创建时执行,只会执行一次*/
System.out.println("init------");
}
@Override
public ServletConfig getServletConfig() {
//获取ServletConfig对象
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//提供服务方法 每次Servlet被访问时执行,可以执行多次
System.out.println("service------");
}
@Override
public String getServletInfo() {
//获取Servlet的一些信息,版本作者等
return null;
}
@Override
public void destroy() {
//销毁方法
//在Servlet被销毁时执行,只执行一次
//在Servlet销毁之前执行,一般用于释放资源
System.out.println("destoey----");
}
}
设置Servlet什么时候创建
在web.xml文件下修改
demo2
servelt.ServeltDemo2
-1
用servlet3进行配置
package servlet;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
//进行配置路径
@WebServlet("/demo")
public class ServletDemo1 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的线程安全问题
由于init方法只执行一次,说明在内存中只存在一个对象,是单例的
多个用户同时访问时,可能存在线程安全问题
因此需要我们尽可能的不在Servlet中定义成员变量,即使定义了也不要去修改这个值
urlpartten配置相关
配置多个虚拟路径
用一个数组包起来
如:
@WebServlet({"/d4","/demo4","/dd4"})
路径定义规则
1./xxx
2./xxx/xxx 多层路径
3.*.xx 没有/