Tomcat容器等级
四个等级,Servlet的容器管理Context容器,一个Context对应一个Web工程。
手工编写第一个Servlet
1.继承HttpServlet
2.重写doGet()或者doPost()方法
3.在web.xml中注册Servlet
编写好Servlet之后,接下来要告诉Web容器有关于这个Servlet的一些信息。在Servlet 3.0中,可以使用标注(Annotation)来告知容器哪些Servlet会提供服务以及额外信息。
如:
@WebServlet(name = "myServlet", urlPatterns = {"/myServlet"})
public class MyServlet extends HttpServlet {
/*--------代码--------*/
/*--------代码--------*/
}
@WebServlet
告知容器,HelloServlet这个Servlet的名称是 myServlet 。URL是 /myServlet (绝对路径),则由具 myServlet 名称的Servlet来处理,这是由urlPatterns属性来指定的。
base标签
发送请求到配置好的url路径,通常在jsp页面上做这样的处理:
<!-- 代码 -->
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!-- 代码 -->
<html>
<head>
<!-- 代码 -->
<base href="<%=basePath%>">
<!-- 代码 -->
</head>
<!-- 代码 -->
</html>
作用就是将basePath(这里即为根目录下)作为相对路径时的起始位置,因此不必考虑此时编写的文件位置在项目何处。
Servlet生命周期
- 初始化阶段
- 响应客户端请求阶段,调用servlet()方法。由servlet()方法根据提交方式选择执行doGet()或者doPost()方法。
- 终止阶段,调用destroy()方法。值得注意的是,当在控制台直接关闭服务器时是以结束线程的方式关闭,因此不会执行destroy()方法
在下列示客Tomcat容器装载Servlet
- Servlet容器启动时自动自动装载某些Servlet,实现它只需要在web.xml文件中的
<Servlet></Servlet>
之间添加如下代码:<loadon-startup>1</loadon-startup>
数字越小表示优先级别越高。
PS:Servlet3.0中可以写在@WebServlet(在上面的”手工编写第一个Servlet”有介绍,每项逗号隔开) - Servlet容器启动后,客户首次向Servlet发送请求。
- Servlet类文件被更新后,重新加载Servlet。
Servlet被加载后,将被长期保存在内存中,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次。
Servlet与JSP九大内置对象对应关系
JSP对象 | Servlet中怎样获得 |
---|---|
out | resp.getWriter |
request | service方法中的req参数 |
response | service方法中的resp参数 |
session | req.getSession()函数 |
application | getServletContext()函数 |
exception | Throwable抛出异常的方式 |
page | this |
pageContext | PageContext |
Config | getServletConfig函数 |