概念

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. String类的常用方法以及知识点总结

    一,String的简介: 查阅API中的String类的描述,发现String 类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 一旦这个 ...

  2. 一百零四:CMS系统之修改邮箱界面

    在base.css中加一个全局的css控制宽度 .form-container{ width: 300px;} 视图 class ResetEmailView(views.MethodView): d ...

  3. 用pyhton配置LVS_DR模式

    import paramiko vip = '192.168.42.250' ds = '192.168.42.8' rs1 = '192.168.42.9' rs2 = '192.168.42.10 ...

  4. grep 正则表达式用引号括起来和元字符加反斜杠转义的测试

    grep 正则表达式用引号括起来和元字符加反斜杠转义的测试 实验在 grep 命令中的表达式:不加引号,加单引号,加双引号的区别,以及部分元字符前加与不加 `\’ 进行转义的区别.实验环境为“实验楼( ...

  5. pixi小游戏开发(vue+typescript)

    一直以来都觉得typescript是以后前端发展的趋势,一些大厂的前端项目都已经在用ts来替代js了. 正好最近刚开始准备用pixi写个小游戏,因为刚开工没多久,于是今天就将之前的功能用ts去实现了一 ...

  6. 关键字 using语句 大神的神扯

    using 是非托管资源: 解析:在C#应用托管到.NET Framework.但是他可以释放非托管资源. using 关键字有两个作用: 1:作为关键字,using可以导入命名空间 2:座位C#语句 ...

  7. 一台物理机器一个IP配置多个域名多套程序的方法

    1.安装nginx cd /usr/local/ wget http://nginx.org/download/nginx-1.2.8.tar.gz tar -zxvf nginx-1.2.8.tar ...

  8. python基础知识(集合)

    集合 可变集合set()/不可变集合frozenset() {}  大写的拉丁字母 用于保存不重复元素.无序不能通过索引来获取 集合的创建 空集合 使用set()函数 变量名 = set() 集合的添 ...

  9. thinkPHP 出现route不起作用提示No input file specified.

    修改.htaccess文件 原因在于使用的PHP是fast_cgi模式,而在某些情况下,不能正确识别path_info所造成的错误. 打开.htaccess 在RewriteRule 后面的index ...

  10. MySQL知识篇-SQL3

    视图 1 提高重用性: 2 可用于数据库重构: 3 可用于不同用户,提高安全性: 定义视图: create view 视图name as select语句: 查看视图: show tables: 使用 ...