一、引言

servlet是javaweb中三大组件之一,必须重中之重,打好基础==

二、Servlet继承关系

Servlet是一个interface,全局限定名:javax.servlet.Servlet,其子接口为:HttpJspPage,JspPage,其实现类为:FacesServlet(fianl),GenericServlet(abstract),HttpServlet(abstract)。抽象类GenericServlet直接 implements Servlet,抽象类HttpServlet直接 extends GenericServlet,它们具有统一的方法(继承于Servlet):

◆ void init(ServletConfig config) throwsServletException

ServletConfig getServletConfig()

◆ void service(ServletRequest request,ServletResponse response) throws ServletException, IOException

◆ String getServletInfo()

◆ void destroy()

public abstract class GenericServlet extends Object implements Servlet,ServletConfig,Serializable:

GenericServlet有两个重载的init方法,无参的init方法一定会被调用,目的是为了保证Servlet的正确初始化,有参的init方法提供自定义初始化。

◆ public void init() throws ServletException

◆ public void init(ServletConfig config) throwsServletException

GenericServlet的service方法是抽象方法:

◆ public abstract void service(ServletRequest req,ServletResponse res) throws ServletException, IOException

public abstract class HttpServlet extends GenericServlet:

HttpServlet有两个重载的service方法,其protected的是可以被子类继承重写的(没必要override,一般override doXXX方法),其public的是负责接收容器转发传入的client requests,然后Dispaches给protected的,protected的最后调用doXXX方法,完成请求接收处理。也可以直接override(重写) protected的,在重写的service方法中完成请求接收处理,而不去最后调用doXXX方法。

 protected void service(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException

◆ public void service(ServletRequest req,ServletResponse res) throws ServletException, IOException

三、httpservlet

当包容器为一个servlet收到一个请求时,包容器调用公共的service方法在把参数转换为httpservirequest,httpservletresponse 后,这个公共的方法调用保护的service根据http请求方法的类型,保护的service方法调用doxxxx()方法之一.   
doget()方法是当得到一个get类型的请求时调用 
dopost()方法是当得到一个post类型的请求时调用 

httpservlet是从genericservlet继承而来,因此httpservlet也有init和destroy这两个生命周期函数以及service方法,只是httpservlet还有两个重要的dopost方法和doget方法,并用他们来支持http的post和get方法,就是说如果要支持http的get方法,就要覆盖doget方法,如果要支持http的post方法,就要覆盖dopost方法。

四、相关变量

1.ServletContext

ServletContext是servlet与servlet容器之间的直接通信的接口。Servlet容器在启动一个Webapp时,会为它创建一个ServletContext对象,即servlet上下文环境。每个webapp都有唯一的ServletContext对象。同一个webapp的所有servlet对象共享一个ServeltContext,servlet对象可以通过ServletContext来访问容器中的各种资源。
ServletContext接口提供的方法分为以下几种类型:
用于在Webapp范围内存取共享数据的方法。
注:webapp范围具有以下两层含义:
(1) 表示有webapp的生命周期构成的时间段。
(2) 表示在webapp的生命周期内所有web组件的集合。
◆ setAttribute(String name, Java.lang.Object object):以键值对的形式,把一个java对象和一个属性名绑定,并存放到ServletContext中,参数name指定属性名,参数Object表示共享数据。
◆ getAttribute(String name):根据参数给定的属性名,返回一个Object类型的对象。
◆ getAttributeNames():返回一个Enumeration对象,该对象包含了所有存放在ServletContext中的属性名。
◆ removeAttribute(String name):根据参数指定的属性名,从servletContext对象中删除匹配的属性。

访问当前Webapp的资源

◆ getContextpath():返回当前webapp的URL入口。
◆ getInitParameter(String name):返回webapp配置文件中匹配的初始化参数值。在web.xml中<web-app>元素中<context-param>子元素表示Webapp应用范围内的初始参数。
◆ getInitParameterNames():返回一个Enumeration对象,该对象包含了所有存放在web.xml中<web-app>元素中<context-param>子元素的初始化参数名。
◆ getServletContextName():返回webapp名称。即<web-app>元素中<display-name>子元素的值。
◆ getRequestDispatcher(String path):返回一个用于向其他web组件转发请求的RequestDispatcher对象。

访问servlet容器的相关信息

◆ getContext(String uripath):根据参数指定的url,返回当前servlet容器中其他web应用的servletContext()对象。

访问web容器的相关信息

◆ getMajorVersion():返回servlet容器支持的Java servlet API 的主版本号。
◆ getMinorVersion():返回servlet容器支持的java Servlet API的次版本号。
◆ getServerInfo():返回servlet容器的名字和版本。

访问服务器端的文件系统资源

◆ getRealPath(String path):根据参数指定的虚拟路径,返回文件系统中的一个真实的路径。
◆ getResource(String path):返回一个映射到参数指定的路径的url。
◆ getResourceAsStream(String path):返回一个用于读取参数指定的文件的输入流。(把文件读到输入流中去)
◆ getMimeType(String file):返回参数指定的文件的MIME类型。

输出日志

◆ log(String msg):向servlet的日志文件中写日志。
◆ log(String message, java.lang.Throwable   throwable):向servlet的日志文件中写错误日志,以及异常的堆栈信息。

ServletContext对象获得几种方式:

javax.servlet.http.HttpSession.getServletContext() 
        javax.servlet.jsp.PageContext.getServletContext() 
        javax.servlet.ServletConfig.getServletContext()

以上是servlet2.5版本及以前的获取方法。

servlet3.0中新增方法:

javax.servlet.ServletRequest.getServletContext()

2.ServletConfig

Jsp/Servlet容器初始化一个Servlet类型的对象时,会为这个Servlet对象创建一个ServletConfig对象。在ServletConfig对象中包含了Servlet的初始化参数信息。此外,ServletConfig对象还与ServletContext对象关联。Jsp/Servlet容器在调用Servlet对象的init(ServletConfig config)方法时,会把ServletConfig类型的对象当做参数传递给servlet对象。Init(ServletConfig config)方法会使得当前servlet对象与ServletConfig类型的对象建立关联关系。

ServletConfig接口中定义了以下方法:

◆ getInitParameter(String   name):根据给定的初始化参数,返回匹配的初始化参数值。
◆ getInitParameterNames():返回一个Enumeration对象,该对象包含了所有存放在web.xml中<web-app>元素<servlet>子元素<init-param>中的所有的初始化参数名。
◆ getServletContext():返回一个servletContext()对象,
◆ getServltName():返回servlet的名字,即web.xml中的相对应的servlet的子元素<servlet-name>的值。如果没有配置这个子元素,则返回servlet类的全局限定名。
Example:

<servlet>

<servlet-name>actionServlet</servlet-name>

<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
           <param-name>first</param-name>
           <param-value>netfish</param-value>
        </init-param>
        <init-param>
           <param-name>last</param-name>
           <param-value>blog</param-value>
        </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>actionServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

如上,红色标记处为初始化参数,相当于servlet共享参数。
在servlet中:

public class BlogServlet extends HttpServlet {
    String first = this.getInitParameter("first");
    String last = this.getInitParameter("last");
    System.out.println("第一个参数:" + first + "第二个参数:" + last);
}
注:HttpServlet类继承了GenericServlet类,而GenericServlet类实现了ServletConfig接口,因此在HttpServlet类和GenericServlet类及子类中都可以直接调用ServletConfig接口中的方法。

从作用范围来说,ServletConfig作用于某个特定的Servlet,即从该Servlet实例化,那么就开始有效,但是该Servlet之外的其他Servlet不能访问;ServletContext作用于某个webapp,即在一个webapp中相当于一个全局对象,在Servlet容器启动时就已经加载,对于不同的webapp,有不同的ServletContext。

五、servlet配置

如果新建完servlet之后要在web.xml中继续宁servlet的配置才可以访问,不过最近的servlet3不用了,省去了这一步骤

六、总结

  • 介绍servlet及其继承关系;
  • 重点介绍httpservlet;
  • 介绍servletcontext与servletconfig;
  • servlet配置原理

JavaWeb——servlet介绍相关推荐

  1. [javaweb] servlet介绍与servlet的继承关系 和 service 方法 (一)

    Servlet servlet是Server Applet的简称,servlet是运行在服务器上的一个小程序,用来处理服务器请求的.一般的网页程序,是通过浏览器访问来实现的,在这个过程中,浏览器发送访 ...

  2. Servlet 介绍

    Servlet 介绍: 问题: 服务器在接收到浏览器的请求后,会自动调用对应的逻辑代码进行请求 处理.但是逻辑代码是由程序员编写并放到服务器中,那么服务器怎么知道该怎么调用并调用哪个类和哪个方法来进行 ...

  3. Javaweb servlet体系结构与原理剖析

    Javaweb servlet体系结构与原理剖析 1.Servlet的工作过程 2.Servlet体系结构 3.Servlet工作原理 4.Servlet生命周期 1.Servlet的工作过程 当用户 ...

  4. Javaweb Servlet 下载文件

    JavaWeb Servlet 实现下载文件 Servlet类 import javax.servlet.ServletException; import javax.servlet.ServletO ...

  5. javaweb(servlet)+jsp+Mysql实现的简单相册管理系统(功能包含登录、管理首页、添加图片、分类管理、修改密码、图片详情等)

    博客目录 javaweb(servlet)+jsp+Mysql实现的简单相册管理系统 实现功能截图 系统功能 使用技术 代码 完整源码 javaweb(servlet)+jsp+Mysql实现的简单相 ...

  6. javaweb(servlet)+jsp+Mysql实现的酒店客房管理系统(功能包含登录、用户管理、住客信息管理、房型管理、房间管理、会员星级管理、订单管理等)

    博客目录 javaweb(servlet)+jsp+Mysql实现的酒店客房管理系统 实现功能截图 系统功能 使用技术 代码 完整源码 javaweb(servlet)+jsp+Mysql实现的酒店客 ...

  7. JavaWeb——Servlet(全网最详细教程包括Servlet源码分析)

    JavaWeb--Servlet Tomcat工作机制动画演示(点击动图可全屏观看) 什么是Servlet Servlet(Server Applet),全称Java Servlet,未有中文译文.是 ...

  8. JavaWeb Servlet 登录功能 注销功能

    JavaWeb Servlet 登录功能 注销功能 有三个逻辑: 处理登陆的逻辑,用户主页的逻辑,退出登录逻辑 登陆的逻辑LoginServlet.java import java.io.IOExce ...

  9. JavaWeb项目介绍

    web项目:通俗的说就是在服务器上跑的项目,页面是通过服务器上的程序运算所得到的结果.常见的web项目按计算机语言分,有:Java Web(Java EE).ASP.Net.PHP项目. JavaWe ...

最新文章

  1. nfc reader 卡密_红外NFC+50倍变焦,一款被严重低估的王牌?
  2. [CentOS7]redis设置开机启动,设置密码
  3. python调用math函数log_Python中求对数方法总结
  4. python里元组和列表的共同点和不同点_Python列表和元组的相同点和不同点是什么...
  5. python新手入门教程-Python简明入门教程
  6. java web项目的目录结构以及各文件夹的功能是什么eclipse的web目录及各作用
  7. 推荐一个包含大量PDF编程电子书的github仓库
  8. 关于Python3.6下登陆接口的尝试
  9. 如何在blog中添加背景音乐
  10. Java-图片处理 Gif转Jpg
  11. signature=2850cfcfebaece38f3ee6f56047eb922,A characteristic metabolic signature of breast cancer
  12. 【博学谷学习记录】超强总结,用心分享 | shell基础
  13. 使用EasyPoi导入导出Excel
  14. 英伟达RTX 4070最新测评来了!光追效果更棒,但仅限于2k游戏
  15. java中的集合框架
  16. 一个大数据架构师应该掌握的技能
  17. Windows 底下安装 git Server: Bonobo Git Server
  18. 一段话描述相控阵论文要点(持续学习更新中...)
  19. 视频怎么加水印,视频加水的快速方法
  20. 虚拟机中CentOS 7安装过程

热门文章

  1. 麦克纳姆轮全向移动机器人运动学模型应用
  2. python做病毒传播的空间数据_利用4行Python代码监测每一行程序的运行时间和空间消耗...
  3. 字符串型String
  4. 固定定位小技巧(HTML、CSS)
  5. 使用可视化SQLyog操作数据库与使用idea操作数据库的区别
  6. Unity PointCloud开发:Mesh渲染点云
  7. 数据库学习--DDL(数据库定义语言)
  8. Halcon 仿射变换
  9. 【Web crawler】simulated DFS web crawler
  10. 关于sql server 的那些事