Javaweb的初级(Servlet接口)
一、学习目标
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()方法完全一致 |
三、实际运用
- 实现第一个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接口)相关推荐
- 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 ...
- java servlet接口开发_servlet三种实现方式之一实现servlet接口
servlet有三种实现方式: 1.实现servlet接口 2.继承GenericServlet 3.通过继承HttpServlet开发servlet 第一种示例代码如下(已去掉包名): import ...
- java 调用tomcat api,调用servlet接口流程
使用Servlet接口的整体流程 目前对JavaWeb的理解是:用一次提交过程来表示,当点击一个提交的标签.会将url传到tomcat服务器,在tomcat的配置文件中找到管理javaweb项目的配置 ...
- 基于javaweb+jsp的医院住院管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap)
基于javaweb+jsp的医院住院管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap) JavaWeb JavaBean JSP MVC ...
- 基于javaweb+jsp的个人日记管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap Ajax)
基于javaweb+jsp的个人日记管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap Ajax) 运行环境 Java≥8.MySQL≥5. ...
- Javaweb学习笔记 servlet篇
servlet a)什么是servlet b)手动实现servlet程序 常见的错误: c)url地址到servlet程序的访问 d)servlet的生命周期 e)get和post的分发处理 f)通过 ...
- JAVAWEB使用JSP+Servlet实现商品管理功能,后台为数据库,功能包括商品信息浏览、商品信息详情、商品信息删除及修改。
商品管理功能 一.功能介绍 1.1显示 1.2商品详情 1.3新增 1.4修改 1.5删除 二.数据库语句 三.项目结构 四.java代码 4.1Good类 4.2 Charge类 4.3GoodDa ...
- 基于javaweb+jsp的二手物品交易管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Layui Ajax)
基于javaweb+jsp的二手物品交易管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Layui Ajax) JavaWeb JavaBean JSP M ...
- Javaweb核心之servlet详解
1 Servlet 1.1 Servlet概述 Servlet是SUN公司提供的一套规范,名称就叫Servlet规范,它也是JavaEE规范之一.我们可以像学习Java基础一样,通过API来学习Ser ...
- 基于javaweb+jsp的大学生个人财务记账系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap)
基于javaweb+jsp的大学生个人财务记账系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap) 运行环境 Java≥8.MySQL≥5.7. ...
最新文章
- 中国数字化进程比发达国家快,小程序让我感到自豪 | IT领袖峰会
- Python~爬虫~2(requests)
- 在华为云服务器的Linux系统中搭建开发环境
- Boost.SmartPtr 的快速 (CI) 测试
- defer与async的认识
- 算法导论 练习14.1-7
- 阿里云智能开放平台团队何登成:解码云计算的 2B 服务基因 | 问底中国 IT 技术演进...
- python编程单词排序_Python编程20:字典的遍历和排序
- OAF_文件系列9_实现OAF解析Excel并读取至数据库JXL
- github访问加速
- 应用排行榜第一名脸萌只是刹那的烟火
- ASR—音频数据断句切割
- CSS+SVG实现简单的点赞效果
- 矩阵乘法,矩阵中各元素对应相乘及其梯度计算;
- mysql 把表名改成大写_mysql将表名改成大写的实例
- WLAN领域AP集群化的关键 CAPWAP协议
- access sql 取余_国家计算机二级ACCESS函数总结
- linux挂载2T以上硬盘
- Android图表控件MPAndroidChart实现左右滑动以及联动
- 硬件设计—JTAG链
热门文章
- 【构建更好的软件—TeamDev】上海道宁为您带来强大且富有洞察力的TeamDev产品及自定义解决方案
- 如何部署软件 - 让你团队的部署像地狱一样无聊且毫无压力
- WinForm控件之【MonthCalendar】
- html编辑器的回车换行问题解决方案
- pico3pro使用unity播放360全景视频及事件交互
- 融金所:云办公提升P2P金融“生命”
- 优质的APP推广渠道那么多,怎么选才好?
- PHP内裤,用sqlmap来扒下她的内裤吧~
- 考研计算机320分什么水平,考研320分算什么水平,能上211、985吗?很多人都答不上...
- html li加入数字,LI自动添加数字序号