概念

Servlet是在服务器上运行的小程序。一个Servlet请求对应一个Java类(对应一个Wrapper容器),可以通过请求-响应模式访问这个驻留在内存中的小程序。

Tomcat容器等级


上图表示各容器的包含关系(有底色的为容器等级)
Tomcat容器等级分为4级:Engine、Host(对应一个虚拟主机)、Context(对应一个Web工程)、Wrapper(对应一个Servlet)

Servlet编写步骤

1、继承HttpServlet
2、重写doGet或doPost方法
3、在web.xml中注册Servlet(和过滤器类似)

Servlet声明周期


上图为Get请求到返回的流程示意

上图为生命周期示意图

声明周期

1、初始化,加载到内存并创建实例,然后调用init(),只会调用一次。
2、响应客户端请求,调用service(),由service根据请求方式调用doGet或doPost
3、服务器关闭时销毁,destroy()

装载时的三种情况

1、随servlet容器启动时装载,需要在web.xml的servlet标签下配置loadon-startup等级,数字越小等级越高,最高1级。
2、在servlet容器启动后,在客户首次访问servlet时装载。
3、当servlet类被重新修改过后,所有随启动装载的servlet都会重新装载。

Servlet获取9大内置对象


Servlet路径跳转

相对路径

当超链接调转,或表单action时,/代表服务器根目录(没有工程名);不加/,如“servlet/HelloServlet”表示当前目录下的路径
当servlet中response.sendRedirect()时,使用/表示服务器根目录,如“/test.jsp”会访问失败
当servlet中request.getRequestDispatcher("/index.jsp").forward(request, response),使用/表示工程根目录,该例访问成功
当web.xml配置时,/代表工程根目录,一定要加

绝对路径

当超链接跳转,或表单action时,可以使用request.getContextPath获取工程根目录,拼接绝对路径如path+"/servlet/HelloServlet"
当servlet中response.sendRedirect()时,使用request.getContextPath获取工程根目录,拼接绝对路径如path+"/test.jsp"
当servlet中request.getRequestDispatcher(path+"index.jsp").forward(request, response),使用path会有两个根路径,该例访问失败

总结:
当从客户端访问时(如超链接、action、sendRedirect),默认路径为服务器根目录,最好加Path获取工程根目录拼接绝对路径
当在服务器上时(如getRequestDispatcher、web.xml),默认路径为工程根目录,可以直接使用/来拼接相对路径

获取初始化参数

1、在web.xml中配置servlet初始化参数(注意!!init-param一定要跟在servlet-class后面,否则会报错)
2、在servlet中使用this.getInitParameter获取


MVC模型

Model2(对应于Model1)

JavaWeb【Servlet】的更多相关文章

  1. 【Servlet】(1)Servlet简介、Servlet底层原理、Servlet实现方式、Servlet生命周期

    一.Servlet简介 1.Servlet定义: Servlet(Server Applet)是Java Servlet的简称,是为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交 ...

  2. 【Servlet】把文件写到Respond输出流里面供用户下载

    本文区分于<[Jsp]把Java写到Respond输出流里面供用户下载>(点击打开链接)把原本该打印到控制台的内容,直接打印到一个文本文件txt中给用户下载. 实际上是<[Strut ...

  3. 【Servlet】Servlet监听器

    一.Servlet监听器的概念 Servlet监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext.HttpSession和ServletRequest等域对象的创建与销 ...

  4. 【Servlet】JavaWeb应用的执行流程

    Tomcat与Servlet简介 Tomcat Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.S ...

  5. 【Servlet】doGet()与doPost()的区别

    doGet与doPost的区别 .Servlet接口只定义了一个服务方法--service .当发出客户端请求时,调用service方法并传递一个请求和响应对象 .使用时经常在doPost()中调用d ...

  6. 【Servlet】Servlet应用的get、post访问及和JSP的配合使用

    Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面. 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用 ...

  7. 【Servlet】Filter过滤器的编写和配置

    Servlet的Filter介绍 在Servlet作为过滤器使用时,它可以对客户的请求进行过滤处理,当它处理完成后,它会交给下一个过滤器处理,就这样,客户的请求在过滤链里一个个处理,直到请求发送到目标 ...

  8. 【servlet】客户端是否可以访问到WEB-INF下的jsp文件

    一般情况下(不考虑出现安全问题被入侵,那样啥都能访问到),WEB-INF下的jsp文件单凭浏览器端请求时访问不到的. 想访问的话需要通过服务端servlet的转发. 下面通过转发和重定向的尝试来观察访 ...

  9. 【servlet】 过滤器模板

    EncodingFilter.java package Filter; import java.io.IOException; import javax.servlet.Filter; import ...

随机推荐

  1. [Kerberos] Kerberos教程(二)

    4 Kerberos操作 最后,在获得前面段落中描述的概念后,可以讨论Kerberos如何运作.我们将通过列出和描述在身份验证期间在客户端和KDC之间以及客户端和应用程序服务器之间的每个数据包来执行此 ...

  2. Delphi通过ADO读写数据库

    ADO是一种程序对象,用于表示用户数据库中的数据结构和所包含的数据. ADO (ActiveX Data Objects,ActiveX数据对象)是Microsoft提出的应用程序接口(API)用以实 ...

  3. 一些php常用函数积累

    本文链接 <?php // id: ecffe70d3af54df9bad97b61918ace7d global $ct_path, $ct_log_path; $log_path = &qu ...

  4. 一篇文章搞懂android存储目录结构

    前言 前两天因为开发一个app更新的功能,我将从服务器下载的apk文件放在了内部存储目录(测试手机为小米,路径为:data/user/0/packagename/files)下面,然后安装的时候一直安 ...

  5. 3分钟Markdown快速入门与使用

    Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 注意:图片为效果图 1 标题 #开头代表标题,几个#号代表几级,最高支持六级标题 ...

  6. 配置cinder-volume服务使用ceph作为后端存储

    在ceph监视器上执行 CINDER_PASSWD='cinder1234!'controllerHost='controller'RABBIT_PASSWD='0penstackRMQ' 1.创建p ...

  7. 数据结构与算法-stack

    栈的本质是一种线性表,特殊的一种线性表 基本概念 概念 栈是一种特殊的线性表 栈仅能在线性表的一端进行操作 栈顶(Top):允许操作的一端 栈底(Bottom):不允许操作的一端 stack是一种线性 ...

  8. Linux配置文件的修改

    在很多时候,我们需要对Linux的配置文件进行修改.此时就涉及到了不同Linux发行版的修改配置问题.下面就以主流的几个操作系统(Unix:Solaris,Linux:Ubuntu,Redhat)作为 ...

  9. python pip换源方法

    以下资料来源于网络: pip国内的一些镜像   阿里云 http://mirrors.aliyun.com/pypi/simple/   中国科技大学 https://pypi.mirrors.ust ...

  10. Linux文件属性之Linux文件删除重要原理详解

    Linux下文件删除的原理 只要dongdaxiafile(源文件).服务进程.dongdaxiaflie_hard_link(硬链接文件)三个中的任意一个存在文件不会被删除.