1、所有的JSP最终都会转换成servlet。
2、web.xml是servlet的入口,配置1)、名称;2)、mapping映射
<!-- 配置Servlet的名字 -->
<servlet>
<!-- 指定Servlet的名字,
相当于指定@WebServlet的name属性 -->
<servlet-name>firstServlet</servlet-name>
<!-- 指定Servlet的实现类 -->
<servlet-class>lee.FirstServlet</servlet-class>
<!-- 配置应用启动时,创建Servlet实例,相当于指定@WebServlet的loadOnStartup属性 越小优先级越高-->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 配置Servlet的URL -->
<servlet-mapping>
<!-- 指定Servlet的名字 -->
<servlet-name>firstServlet</servlet-name>
<!-- 指定Servlet映射的URL地址,
相当于指定@WebServlet的urlPatterns属性-->
<url-pattern>/aa</url-pattern>
</servlet-mapping>
3、servlet实现类必须继承HttpServlet类,默认的post、get和service方法方法关系如下:
doGet()和doPost()方法源码解析
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取协议
String protocol = req.getProtocol();
//获取http.method_get_not_supported的国际化字符串
String msg = lStrings.getString("http.method_get_not_supported");
if(protocol.endsWith("1.1")) {
//如果是HTTP/1.1,返回405禁止访问方法错误
resp.sendError(405, msg);
} else {
//如果不是HTTP/1.1,返回400错误的请求错误
resp.sendError(400, msg);
}
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String protocol = req.getProtocol();
String msg = lStrings.getString("http.method_post_not_supported");
if(protocol.endsWith("1.1")) {
resp.sendError(405, msg);
} else {
resp.sendError(400, msg);
}
}
所有如果不区分post和get时可以直接重写service方法要其直接返回结果转向到页面,如果要区分时需要重写post和get。
4、servlet生命周期:
Servlet生命周期分为三个阶段:
1,初始化阶段 调用init()方法
2,响应客户请求阶段 调用service()方法
3,终止阶段 调用destroy()方法
Servlet初始化阶段:
在下列时刻Servlet容器装载Servlet:
1,Servlet容器启动时自动装载某些Servlet,实现它只需要在web.XML文件中的<Servlet></Servlet>之间添加如下代码:
<loadon-startup> 1 </loadon-startup>
|
2,在Servlet容器启动后,客户首次向Servlet发送请求
3,Servlet类文件被更新后,重新装载Servlet
Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次。
Servlet响应请求阶段:
对于用户到达Servlet的请求,Servlet容器会创建特定于这个请求的ServletRequest对象和ServletResponse对象,然后调用Servlet的service方法。service方法从ServletRequest对象获得客户请求信息,处理该请求,并通过ServletResponse对象向客户返回响应信息。
对于Tomcat来说,它会将传递过来的参数放在一个Hashtable中,该Hashtable的定义是:
private Hashtable<String
String[]> paramHashStringArray = new Hashtable<String
String[]>(); |
这是一个String-->String[]的键值映射。
HashMap线程不安全的,Hashtable线程安全。
-----------------------------------------------------------------------------------------------------------------------------------
Servlet终止阶段:
当WEB应用被终止,或Servlet容器终止运行,或Servlet容器重新装载Servlet新实例时,Servlet容器会先调用Servlet的destroy()方法,在destroy()方法中可以释放掉Servlet所占用的资源。