1 Servlet
1.1 概念
运行在服务端的小程序
- servlet就是一个接口,定义了java类被浏览器访问(tomcat识别到)的规则。
- 将来我们定义一个类,实现Servlet接口,复写方法。
1.2 快速入门
1、创建JavaEE项目
2、定义一个类,实现servlet接口
3、实现接口中的抽象方法
public class ServletDemo 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("hello servlet");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
4、配置servlet
在web.xml中
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>cn.itcast.web.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
1.3 执行原理
1、浏览器url——>web.xml(url-pattern)——>获取web.xml(servlet-class)的全类名
2、通过反射得到ServletDemo1对象,调用Service()方法
1.4 Servlet生命周期
public class ServletDemo2 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() {}
}
- init():Servlet被创建时调用,只执行一次
- service():Servlet提供服务时调用,多次执行
- destory():Servlet被摧毁时调用,只执行一次
1.4.1 Question
1.4.1.1 Servlet什么时候被创建?
- 默认情况下,第一次访问网页时被创建
- 可以通过配置执行Servlet的创建时机(在servlet标签下配置)
- 第一次访问时,创建
<load-on-startup>-1</load-on-startup>
,里面的值为负数 - 在tomcat服务器启动时,创建
<load-on-startup>1</load-on-startup>
,里面的值为正数
- 第一次访问时,创建
1.4.1.2 Servlet什么时候被销毁?
-
服务器正常关闭时,被销毁。
-
destory方法在Servlet被销毁之前执行,一般用于释放资源
1.5 注释配置
servlet3.0:支持注解配置,可以不需要web.xml了
步骤:
- 创建JavaEE项目,选择Servlet版本3.0以上
- 定义一个类,实现Servlet接口
- 复写方法
- 在类上使用
@WebServlet
注解,进行配置
或者省略urlPatterns
1.6 Servlet的体系结构
Servlet —— 接口
|
GenericServlet —— 抽象类
|
HttpServlet —— 抽象类
1.6.1 GenericServlet
将Servlet接口中其他的方法做了默认空实现,只将Service()方法作为抽象
@WebServlet("/demo2")
public class ServletDemo2 extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
}
1.6.2 HttpServlet
对http协议的一种封装,复写doGet/doPost方法简化操作
@WebServlet("/demo2")
public class ServletDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet....");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost...");
}
}
1.7 Servlet相关配置
-
urlParttens: Servlet访问路径(一个Servlet可配置多个访问路径)
-
路径定义规则:
- /xxx
- /xxx/xxx
- *.do
注:*表示任意字符