一、学习目标
1.Servlet概述
2.HttpServlet类
3.实现Servlet的多重映射
4.ServletConfig和ServletContext接口
二、重点知识
1.Servlet概述
Servlet是使用Java语言编写的运行在服务器端的程序。狭义的Servlet 是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者,Servlet 主要田干从理交白湍传来的HTTP 请求,并返回一个响应,它能够处理的请求有doGet()和 doPost()等方法。
Servlet 由 Servlet 容器提供,所谓的 Servlet容器是指提供了 Servlet功能的服务器中(这里指Tomcat ),Servlet容器将 Servlet 动态地加载到服务器上。与HTTP 协议相关的Servlet使用HTTP请求和HTTP响应与客户端进行交互。因此,Servlet容器支持所有HTTP协议的请求和响应。Servlet 应用程序的体系结构如图1-1所示:
图1-1 Servlet应用程序的体系结构

在图1-1中,Servlet 的请求首先会被 HTTP 服务器(如Apache)接收,HTTP服务器只负责静态HTML 页面的解析,对于 Servlet的请求转交给Servlet容器,Servlet 容器会根据web.xml文件中的映射关系,调用相应的 Servlet, Servlet将处理的结果返回给 Servlet 容器,并通过HTTP服务器将响应传输给客户端。
1.2 Servlet技术具有如下特点:
(1)方便:提供了大量的实用工具例程,如处理很难完成的HTML表单数据、读取和设置HTTP头,以及处理Cookie和跟踪会话等。
(2)跨平台:Servlet用Java类编写,可以在不同操作系统平台和不同应用服务平台下运行。
(3)灵活性和可扩展性:采用Servlet开发的Web应用程序,由于Java类的继承性和构造函数等特点,使得应用灵活,可随意扩展。
除了上述几个点外,Servlet还具有功能强大、能够在各个程序之间共享数据、安全性强等特点。
1.3 Servlet的生命周期
生命周期:自然界人从出生到最终走向西方极乐世界,这个周期过程就是人的生命周期,其实servlet的生命周期和人的一样,从servlet对象被创建,经过使用servlet对象,到最终servlet对象被销毁,整个过程就是servlet的生命周期。

与生命周期相关的三个方法
初始化阶段 init(ServletConfig config),初始化方法:首次访问这个Servlet,servlet对象会被创建,执行初始化方法,执行一次
运行阶段 service(ServletRequest req, ServletResponse res),服务方法:每次访问servlet时,服务方法都会被执行,执行多次
销毁阶段 destroy() ,销毁方法:在服务器正常关闭时,会执行销毁方法,执行一次

2.HttpServlet类
在开发中,通常浏览器访问web服务器端的资源,是带有协议的访问,比如说http协议、https协议等,所以在创建servlet时,需要使用带有协议的servlet,在创建servlet时,通常用继承HttpServlet的方式来实现。
在HttpServlet里面重写service方法时,因为在service方法里面,最终调用doGet或者doPost方法,所以在重写服务方法时,一般情况下不会重写service方法,而是直接重写doGet和doPost方法:
在客户端发送get请求,在服务器端就用doGet方法接收
在客户端发送Post请求,在服务器端就用doPost方法来接收
3.实现Servlet的多重映射
3.1Servlet的多重映射:一个Servlet,可以对应多个访问路径。
比如:一个servlet对应的访问路径:/test02 或者 /test03

</servlet-mapping><servlet-mapping><servlet-name>TestServlet01</servlet-name><url-pattern>/test02</url-pattern></servlet-mapping><servlet-mapping><servlet-name>TestServlet01</servlet-name><url-pattern>/test03</url-pattern></servlet-mapping>

