ServletContext
ServletContext指javax.servlet.ServletConfig接口

ServletContext对象由服务器创建,Tomcat服务器对ServletContext接口的实现类完整类名是:org.apache.catalina.core.ApplicationContextFacade

ServletContext意为servlet的上下文环境,servletContext对象对应着整个项目,该对象只有一个且被所有servlet共享,servletContext对象对应着web.xml文件,例如:

web.xml文件服务器启动阶段被解析,servletContext对象在服务器启动阶段被创建,在服务器关闭时被销毁

ServletContext中的常用方法

/**
根据参数的名称获取value,均为字符串
<context-param><param-name>driver</param-name><param-value>com.mysql.jdbc.driver</param-value>
</context-param>
*/
String getInitParameter(String paraname);
//与ServletConfig中的方法作用相同
Enumeration<String> getInitParameterNames();
//向ServletContext对象中添加数据
void setAttribute(String name, Object obj);
//根据name从ServletContext对象中获取数据
Object getAttribute(String name);
//从ServletContext对象中移除数据
void removeAttribute(String name);
//获取文件绝对路径
String getRealPath(String path);

ServletContext与ServletConfig的区别与联系

(此部分引用原文链接:https://blog.csdn.net/zxc412728/article/details/121325368 )

每一个servlet对象对应着一个servletConfig对象;所有的servlet对象共同对应着一个servletContext对象
servletConfig中包含了所对应的servlet的参数配置信息;servletContext中包含了整个项目的参数配置信息,所有的servlet共享该配置信息
servletConfig和servletContext对应的参数配置信息均在web.xml文件中,位置如下:

GenericServle(适配器)

GenericServlet即通用Servlet,是一个抽象类,实现了Servlet接口

GenericServlet的设计目的

GenericServlet的设计采用了适配器设计模式
1.在GenericServlet没有出现之前,我们编写的Servlet类需要直接实现Servlet接口,但是这个接口中有些方法是目前不需要的,有些操作又是每个Servlet类必备的,例如在init()方法中给config成员赋值,我们大多数情况只需要编写不同的service()方法。直接实现Servlet接口的代码丑陋,有必要在中间添加一个适配器,以后所有的Servlet类不再直接实现Servlet接口,而而是去继承GenericServlet
2.GenericServlet中只含有一个抽象方法,即service(),子类必须实现,编写业务逻辑
GenericServlet中提供了一个重载的无参数的init()方法,若想在servlet初始化时执行一段特殊的代码,建议重写此无参数的init()方法。
3.除了让代码变得优雅之外,GenericServlet中又提供了一些额外的方法,例如:public String getInitParameter(String name);、public ServletContext getServletContext();子类继承之后,可以在子类中直接使用,方便编程。

HttpServlet

HttpServlet是一个模板类、抽象类,继承于GenericServlet

HttpServlet设计目的

1.HttpServlet是针对于HTTP协议的,为了处理http请求和响应。不同类型的请求会由不同类型的Servlet处理,对于JavaWeb程序员,我们只需要关注HttpServlet即可。
2.为了使前后端的请求方式相同,我们需要在后端获取请求方式,然后进行判断前端发送的请求是否为规定的请求方式,如果不是规定的请求方式,就会报错;
3.为了实现上述功能,需要在每一个GenericServlet的子类中编写实现此功能的代码,代码臃肿;为了解决这个问题,Sun公司提供了HttpServlet抽象类封装了实现上述功能的代码。

 HttpServlet执行流程

1.service(ServletRequest req, ServletResponse res)方法将两个参数转化为HttpServletRequest和HttpServletResponse类型的。
2.service(HttpServletRequest request, HttpServletResponse response)方法获取请求方法;判断,如果是Get请求就执行doGet()方法,如果是Post请求就执行doPost()方法doGet()/doPost()执行业务代码。
注意:HttpServlet提供的doGet()方法和doPost()方法是用来报错的、是用来让我们重写的

模板方法设计模式

模版方法设计模式属于行为行设计模式
模版方法有一个特点:doXXX()
模板方法设计模式的主要作用:

核心算法得到保护
核心算法得到复用
在不改变算法的前提下,却可以重新定义算法步骤的具体实现
模板方法设计模式的例子:

Servlet规范中的HttpServlet
HttpServlet就是一个典型的模板方法设计模式
HttpServlet是一个模板类
其中的service(HttpServletRequest, HttpServletResponse)方法是典型的模板方法,该方法中定义了核心算法骨架,doGet()、doPost()…具体的实现细节延迟到子类中完成

对HttpServlet的总结:

我们的Servlet继承HttpServlet后,后端需要的是什么请求,那么我们就重写对应的doPost()/doGet()方法
doPost()/doGet()方法内就是我们的业务代码,doXXX()可以看作main()方法
代码不在service()内编写了,不需要重写service()方法
HttpServlet中重载的两个service()方法并不需要也没有理由去重写这两个方法
当浏览器发送的请求方式和后台处理方式不同时,会出现一个错误,代号:405

(此部分引用原文链接:https://blog.csdn.net/zxc412728/article/details/121325368 )

servlet的认识和了解(3)相关推荐

  1. Ajax接收Java异常_java – 处理来自Servlet的Jquery AJAX响应中的异常

    我的servlet代码是 try{ //something response.setStatus(201); out.print("Data successfully saved" ...

  2. JavaEE学习笔记之Servlet

    同一用户的不同页面的共享数据 1.1 cookie技术 1.2 sendRedirect()转向 1.3 隐藏表单 1.4 session技术 ###session技术: 当用户打开浏览器,访问某个网 ...

  3. 【JavaWeb】servlet与http请求协议

    Servlet: 概念: server applet (服务端小程序)运行在服务器端的小程序 Servlet就是一个接口,定义了Java类被浏览器访问到(Tomcat识别)的规则. 将我我们自定义一个 ...

  4. 使用最新版(2020)IntelliJ IDEA 创建Servlet项目

    一:选择左上端的File,创建Project,选择创建Web Application 项目: 注:不勾选Create web.xml 二:设置项目名称:helloworld,并创建一个Servlet( ...

  5. 2020了,还要学JSP嘛?入个门呗!毕竟Servlet亲兄弟~

    目录 1.什么是JSP 2.JSP原理 3.JSP基础语法 jsp表达式 jsp脚本片段 jsp声明 jsp注释 4.JSP指令 5.JSP行为 6.9大内置对象 7.EL表达式 格式 变量 [ ]与 ...

  6. 来谈谈Servlet~~

    目录 1.Servlet简介 2.第一个Servlet程序 3.Servlet原理 4.servlet-mapping的配置 5.关于ServletContext 1.共享数据 2.获取初始化参数 3 ...

  7. 使用Servlet完成单表的CRUD

    实现步骤 第一步:准备一张数据库表.(sql脚本) 第二步:准备一套HTML页面(项目原型)[前端开发工具使用HBuilder] 第三步:分析我们这个系统包括哪些功能 第四步:在IDEA当中搭建开发环 ...

  8. 适配器(GenericServlet)改造Servlet

    JavaWeb系列教程 JavaWeb-Servlet 模拟Servlet本质 使用IDEA开发Servlet程序 Servlet对象的生命周期 适配器(GenericServlet)改造Servle ...

  9. 使用IDEA开发Servlet程序

    JavaWeb系列教程,持续更新 JavaWeb-Servlet 模拟Servlet本质 使用IDEA开发Servlet程序 Servlet对象的生命周期 适配器(GenericServlet)改造S ...

  10. 模拟Servlet本质

    JavaWeb系列教程,持续更新 JavaWeb-Servlet 模拟Servlet本质 使用IDEA开发Servlet程序 Servlet对象的生命周期 适配器(GenericServlet)改造S ...

最新文章

  1. NOIP模拟题 斐波那契数列
  2. python学习手册翻译很差吗-为什么要翻译?值得坚持下去么?
  3. 网络工程师成长日记365-IBIS西安工程回忆录
  4. lucene源码分析(1)基本要素
  5. UI组件之 ProgressBar及其子类(一)ProgressBar进度条的使用
  6. 通过PROC信息调节TCP窗口
  7. 关键字—修饰方法、类、属性和变量的关键字(共9个)
  8. as it exceeds the max of 500KB._IT狂人第一季 | 如何考察员工
  9. mfc中的.rc和.rc2出错fatal error RC1015: cannot open include file 'res\ModalD
  10. flink整合java,Flink使用SideOutPut替换Split实现分流
  11. 如何使用git管理crontab任务
  12. ★_当第二次检测时我的65047777
  13. Synergy Mac和Win键盘映射
  14. Dest0g3 520迎新赛部分WP
  15. IDEA主题配置--- 炫酷的主题字体颜色设置(基于Intellij IDEA 2018)
  16. php语音直播怎么做,语音直播功能实现流程
  17. 企业选择服务器托管的优势
  18. 做人要厚道--只针对富|士|康进行批判是掩耳盗铃的把戏-之一
  19. 随机生成6位数字(包括字母和数字)
  20. 关于jQuery方法间调用的返回值问题

热门文章

  1. Unity3D学习日记6
  2. 达达集团IPO,新零售基础设施第一股
  3. dellr420部署os_Dell R420 RAID建立以及系统安装
  4. awk使用手册(全)
  5. 使用NPOI做Excel简单报表
  6. C语言编程统计八皇后问题的解的个数,八皇后问题C语言解法
  7. 记录: 问题:/usr/bin/ld: main.o: Relocations in generic ELF (EM: 183)
  8. 06 聚类算法 - 代码案例二 - K-Means算法和Mini Batch K-Means算法比较
  9. windows 下使用nginx 实现负载均衡
  10. CPU性能衡量参数 主频、MIPS、CPI