1.配置开发环境
如何利用IDE开发(构建)一个web project
部署web project到Tomcat
————结果是把WebRoot下的内容打成包,发布到webapps中
2.在集成环境开发过程中的注意事项
如果修改了Java文件(修改了方法签名除外),无需重启,也无需重部署
如果修改了html文件,无需重启,但需要重部署
修改了web.xml,系统会自动重部署
3.Servlet的生命周期
生命周期有哪几个过程(4个)?
每个过程都对应有特殊的生命周期方法
装载&实例化————构造方法
初始化————————init() 只调用一次,并且在service()之前完成
处理请求———————service() 处理客户的请求,每个请求都在单独的线程中完成,可多次调用
销毁——————————destroy() 只调用一次,通常在停止WEB应用或者是Web应用重启时
(1)实例化(两种时机):
A.配置了<load-on-startup>元素,启动应用时实例化
其中,配置数值建议从1开始计数,值越小,载入的优先级越高。
优先级提倡从1开始,1以下的数字,有些容器不理会。负数则被认为是“默认”。
B.如果没有配置,则在第一次请求时才实例化
(2)初始化——init()/init(ServletConfig config)
实例化之后,容器马上调用init()方法来初始化。
对 Servlet 将要使用的资源作初始化,如读入配置文件信息等(只执行一次)。
在初始化过程中,容器会创建 ServletConfig 对象并把它作为 init 方法的参数传入。
该配置对象允许 servlet 从访问 Web 应用的配置信息中读取出初始化参数的名-值对。
Servlet 提供2个初始化方法: init() 和 init(ServletConfig config) 。
(3)请求处理——service()
初始化后,容器会调用 servlet 的 service()方法,向客户端提供服务
service()能够被多客户端多次调用(每个请求都要执行一次)
(4)销毁——destroy()
在Web Container停止 Web App 或 WebApp 被停止/reload 时调用此方法。
4.ServletConfig & ServletContext
(1)ServletConfig
servlet访问配置数据的一个对象,由容器创建,每个servlet独享
仅对本 servlet 有效,一个 servlet 的 ServletConfig 对象不能被另一个 servlet 访问。
主要用来读取 web.xml 中配置的Servlet初始信息,不能被其它 Servlet 共享。还可以用于访问 ServletContext。
(2)ServletContext
ServletContext 是多个 Servlet 共享数据的对象。
对同一个 Web 应用中的任何 servlet,在任何时间都有效。
对应整个 Web Application 运行环境,可以用来读取 web.xml 中配置的应用初始信息,写日志,共享数据等
ServletContext 被所有 Servlet 共享。可以理解为真正意义上的全局对象
(3)如何获取ServletConfig
A.init(ServletConfig config){.....}
容器在Servlet初始化之前已经创建了ServletConfig
但如果Override此方法,需要记得调用:super.init(config);//其实是调用GenericServlet的init(config)
//这里的config只是方法内部的变量。如果其它方法中需调用,还得:this.config=config;给成员变量的config赋值
B.其他地方(包括在init()方法中),可以使用Servlet API本身的方法
this.getServletConfig(); //任何方法中都可以调用,包括init(ServletConfig config)方法
注:这也是为什么把这个知识点放在这里的原因
(4)如何获取ServletContext
A.config.getServletContext();//前提是config在之前已获取
B.Servlet API提供了 this.getServletContext();//没有config也可以用
(5)注意:不能在Servlet中使用this.getServletConfig或者this.getServletContext()来初始化成员变量
因为创建成员变量优先于构造方法和init方法;而 config 和 context 只有调用了 init 方法之后才初始化
(6)利用ServletContext.log()来写日志
如:this.log("String"+(new Date()));
(7)例子
使用ServletContext来获取<context-param>参数
使用SerlvetConfig来获取Servlet的<init-param>
5.产生动态内容的另一个方面:根据业务逻辑进行请求传递(页面跳转)
RequestDispatcher(请求分发器)
————forward(request, response)//跳转到其他资源
————include(request, response)//包含其他资源
如何获取RequestDispatcher
request.getRequestDispatcher(page)
servletcontext.getRequestDispatcher(page);
两者之间的区别?(后面会详细讲述)
如何利用IDE开发(构建)一个web project
部署web project到Tomcat
————结果是把WebRoot下的内容打成包,发布到webapps中
2.在集成环境开发过程中的注意事项
如果修改了Java文件(修改了方法签名除外),无需重启,也无需重部署
如果修改了html文件,无需重启,但需要重部署
修改了web.xml,系统会自动重部署
3.Servlet的生命周期
生命周期有哪几个过程(4个)?
每个过程都对应有特殊的生命周期方法
装载&实例化————构造方法
初始化————————init() 只调用一次,并且在service()之前完成
处理请求———————service() 处理客户的请求,每个请求都在单独的线程中完成,可多次调用
销毁——————————destroy() 只调用一次,通常在停止WEB应用或者是Web应用重启时
(1)实例化(两种时机):
A.配置了<load-on-startup>元素,启动应用时实例化
其中,配置数值建议从1开始计数,值越小,载入的优先级越高。
优先级提倡从1开始,1以下的数字,有些容器不理会。负数则被认为是“默认”。
B.如果没有配置,则在第一次请求时才实例化
(2)初始化——init()/init(ServletConfig config)
实例化之后,容器马上调用init()方法来初始化。
对 Servlet 将要使用的资源作初始化,如读入配置文件信息等(只执行一次)。
在初始化过程中,容器会创建 ServletConfig 对象并把它作为 init 方法的参数传入。
该配置对象允许 servlet 从访问 Web 应用的配置信息中读取出初始化参数的名-值对。
Servlet 提供2个初始化方法: init() 和 init(ServletConfig config) 。
(3)请求处理——service()
初始化后,容器会调用 servlet 的 service()方法,向客户端提供服务
service()能够被多客户端多次调用(每个请求都要执行一次)
(4)销毁——destroy()
在Web Container停止 Web App 或 WebApp 被停止/reload 时调用此方法。
4.ServletConfig & ServletContext
(1)ServletConfig
servlet访问配置数据的一个对象,由容器创建,每个servlet独享
仅对本 servlet 有效,一个 servlet 的 ServletConfig 对象不能被另一个 servlet 访问。
主要用来读取 web.xml 中配置的Servlet初始信息,不能被其它 Servlet 共享。还可以用于访问 ServletContext。
(2)ServletContext
ServletContext 是多个 Servlet 共享数据的对象。
对同一个 Web 应用中的任何 servlet,在任何时间都有效。
对应整个 Web Application 运行环境,可以用来读取 web.xml 中配置的应用初始信息,写日志,共享数据等
ServletContext 被所有 Servlet 共享。可以理解为真正意义上的全局对象
(3)如何获取ServletConfig
A.init(ServletConfig config){.....}
容器在Servlet初始化之前已经创建了ServletConfig
但如果Override此方法,需要记得调用:super.init(config);//其实是调用GenericServlet的init(config)
//这里的config只是方法内部的变量。如果其它方法中需调用,还得:this.config=config;给成员变量的config赋值
B.其他地方(包括在init()方法中),可以使用Servlet API本身的方法
this.getServletConfig(); //任何方法中都可以调用,包括init(ServletConfig config)方法
注:这也是为什么把这个知识点放在这里的原因
(4)如何获取ServletContext
A.config.getServletContext();//前提是config在之前已获取
B.Servlet API提供了 this.getServletContext();//没有config也可以用
(5)注意:不能在Servlet中使用this.getServletConfig或者this.getServletContext()来初始化成员变量
因为创建成员变量优先于构造方法和init方法;而 config 和 context 只有调用了 init 方法之后才初始化
(6)利用ServletContext.log()来写日志
如:this.log("String"+(new Date()));
(7)例子
使用ServletContext来获取<context-param>参数
使用SerlvetConfig来获取Servlet的<init-param>
5.产生动态内容的另一个方面:根据业务逻辑进行请求传递(页面跳转)
RequestDispatcher(请求分发器)
————forward(request, response)//跳转到其他资源
————include(request, response)//包含其他资源
如何获取RequestDispatcher
request.getRequestDispatcher(page)
servletcontext.getRequestDispatcher(page);
两者之间的区别?(后面会详细讲述)