博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Servlet
阅读量:6892 次
发布时间:2019-06-27

本文共 2764 字,大约阅读时间需要 9 分钟。

hot3.png

Servlet

Servlet是sun公司提供的一门用于开发动态web资源的技术。

Sun公司在其API中提供了一个servlet接口,用户若想开发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:

1.编写一个Java类,实现servlet接口。

2.把开发好的Java类部署到web服务器中

Servlet的执行过程

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序。

201122_RuAg_3669094.png

Servlet的运行过程

Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后:

  1.   Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是, 则直接执行第④步,否则,执行第②步。
  2.  装载并创建该Servlet的一个实例对象。
  3. 调用Servlet实例对象的init()方法。
  4. 创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
  5.  WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。

Servlet的生命周期

生命周期 : 从出生到死亡经历的过程

Servlet的作用:

接受请求数据(url) / 解析web.xml匹配请求,获得全类名,反射调用service方法(处理请求) / 写出响应

init(ServletConfig config)

  1. 调用时机 : 第一次访问时
  2. 调用次数 : 只会执行一次
  3. 调用者 : Tomcat服务器
  4. 用途 : 初始化Servlet

service(ServletRequest req,ServletResponse res)

  1. 调用时机 : 被访问时
  2. 调用次数 : 每次请求服务器都会开启一个新的线程,执行该方法一次
  3. 调用者 : Tomcat服务器
  4. 用途 : Tomcat服务器会在每次调用service()方法时,为该方法创建Request对象(封装了客户端传递过来的数据)和Response对象(可以用于生成响应),所以该方法可以用于处理请求和生成响应.

destroy()

  1. 调用时机 : 服务器正常关闭或Servlet被移除时
  2. 调用次数 : 只会执行一次
  3. 调用者 : Tomcat服务器
  4. 用途 : 销毁Servlet

在Servlet的整个生命周期内,Servlet的init方法只被调用一次。而对一个Servlet的每次访问请求都导致Servlet引擎调用一次servlet的service方法。对于每次访问请求,Servlet引擎都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service()方法,service方法再根据请求方式分别调用doXXX方法。

Servlet中API的简介

获取客户端传递的请求参数

  • request.getParameter(String name),传入的参数就是form表单中name属性的值

  • 向客户端输出数据

    • response.getWriter().write()

    • response.getWriter().print()

    • 以上两个方法其实是一样的,print()是对write()方法的封装,可以输出更多类型的数据

url-pattern的三种配置方式

一个Servlet是可以配置多个访问路径的

完全路径匹配,以/开始,例如:/hello /init

201711_eaDf_3669094.png

目录匹配,以/开始,例如:/* /abc/*

" / "代表当前Web应用的根目录," * "代表匹配所有

201743_jpzU_3669094.png

扩展名匹配,*不能以 / 开始**,例如:.do *.action

典型错误 /*.do

201840_NK8f_3669094.png

优先级:** 完全匹配 > 目录匹配 > 扩展名匹配 具体>不具体**

其他Servlet配置参数

202009_ipNr_3669094.png

load-on-startup :如果希望Servlet跟随服务器的启动而被创建,可以设置该属性.Struts1框架就使用这种方式加载配置文件 。

缺省Servlet

  • 如果某个Servlet的映射路径仅仅为一个正斜杠(/),那么这个Servlet就成为当前Web应用程序的缺省Servlet

  • 凡是在web.xml文件中找不到匹配的<servlet-mapping>元素的URL,它们的访问请求都将交给缺省Servlet处理,也就是说,缺省Servlet用于处理所有其他Servlet都不处理的访问请求

  • 当客户端访问静态资源的时候,实际上就是在访问这个缺省的servlet

配置主页

  • 在web.xml文件中,可以通过指定welcome-file-list节点来指定当前应用的主页.

  • 如果有多个值的话,会从上向下进行查找,找到后,就不会再向下执行

  • 如果本应用没有配置welcome-file-list节点,会使用Tomcat服务器的默认配置

相对路径和绝对路径

结论:一律使用绝对路径

相对路径

  • ../ 代表上级目录. 例如: ../css

  • ./或者什么都不写 代表同级目录. 例如: ./img 等同于 img

绝对路径

  • 带有协议和主机名的,这种路径能够访问所有的页面.例如:

  • 不带协议和主机名的,这种路径只能访问服务器内部资源.例如: /day13/index.html

 

ServletConfig的使用

作用

  1. 获取Servlet的名称
  2. 获取Servlet的初始化参数
  3. 获取上下文ServletContext

创建

  • 在Tomcat服务器创建Servlet时,创建该对象,并通过init()方法传递给当前Servlet

  • 获取方法

    • getServletConfig()

  • API

    • getServletName(): 获取Servlet的名称.就是web.xml中servlet-name节点的值

    • getInitParameter(String name) : 获取web.xml中<font color='red'>当前Servlet</font>对应的<param-value>标签的值

    • getInitParameterNames() : 获取web.xml中<font color='red'>当前Servlet</font>对应的所有<param-name>标签的值

转载于:https://my.oschina.net/px828261/blog/1533808

你可能感兴趣的文章
Ubuntu14.04安装分布式存储sheepdog+zookeeper
查看>>
innodb引擎
查看>>
pandas.to_numeric转化数据为数字型
查看>>
在企业环境下实现禁止使用USB的高安全措施
查看>>
乐在其中设计模式(C#) - 单例模式(Singleton Pattern)
查看>>
SVN提示文件被锁住以及Unlocker软件的使用
查看>>
MySQL Study案例之--MySQL体系和存储引擎
查看>>
php注入之完全版
查看>>
高效的生产力
查看>>
岁月划过生命线(从0到阿里)
查看>>
七招搞定微信朋友圈营销
查看>>
mysql 查看表
查看>>
Centos5 搭建独立版本库SVN
查看>>
云场景实践研究第6期:游族网络
查看>>
记录由Equal基础知识引起的内存泄露
查看>>
Android:Sensor传感器
查看>>
Eclipse配置实现定制登录界面
查看>>
NO.1 进入IT世界
查看>>
Exceeded maximum number of retries. Exceeded max scheduling attempts 3 for instance
查看>>
Asp.net mvc 3.0新特性-浅析1
查看>>