文档章节

Servlet

勤劳的开发者px
 勤劳的开发者px
发布于 2017/09/10 20:29
字数 1379
阅读 2
收藏 0

Servlet

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

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

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

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

Servlet的执行过程

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

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

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

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

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

典型错误 /*.do

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

其他Servlet配置参数

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

绝对路径

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

  • 不带协议和主机名的,这种路径只能访问服务器内部资源.例如: /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>标签的值

© 著作权归作者所有

共有 人打赏支持
勤劳的开发者px
粉丝 3
博文 54
码字总数 108225
作品 0
荆州
程序员

暂无文章

day63-20180821-流利阅读笔记-待学习

性别歧视在日本:“我是女生,所以社会不让我学医” 毛西 2018-08-21 1.今日导读 大家在看病的时候,有留意过女医生的比例吗?在性别歧视现象十分严重的日本,男医生和女医生的比例达到了惊人...

aibinxiao
45分钟前
2
0
Ubuntu18.04 显卡GF-940MX安装NVIDIA-390.77

解决办法: 下面就给大家一个正确的姿势在Ubuntu上安装Nvidia驱动: (a)首先去N卡官网下载自己显卡对应的驱动:www.geforce.cn/drivers (b)下载后好放在英文路径的目录下,怎么简单怎么来...

AI_SKI
今天
4
0
深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
今天
1
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
今天
1
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部