卷妹的成长日记之javaweb day3
👩💻博客主页:京与旧铺的博客主页
✨欢迎关注🖱点赞🎀收藏⭐留言✒
🔮本文由京与旧铺原创,csdn首发!
😘系列专栏:java学习
👕参考网站:动力节点
💻首发时间:🎞2022年7月30日🎠
🎨你做三四月的事,八九月就会有答案,一起加油吧
🀄如果觉得博主的文章还不错的话,请三连支持一下博主哦
🎧最后的话,作者是一个新人,在很多方面还做的不好,欢迎大佬指正,一起学习哦,冲冲冲
💬推荐一款模拟面试、刷题神器👉
🛒导航小助手🎪
GenericServlet
-
我们编写一个Servlet类直接实现Servlet接口有什么缺点?
-
我们只需要service方法,其他方法大部分情况下是不需要使用的。代码很丑陋。
-
-
适配器设计模式Adapter
-
手机直接插到220V的电压上,手机直接就报废了。怎么办?可以找一个充电器。这个充电器就是一个适配器。手机连接适配器。适配器连接220V的电压。这样问题就解决了。
-
-
编写一个GenericServlet类,这个类是一个抽象类,其中有一个抽象方法service。
-
GenericServlet实现Servlet接口。
-
GenericServlet是一个适配器。
-
以后编写的所有Servlet类继承GenericServlet,重写service方法即可。
-
-
思考:GenericServlet类是否需要改造一下?怎么改造?更利于子类程序的编写?
-
思考第一个问题:我提供了一个GenericServlet之后,init方法还会执行吗?
-
还会执行。会执行GenericServlet类中的init方法。
-
-
思考第二个问题:init方法是谁调用的?
-
Tomcat服务器调用的。
-
-
思考第三个问题:init方法中的ServletConfig对象是谁创建的?是谁传过来的?
-
都是Tomcat干的。
-
Tomcat服务器先创建了ServletConfig对象,然后调用init方法,将ServletConfig对象传给了init方法。
-
-
思考一下Tomcat服务器伪代码:
-
public class Tomcat { public static void main(String[] args){ // ..... // Tomcat服务器伪代码 // 创建LoginServlet对象(通过反射机制,调用无参数构造方法来实例化LoginServlet对象) Class clazz = Class.forName("com.bjpowernode.javaweb.servlet.LoginServlet"); Object obj = clazz.newInstance(); // 向下转型 Servlet servlet = (Servlet)obj; // 创建ServletConfig对象 // Tomcat服务器负责将ServletConfig对象实例化出来。 // 多态(Tomcat服务器完全实现了Servlet规范) ServletConfig servletConfig = new org.apache.catalina.core.StandardWrapperFacade(); // 调用Servlet的init方法 servlet.init(servletConfig); // 调用Servlet的service方法 // .... } }
-
-
ServletConfig
-
什么是ServletConfig?
-
Servlet对象的配置信息对象。
-
ServletConfig对象中封装了<servlet></servlet>标签中的配置信息。(web.xml文件中servlet的配置信息)
-
-
一个Servlet对应一个ServletConfig对象。
-
Servlet对象是Tomcat服务器创建,并且ServletConfig对象也是Tomcat服务器创建。并且默认情况下,他们都是在用户发送第一次请求的时候创建。
-
Tomcat服务器调用Servlet对象的init方法的时候需要传一个ServletConfig对象的参数给init方法。
-
ServletConfig接口的实现类是Tomcat服务器给实现的。(Tomcat服务器说的就是WEB服务器。)
-
ServletConfig接口有哪些常用的方法?
-
public String getInitParameter(String name); // 通过初始化参数的name获取value public Enumeration<String> getInitParameterNames(); // 获取所有的初始化参数的name public ServletContext getServletContext(); // 获取ServletContext对象 public String getServletName(); // 获取Servlet的name
-
以上方法在Servlet类当中,都可以使用this去调用。因为GenericServlet实现了ServletConfig接口。
-
ServletContext
-
一个Servlet对象对应一个ServletConfig。100个Servlet对象则对应100个ServletConfig对象。
-
只要在同一个webapp当中,只要在同一个应用当中,所有的Servlet对象都是共享同一个ServletContext对象的。
-
ServletContext对象在服务器启动阶段创建,在服务器关闭的时候销毁。这就是ServletContext对象的生命周期。ServletContext对象是应用级对象。
-
Tomcat服务器中有一个webapps,这个webapps下可以存放webapp,可以存放多个webapp,假设有100个webapp,那么就有100个ServletContext对象。但是,总之,一个应用,一个webapp肯定是只有一个ServletContext对象。
-
ServletContext被称为Servlet上下文对象。(Servlet对象的四周环境对象。)
-
一个ServletContext对象通常对应的是一个web.xml文件。
-
ServletContext对应显示生活中的什么例子呢?
-
一个教室里有多个学生,那么每一个学生就是一个Servlet,这些学生都在同一个教室当中,那么我们可以把这个教室叫做ServletContext对象。那么也就是说放在这个ServletContext对象(环境)当中的数据,在同一个教室当中,物品都是共享的。比如:教室中有一个空调,所有的学生都可以操作。可见,空调是共享的。因为空调放在教室当中。教室就是ServletContext对象。
-
-
ServletContext是一个接口,Tomcat服务器对ServletContext接口进行了实现。
-
ServletContext对象的创建也是Tomcat服务器来完成的。启动webapp的时候创建的。
-
- 点赞
- 收藏
- 关注作者
评论(0)