文档章节

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>标签的值

© 著作权归作者所有

上一篇: Response
下一篇: XML及其解析
勤劳的开发者px
粉丝 3
博文 54
码字总数 108225
作品 0
荆州
程序员
私信 提问

暂无文章

centos7.4解压方式安装mysql5.7

删除Mysql yum remove mysql mysql-server mysql-libs mysql-server; find / -name mysql #将找到的相关东西删掉;例如:rm -rf /var/lib/mysql rpm -qa|grep mysql #(查询出来的东东yum rem......

中颀013
39分钟前
21
0
如何在电脑屏幕上录制视频?安利一款屏幕录像软件

如何在电脑屏幕上录制视频?相信很多小伙伴都会有这个需求,毕竟如今网上有很多教学视频或者游戏直播视频等,它们在市场上有产出所以必定会有大量需求,所以,如果伙伴们也想通过对电脑视频进...

斯卡哈
39分钟前
22
0
SQL笔试 I 经典44题及答案解析

01 建表语句 create table Student(sid varchar(10),sname varchar(10),sage datetime,ssex nvarchar(10));insert into Student values('01' , '赵雷' , '1990-01-01' , '男');insert into......

osc_s4e6jr85
40分钟前
14
0
csharp WebUploader 分块上传

HTML部分 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="up6.index" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://......

osc_afifi2qt
41分钟前
13
0
通信原理的新认识-从实践到原理

在读书期间,本人是学习的通信专业,曾反复研读樊昌信老师写的《通信原理》这本书,一直停留在表面且没有新的理解,直到毕业之后从事通信相关的工作,才在实践层面对通信有了新认识。现就将新...

osc_2mvp7jnu
43分钟前
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部