Servet = Server applet 运行在服务器的小程序
Servlet就是一个接口,定义了Java类被浏览器访问到的规则。
将来定义一个类,实现Servlet接口,复写方法即可。
步骤:
1.创建JavaEE项目
2.定义一个类,实现Servlet接口
3.实现接口中的抽象方法
4.配置Servlet
示例:
(0)创建一个Web项目,虚拟路径指定为/Servlet
(1)继承Servlet接口:
package com.yatolove; import javax.servlet.*; import java.io.IOException; public class ServerletDemo01 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 { } @Override public String getServletInfo() { return null; } @Override public void destroy() { } }
(2)配置Servlet 访问路径
在web.xml中的根标签内部配置:
<servlet> <servlet-name>demo01</servlet-name> <servlet-class>com.example._01_servlet.ServletDemo01</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo01</servlet-name> <url-pattern>/demo01</url-pattern> </servlet-mapping>
(3)启动Tomcat,并通过浏览器访问
http://localhost:8080/Servlet/demo01
demo01就是配置中的url-pattern
浏览器通过: ip:port/项目虚拟路径/Servlet资源名称
找到此Servlet
先找到web项目,然后找web.xml,然后找Servlet的url-pattern,然后根据映射关系找到Servlet类
Servlet生命周期分为三个阶段:
1,初始化阶段 调用init()方法
2,响应客户请求阶段 调用service()方法
3,终止阶段 调用destroy()方法
load-on-startup<0
第一次请求此Servlet的时候加载Servlet类;load-on-startup>=0
启动Tomcat容器的时候加载Servlet类<servlet> <servlet-name>demo01</servlet-name> <servlet-class>com.example._01_servlet.ServletDemo01</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>demo01</servlet-name> <url-pattern>/demo01</url-pattern> </servlet-mapping>
1.Serverlet的int只执行一次,说明只有一个Servlet对象,Servlet对象是单例的;
2.多个用户同时访问同一个Servlet的时候,可能存在线程安全问题
尽量不要在Servlet中定义成员变量,定义了成员变量,也不要对其进行set操作。
service() 每接收一次请求,调用一次
destroy()在Servlet销毁的时候执行,且仅执行一次
服务器正常关闭的时候才会销毁Servlet
注解配置,就不用在web.xml中配置了,在创建web项目的时候可以不创建web.xml
Servlet必须在3.0及以上版本才可以。
配置方式:
1. @WebServlet(urlPattern="/demo01")
2. @WebServlet(value="/demo01")
注解类型中,如果只有一个属性的话,可以省去value
3. @WebServlet("/demo01")
Servlet接口 | GenericServlet抽象类 | HttpServlet 抽象类
1.GenericServlet 继承 只需要复写Service;对Serverlet接口的其他方法做了默认实现
public class ServletDemo02 extends GenericServlet { @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { } }
2.HttpServlet抽象类
对http协议封装了,只需要复写doGet/doPost方法即可
1.@WebServlet可以指定多个访问路径
@WebServlet{"/d4","/dd4","/ddd4"}
2.路径定义规则:
1./xxx
2./xxx/xx 多层路径
3.*.do