3.2 Servlet的映射路径可以使用通配符
servlet的映射路径有三种方式:
(1)完全目录匹配: 比如 /hello
(2) 目录匹配: 比如 /abc/* 或者 /*
(3)扩展名匹配: .do ,.action 注意 /*.do这种写法是错误的。
优先级:完全目录匹配>目录匹配>扩展名匹配
3.3 缺省Servlet
什么是缺省Servlet:
它的映射路径 “/” ,代表这是一个缺省的servlet.
缺省的servelt作用:
处理请求的资源找不到的问题(404 代表请求的资源找不到)
4.ServletConfig接口
针对Servlet技术的开发,SUN公司提供了一系列接口和类,其中最重要的接口是javax.servlet.Servlet。
在Servlet接口中定义了5个抽象方法,具体如图表示:

方法声明 功能描述
void init(ServletConfig config) 容器在创建好 Servlet 对象后,就会调用此方法。该方法接收一个ServletConfia类型的参数,Servlet容器通过这个参数向Servlet传递初始化配置信息
ServletConfig getServletConfig() 用于获取 Servlet对象的配置信息,返回Servlet的 ServletConfig对象
String getServletInfo() 返回一个字符串,其中包含关于 Servlet的信息,例如,作者、版本和版权等信息
void service(ServletRequest request,ServletResponse response) 负责响应用户的请求,当容器接收到客户端访问Servlet对象的请求时,就会调用此方法。容器会构造一个表示客户端请求信息的 ServletReauest对象和一个用于响应客户端的 ServletResponse 对象作为参数传递给service()方法。在service()方法中,可以通过ServletReauest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息
viod destroy() 负责释放Servlet 对象占用的资源。当服务器关闭或者 Servlet 对象被移除时,Servlet对象会被销毁,容器会调用此方法

在表中列举了Servlet 接口中的5个方法,其中init()、service()和 destroy()这3个方法可以表现 Servlet 的生命周期,它们会在某个特定的时刻被调用。另外,getServletlnfo()方法用于返回 Servlet的相关信息。getServletConfig()方法用于返回ServletConfig对象,该对象包含Servlet 的初始化信息。需要注意的是,表中提及的 Servlet容器指的是 Web 服务器。
针对 Servlet的接口,SUN公司提供了两个默认的接口实现类:GenericServlet 和HttpServlet。GenericServlet是一个抽象类,该类为Servlet 接口提供了部分实现,它并没有实现HTTP 请求处理。HttpServlet是 GenericServlet 的子类,它继承了GenericServlet 的所有方法,并且为HTTP请求中的POST、GET 等类型提供了具体的操作方法。
通常情况下,编写的 Servlet 类都继承自HttpServlet,在开发中使用的具体的 Servlet 对象就是 HttpServlet 对象。 HttpServlet 的常用方法及其说明如下表所示:

方法声明 功能描述
protected void doGet(HttpServletRequest req,HttpServletResponse resp) 用于处理 GET类型的HTTP请求的方法
protected void doPost(HttpServletRequestreq, HttpServletResponse resp) 用于处理 POST 类型的HTTP请求的方法
protected void doPut(HttpServletRequest req,HttpServletResponse resp) 用于处理PUT类型的HTTP 请求的方法

4.ServletConfig和ServletContext接口
4.1 什么是ServletConfig?
它是servlet的配置对象,作用就是获取与servlet的初始化参数。
4.2特点:
(1)子类有GenericServlet和HttpServlet
(2)通过web服务器实现被实列化
(3)得到servletConfig对象:getServletConfig()
(4)ServletConfig常用的方法:
1)获取servlet的初始化参数的值:getInitParameter(String name):根据encoding获取utf-8
2)获取servlet初始化参数的名称:getInitParameterNames() :获取encoding和username等名称
3)得到servletContext对象:getServletContext()
4)获取servlet的名称:getServletName():对应web.xml里面TestServlet02
4.3实现多个Servlet对象共享数据
由于一个Web应用中的所有Servlet共享同一个 ServletContext对象,因此,ServieTConter,对象的域属性可以被该Web 应用中的所有Servlet访问。在 ServletContext 接口中正乂』分别于增加、删除、设置 ServletContext域属性的4个方法。
ServletContext 接口的方法

方法说明 功能描述
Enumeration getAttributeNames() 返回一个 Enumeration 对象,该对象包含了所有仔欣在ServletContext 中的所有域属性名
Object getAttibute(String name) 根据参数指定的属性名返回一个与之匹配的域属性值
void setAttribute(String name,Object obj) 设置 ServletContext 的域属性,其中name是域属性名,0bj是属性值

4.4读取 Web应用下的资源文件
在实际开发中,有时候可能会需要读取Web应用中的一些资源文件,比如配置文件、图片等。为此,在 ServletContext接口中定义了一些读取 Web 资源的方法,这些方法是依靠 Servlet容器来实现的。 Servlet容器根据资源文件相对于 Web 应用的路,返回关联资源文件的IO流资源文件在文件系统的绝对路径等。下表中列举了 ServletContext接口中用丁狄取负源路化的相关方法。
ServletContext接口的常用方法

方法说明 功能描述
Set getResourcePaths (String path) 返回一个Set集合,集合中包含资源目录中子目录和又件的路佐名称。参数 path必须以正斜线(/)开始指宁兀配咨源的部分路径
String getReaIPath(String path) 返回资源文件在服务器文件系统上的真实路径(文件的绝对路径)。参数path 代表资源文件的虚拟路径,它应该以正斜线开始()开始,/表示当前 Web应用的根目录,如果Servlet容器不能将虚拟路径转换为文件系统的真实路径,则返回null
URL getResource (String path) 返回映射到某个资源文件的 URL对象。参数 path必须以正斜线(/)开始,“/”表示当前 Web应用的根目录
lnputStream
getResourceAsStream(String path) 返回映射到其个资源文件的InputStream 输入流对象。参数path传递规则和 getResource()方法完全一致

三、实际运用

  1. 实现第一个Servlet程序
    (1)自己手动创建Servlet,通过Dos命令窗口编译Servlet,把编译好的class文件部署到tomcat服务器运行。
    (2)通过Eclipse创建Servlet,部署到tomcat服务器,然后就可以访问咱们所需要的Servlet。
    首先创建HelloWordServlet,继承GenericServlet,重写父类GenerciServlet的service方法,然后在服务方法里面,处理客户端的请求后,把数据响应给客户端。
    代码示例:
public class HelloWorldServlet extends GenericServlet {public void service(ServletRequest request, ServletResponse response)throws ServletException, IOException {PrintWriter out = response.getWriter();out.println("Hello World");}}

配置xml文件

访问Servlet,提供servlet的访问路径,比如:
<!-- 配置访问/hello路径,对应的servlet --><servlet><servlet-name> HelloWorld</servlet-name><servlet-class>cn.itcast.firstmyapp.servlet.HelloWordServlet</servlet-class></servlet>
<!-- 配置浏览器访问servlet的路径 --><servlet-mapping><servlet-name> HelloWorld</servlet-name><url-pattern>/HelloWorld</url-pattern></servlet-mapping>

运行结果:在浏览器

1.2 用开发工具创建servlet有两种方式:
(1)先创建一个java类,需要去实现Servlet接口,或者继承对应的HttpServlet(GenericServlet)类,当java类继承了servlet的功能,就要需要去web.xml配置文件中添加访问servlet的路径信息。
(2)创建servlet时,会自动在web.xml文件中添加访问servlet的路径信息。
1.3 部署和访问servlet:
通过开发工具部署web项目,将路径等确认,然后就访问它下面的servlet资源:在浏览器页面搜索个人项目名和项目类名就可以。一般为了简化开发,我们会在doPost方法里面调用doGet方法。
2.HttpServlet类
代码示例:

         public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {PrintWriter out = response.getWriter();out.write("this is doGet method");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {PrintWriter out = response.getWriter();out.write("this is doPost method");}

运行结果:

在使用开发工具中,需要注意在使用对象时,使用带有协议的请求和响应对象HttpServletRequset和HttpServletResponse,在开发时,继承HttpServlet是,直接重写doGet和doPost方法,而不是重写service方法。
3.实现Servlet的多重映射
配置xml文件:

<servlet><description></description><display-name>TestServlet02</display-name><servlet-name>TestServlet02</servlet-name><servlet-class>cn.itcast.servlet.TestServlet02</servlet-class></servlet><servlet-mapping><servlet-name>TestServlet02</servlet-name><url-pattern>/TestServlet02</url-pattern><!-- <url-pattern>/Test02</url-pattern> --><!-- <url-pattern>/</url-pattern> --></servlet-mapping><servlet-mapping><!--映射为Test01 --><servlet-name>TestServlet02</servlet-name><url-pattern>/Test02</url-pattern></servlet-mapping>

代码示例:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubPrintWriter out = response.getWriter();out.print("this servlet is created by eclipse");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {int sum=0;for(int i=0;i<=100;i++){sum=sum+i;}}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request,response);

运行结果:

4.ServletConfig和ServletContext接口
4.1ServletConfig接口初始化参数的配置:

<servlet><servlet-name>TestServlet02</servlet-name><servlet-class>cn.itcast.servlet.TestServlet02</servlet-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></servlet><servlet-mapping><servlet-name>TestServlet02</servlet-name><url-pattern>/TestServlet02</url-pattern></servlet-mapping>

代码示例:

package cn.itcast.servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class TestServlet02 extends HttpServlet {protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {PrintWriter out = response.getWriter();// 获得ServletConfig对象ServletConfig config = this.getServletConfig();// 获得参数名为encoding对应的参数值String param = config.getInitParameter("encoding");out.println("encoding=" + param);}protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

运行结果:

4.2ServletContext接口的xml配置:

<servlet><servlet-name>TestServlet03</servlet-name><servlet-class>cn.itcast.servlet.TestServlet03</servlet-class></servlet><servlet-mapping><servlet-name>TestServlet03</servlet-name><url-pattern>/TestServlet03</url-pattern></servlet-mapping>

代码示例:

package cn.itcast.servlet;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class TestServlet03 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {PrintWriter out = response.getWriter();ServletContext context = this.getServletContext();Enumeration<String> paramNames = context.getInitParameterNames();out.println("all the paramName and paramValue are following:");while (paramNames.hasMoreElements()) {String name = paramNames.nextElement();String value = context.getInitParameter(name);out.println(name + ": " + value);out.println("<br>");}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response);}
}

运行结果:

4.2.1 xml配置:

<servlet><description></description><display-name>TestServlet05</display-name><servlet-name>TestServlet05</servlet-name><servlet-class>cn.itcast.servlet.TestServlet05</servlet-class></servlet><servlet-mapping><servlet-name>TestServlet05</servlet-name><url-pattern>/TestServlet05</url-pattern></servlet-mapping>

代码示例:

package cn.itcast.servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class TestServlet05 extends HttpServlet {public void doGet(HttpServletRequest request , HttpServletResponse response)throws ServletException, IOException {PrintWriter out = response.getWriter();ServletContext context = this.getServletContext();// 通过getAttribute()方法获取属性值String data = (String) context.getAttribute("data");out.println(data);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response);}
}

运行结果:

今天的学习就到这里了,继续加油~

Javaweb的初级(Servlet接口)相关推荐

  1. java servlet是接口_JavaWeb:Servlet 接口

    环境 JDK 8 Spring Tool Suite 4.6.1 Servlet 3.1 Tomcat 8.5 Maven 3.6.3 Servlet 说明 Java web 的核心接口 Servle ...

  2. java servlet接口开发_servlet三种实现方式之一实现servlet接口

    servlet有三种实现方式: 1.实现servlet接口 2.继承GenericServlet 3.通过继承HttpServlet开发servlet 第一种示例代码如下(已去掉包名): import ...

  3. java 调用tomcat api,调用servlet接口流程

    使用Servlet接口的整体流程 目前对JavaWeb的理解是:用一次提交过程来表示,当点击一个提交的标签.会将url传到tomcat服务器,在tomcat的配置文件中找到管理javaweb项目的配置 ...

  4. 基于javaweb+jsp的医院住院管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap)

    基于javaweb+jsp的医院住院管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap) JavaWeb JavaBean JSP MVC ...

  5. 基于javaweb+jsp的个人日记管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap Ajax)

    基于javaweb+jsp的个人日记管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap Ajax) 运行环境 Java≥8.MySQL≥5. ...

  6. Javaweb学习笔记 servlet篇

    servlet a)什么是servlet b)手动实现servlet程序 常见的错误: c)url地址到servlet程序的访问 d)servlet的生命周期 e)get和post的分发处理 f)通过 ...

  7. JAVAWEB使用JSP+Servlet实现商品管理功能,后台为数据库,功能包括商品信息浏览、商品信息详情、商品信息删除及修改。

    商品管理功能 一.功能介绍 1.1显示 1.2商品详情 1.3新增 1.4修改 1.5删除 二.数据库语句 三.项目结构 四.java代码 4.1Good类 4.2 Charge类 4.3GoodDa ...

  8. 基于javaweb+jsp的二手物品交易管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Layui Ajax)

    基于javaweb+jsp的二手物品交易管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Layui Ajax) JavaWeb JavaBean JSP M ...

  9. Javaweb核心之servlet详解

    1 Servlet 1.1 Servlet概述 Servlet是SUN公司提供的一套规范,名称就叫Servlet规范,它也是JavaEE规范之一.我们可以像学习Java基础一样,通过API来学习Ser ...

  10. 基于javaweb+jsp的大学生个人财务记账系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap)

    基于javaweb+jsp的大学生个人财务记账系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap) 运行环境 Java≥8.MySQL≥5.7. ...

最新文章

  1. 中国数字化进程比发达国家快,小程序让我感到自豪 | IT领袖峰会
  2. Python~爬虫~2(requests)
  3. 在华为云服务器的Linux系统中搭建开发环境
  4. Boost.SmartPtr 的快速 (CI) 测试
  5. defer与async的认识
  6. 算法导论 练习14.1-7
  7. 阿里云智能开放平台团队何登成:解码云计算的 2B 服务基因 | 问底中国 IT 技术演进...
  8. python编程单词排序_Python编程20:字典的遍历和排序
  9. OAF_文件系列9_实现OAF解析Excel并读取至数据库JXL
  10. github访问加速
  11. 应用排行榜第一名脸萌只是刹那的烟火
  12. ASR—音频数据断句切割
  13. CSS+SVG实现简单的点赞效果
  14. 矩阵乘法,矩阵中各元素对应相乘及其梯度计算;
  15. mysql 把表名改成大写_mysql将表名改成大写的实例
  16. WLAN领域AP集群化的关键 CAPWAP协议
  17. access sql 取余_国家计算机二级ACCESS函数总结
  18. linux挂载2T以上硬盘
  19. Android图表控件MPAndroidChart实现左右滑动以及联动
  20. 硬件设计—JTAG链

热门文章

  1. 【构建更好的软件—TeamDev】上海道宁为您带来强大且富有洞察力的TeamDev产品及自定义解决方案
  2. 如何部署软件 - 让你团队的部署像地狱一样无聊且毫无压力
  3. WinForm控件之【MonthCalendar】
  4. html编辑器的回车换行问题解决方案
  5. pico3pro使用unity播放360全景视频及事件交互
  6. 融金所:云办公提升P2P金融“生命”
  7. 优质的APP推广渠道那么多,怎么选才好?
  8. PHP内裤,用sqlmap来扒下她的内裤吧~
  9. 考研计算机320分什么水平,考研320分算什么水平,能上211、985吗?很多人都答不上...
  10. html li加入数字,LI自动添加数字序号