文章目录

  • 一、Servlet概述:
    • 1.1 什么是Servle:
    • 1.2 web访问流程图:
  • 二、Servlet的入门
    • 2.1 Servlet的接口和实现类:
    • 2.2 创建servlet三种方式
  • 三、实现第一个Servlet程序
    • 3.1 编写第一个servlet
  • 四、Servlet的生命周期
    • 4.1 什么是生命周期:
    • 4.2 生命周期图:
    • 4.3 Servlet的特征:
  • 五、ServletConfig接口
    • 5.1 ServletConfig中的方法
    • 5.2 在配置web.xml时,可以为servlet指定多个初始化参数:
    • 5.3 创建一个servlet:
  • 六、ServletContext接口简介
    • 6.1 ServletContext中常用方法:
    • 6.2 在web.xml文件中加入初始化参数,web.xml文件修改后要重启tomcat才能生效:
  • 七、课堂练习:

一、Servlet概述:

1.1 什么是Servle:

它是运行在web服务器端的一个java小程序,简单来说,它就是一个java类。

在使用servlet时,需要导入javax.servlet下的jar包。比如:tomcat服务器提供了

servlet的servlet-api.jar包,所以在开发时用tomcat服务器就不需要再导入servlet的jar包。

Servlet它是一个资源,是用来被用户访问的资源,同时是一个动态资源,它是由sun指定的servlet规范。

Servlet的作用:它是基于Http协议的,主要是用来接收客户端发送的请求,处理请求,把数据响应给客户端。

1.2 web访问流程图:


二、Servlet的入门

2.1 Servlet的接口和实现类:

Servlet它是一个接口,在javax.servlet 包下面。

五个方法:

1.destroy():执行这个方法,销毁了servlet对象
2. init(ServletConfig config):在web服务器创建servlet对象以后,执行这个初始化方法。
3. service(ServletRequest req, ServletResponse res) :服务方法,用来接收客户端发送的请求,并且响应数据到客户端
4. getServletConfig():现在不讲
5. getServletInfo():servlet 的信息,比如作者、版本和版权,这个方法在开发中不用。

GenericServlet,它是一个类,实现了Servlet接口

HttpServlet,它是一个类,实现了Servlet接口,同时继承了GenerciServlet

2.2 创建servlet三种方式

  1. 直接实现Servlet接口。
  2. 继承GenericServlet类。
  3. 继承HttpServlet类。

一般在开发中,创建servlet,通常去继承这个HttpServlet.
比如:class MyServlet extends HttpServlet{ 重写咱们所需要的方法}


三、实现第一个Servlet程序

servlet的语法跟JavaSE是一样的并且能够使用JavaSE中的API,要想创建一个servlet并使用的话可以分为以下几个步骤:

  1. 创建一个javaee的web项目
  2. 编写一个Java类,实现javax.servlet.Servlet接口,并重写该接口中的抽象方法
  3. 在web.xml文件中配置该servlet(如果使用注解方式的话,无需配置web.xml)
  4. 将该web项目部署到tomcat中并启动

3.1 编写第一个servlet

创建一个web项目可以在创建项目时关联tomcat,这样eclipse会把相关的servlet-api.jar包拷贝到项目中,在项目创建一个Java类实现servlet接口并重写里面的方法。

package cn.itcase;import java.io.IOException;import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;public class FirstServlet implements Servlet {@Overridepublic void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {System.out.println("Hello Servlet");}@Overridepublic void destroy() {}@Overridepublic ServletConfig getServletConfig() {return null;}@Overridepublic String getServletInfo() {return null;}@Overridepublic void init(ServletConfig arg0) throws ServletException {}}

servlet创建好之后,需要在web.xml文件中进行配置,给servlet一个可以访问的URI地址:

<!-- 创建一个servlet实例 --><servlet><!-- 给servlet取一个名字,该名字需与servlet-mapping中的servlet-name一致 --><servlet-name>firstServlet</servlet-name><!-- servlet的包名+类名 --><servlet-class>cn.itcase.FirstServlet</servlet-class></servlet><!-- 给servlet一个可以访问的URI地址 --><servlet-mapping><!-- servlet的名字,与 servlet中的servlet-name一致--><servlet-name>firstServlet</servlet-name><!-- URI地址:http://locahost:9999/FirstServlet/hello --><url-pattern>/hello</url-pattern></servlet-mapping>

四、Servlet的生命周期

4.1 什么是生命周期:

自然界人从出生到最终走向西方极乐世界,这个周期过程就是人的生命周期, 其实servlet的生命周期和人的一样,从servlet对象被创建,经过使用servlet对象,到最终servlet对象被销毁,整个过程就是servlet的生命周期。

4.2 生命周期图:

4.3 Servlet的特征:

  1. Servlet是单例多线程的,只创建一个servlet对象,但是每次请求都会起一个线程并在自己线程栈内存中执行service方法。
  2. 一个 Servlet 实例只会执行一次无参构造器与 init()方法,并且是在第一次访问时执行。
  3. 用户每提交一次对当前 Servlet 的请求,就会执行一次 service()方法。
  4. 一个 Servlet 实例只会执行一次 destroy()方法,在应用停止时执行。
  5. 由于 Servlet 是单例多线程的,所以为了保证其线程安全性,一般情况下是不建议在
    Servlet类中定义可修改的成员变量,因为每个线程均可修改这个成员变量,会出现线程安全问题。
  6. 默认情况下,Servlet 在 Web 容器启动时是不会被实例化的。

tomcat启动时创建servlet实例

在tomcat启动时,默认不会创建servlet实例,如果想要让tomcat在启动时创建servlet实例的话,只需要在web.xml中添加load-on-startup标签即可

代码如下(示例):

 <servlet><servlet-name>lifeServlet</servlet-name><servlet-class>com.monkey1024.servlet.LifeServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>lifeServlet</servlet-name><url-pattern>/life</url-pattern></servlet-mapping>

添加load-on-startup的作用是,标记是否在 Tomcat启动时创建并初始化这个 Servlet实例。它的值必须是一个整数。

当值大于等于 0 时,表示容器在启动时就加载并初始化这个 Servlet,数值越小,该 Servlet的优先级就越高,其被创建的也就越早,当值相同时,容器会自己选择创建顺序。


五、ServletConfig接口

5.1 ServletConfig中的方法

  1. getInitParameter(): 获取指定名称的初始化参数值。例如从下面的servlet中调用
  2. getInitParameter(“userName”);方法会返回字符串"monkey1024"。
  3. getInitParameterNames():获取当前 Servlet 所有的初始化参数名称。其返回值为枚举类型
    Enumeration。
  4. getServletName():获取当前 Servlet 的中指定的 Servlet名称。如下面中的 ServletName
    为"configServlet"。
  5. getServletContext():获取到当前 Servlet 的上下文对象
    ServletContext,这是个非常重要的对象,将在下面详细介绍。

5.2 在配置web.xml时,可以为servlet指定多个初始化参数:

  <servlet><servlet-name>configServlet01</servlet-name><servlet-class>com.monkey1024.servlet.ConfigTest01</servlet-class><init-param><param-name>userName</param-name><param-value>monkey1024</param-value></init-param><init-param><param-name>password</param-name><param-value>123456</param-value></init-param></servlet><servlet-mapping><servlet-name>configServlet01</servlet-name><url-pattern>/config01</url-pattern></servlet-mapping>

5.3 创建一个servlet:

package com.monkey1024.servlet;import java.io.IOException;
import java.util.Enumeration;import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;/*** ServletConfig接口**/
public class ConfigTest01 implements Servlet {private ServletConfig config;@Overridepublic void destroy() {}@Overridepublic ServletConfig getServletConfig() {return this.config;}@Overridepublic String getServletInfo() {return null;}@Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println("init方法中ServletConfig:" + servletConfig);this.config = servletConfig;}@Overridepublic void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {String userName = config.getInitParameter("userName");System.out.println("userName=" + userName);Enumeration<String> param = config.getInitParameterNames();while(param.hasMoreElements()){String name = param.nextElement();String value = config.getInitParameter(name);System.out.println(name + "=" +  value);}System.out.println("ServletName=" + config.getServletName());}}

ServletConfig的特点:

每一个servlet都对应一个ServletConfig用于封装各自的配置信息,即有几个servlet就会产生几个ServletConfig对象。


六、ServletContext接口简介

6.1 ServletContext中常用方法:

  1. ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext()方法获得ServletContext对象。

  2. String getInitParameter ():获取 web.xml 文 件 的 中 指 定 名 称 的上下文参数值 。

  3. Enumeration getInitParameterNames():获取 web.xml
    文件的中的所有的上下文参数名称。其返回值为枚举类型 Enumeration。

  4. void setAttribute(String name, Object object):在 ServletContext
    的公共数据空间中,也称为域属性空间,放入数据。这些数据对于
    Web应用来说,是全局性的,与整个应用的生命周期相同。当然,放入其中的数据是有名称的,通过名称来访问该数据。

  5. Object getAttribute(String name):从 ServletContext 的域属性空间中获取指定名称的数据。

  6. void removeAttribute(String name):从 ServletContext 的域属性空间中删除指定名称的数据。

  7. String getRealPath(String path):获取当前 Web 应用中指定文件或目录在本地文件系统中的路径。

  8. String getContextPath():获取当前应用在 Web 容器中的名称。

6.2 在web.xml文件中加入初始化参数,web.xml文件修改后要重启tomcat才能生效:

 <!-- 初始化参数 --><context-param><param-name>MySQLDriver</param-name><param-value>com.mysql.jdbc.Driver</param-value></context-param><context-param><param-name>dbURL</param-name><param-value>jdbc:mysql:</param-value></context-param>

创建servlet:

package com.monkey1024.servlet;import java.io.IOException;import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;/*** ServletContext接口**/
public class ContextTest01 implements Servlet {private ServletConfig config;@Overridepublic void destroy() {}@Overridepublic ServletConfig getServletConfig() {return this.config;}@Overridepublic String getServletInfo() {return null;}@Overridepublic void init(ServletConfig servletConfig) throws ServletException {this.config = servletConfig;}@Overridepublic void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {ServletContext application = this.config.getServletContext();System.out.println("ContextTest01:" + application);String driver = application.getInitParameter("MySQLDriver");System.out.println(driver);String contextPath = application.getContextPath();System.out.println("contextPath:" + contextPath);//文件在硬盘中的绝对路径String realPath = application.getRealPath("FirstServlet");System.out.println("realPath:" + realPath);//向ServletContext中添加属性application.setAttribute("admin", "tiger");application.setAttribute("password", 123456);//删除passwordapplication.removeAttribute("password");}}

再创建一个servlet:

package com.monkey1024.servlet;import java.io.IOException;import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;public class ContextTest02 implements Servlet {private ServletConfig config;@Overridepublic void init(ServletConfig config) throws ServletException {this.config = config;}@Overridepublic ServletConfig getServletConfig() {// TODO Auto-generated method stubreturn null;}@Overridepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {ServletContext application = this.config.getServletContext();System.out.println("Context02中的application:" + application);String admin = (String)application.getAttribute("admin");System.out.println(admin);String password = (String)application.getAttribute("password");System.out.println(password);}@Overridepublic String getServletInfo() {// TODO Auto-generated method stubreturn null;}@Overridepublic void destroy() {// TODO Auto-generated method stub}}

七、课堂练习:


|


package cn.itcast.firstmyapp.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.security.Principal;import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;public class HelloWordServlet extends GenericServlet{//按alt+/@Overridepublic void service(ServletRequest req, ServletResponse response) throws ServletException, IOException {//处理客户端发送请求,并且把数据响应给客户端System.out.println("接收了客户端的请求.......大数据2005");//把数据响应给客户端,与浏览器绑定的输出流。作用向浏览器输出数据PrintWriter pw = response.getWriter();pw.print("Hello world  dashuju2005  大数据2005");}
}
package cn.itcast.firstmyapp.servlet;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class servlet2*/
@WebServlet("/servlet2")
public class servlet2 extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)*/public void service(ServletRequest req, ServletResponse response) throws ServletException, IOException {//处理客户端发送请求,并且把数据响应给客户端System.out.println("接收了客户端的请求.......第二个servlet");//把数据响应给客户端,与浏览器绑定的输出流。作用向浏览器输出数据PrintWriter pw = response.getWriter();pw.print("dashuju2005 second servlet");}@Overridepublic void init() throws SecurityException{System.out.println("init 函数被调用");}@Overridepublic void destroy() {System.out.println("destroy 函数被调用");}}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"><display-name>FiratServlet</display-name>
<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>/dashuju2005</url-pattern></servlet-mapping>
</web-app>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>大数据2005班 真牛!!!</body>
</html>

操作提示:






第二钟方式创建servlet

详细操作步骤:(嘿嘿,从下往上看)


















































































【NEW02】Servlet 基础相关推荐

  1. 第三章 Java Servlet基础

    第三章 Java Servlet基础 3.6.2 转发 1.获得RequestDispatcher对象 2.RequestDispatcher对象调用forward()方法实现转发 请求转发工作原理 ...

  2. JSP/Servlet基础语法

    相关学习资料 http://my.oschina.net/chape/blog/170247 http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp ...

  3. Servlet基础(三) Servlet的多线程同步问题

    Servlet基础(三) Servlet的多线程同步问题 Servlet/JSP技术和ASP.PHP等相比,由于其多线程运行而具有很高的执行效率. 由于Servlet/JSP默认是以多线程模式执行的, ...

  4. Servlet基础(一) Servlet基础和关键的API介绍

    转载:http://www.cnblogs.com/mengdd/p/3202550.html Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解 Servlet基础(一) S ...

  5. servlet基础_Servlet基础

    servlet基础 通过本教程,我将尝试使您更接近Java Servlet模型. 在检查servlet规范中定义的类之前,我将解释在开始开发Web应用程序之前需要了解的基本知识. 了解Java Ser ...

  6. Unit01: Servlet基础 、 HTTP协议

    Unit01: Servlet基础 . HTTP协议 在页面上输出当前时间 package web;import java.io.IOException; import java.io.PrintWr ...

  7. Web阶段--Servlet基础知识点

    Web阶段–Servlet基础知识点 一.静态页面与动态页面 1.静态页面 概念:在Web模型中,页面中的信息是在html文件中定义好的,数据不会改变,称为"静态页面",无法根据用 ...

  8. JAVA——J2EE之Servlet 基础篇(一)

    一.开发Servlet Servlet 本身不能独立运行,需要在一个web应用中运行的 而一个web应用是部署在tomcat中的 所以开发一个servlet需要如下几个步骤 创建web应用项目 编写s ...

  9. ☀️苏州程序大白一文让你学会Java Servlet基础☀️《❤️记得收藏❤️》

    ☀️苏州程序大白一文让你学会Java Servlet基础☀️<❤️记得收藏❤️> 目录

  10. Servlet基础教程 (保姆级教学)

    Servlet基础教程 一.Servlet 是什么 二.第一个 Servlet 程序 2.1 创建项目 2.2 引入依赖 2.3 创建目录 2.4 编写代码 2.5 打包程序 2.6 部署程序 2.7 ...

最新文章

  1. laravel-admin 使用记录(2) - 快速搭建 CURD
  2. Oracle中的单值函数
  3. CSS position绝对定位absolute relative
  4. SQL事务控制语言(TCL)
  5. NSURLSession下载
  6. python2.7_call
  7. Percona XtraBackup 2.0.3 发布
  8. 将商品金额小写转换成大写
  9. 开启、关闭数据库mysql
  10. TCP 实战抓包分析
  11. 模糊自适应整定PID控制
  12. python商业爬虫教程_python商业爬虫课程
  13. html中播放m3u8文件
  14. 删除Windows中设备与驱动器下的多余图标
  15. ASP视频教程:SQL语句1
  16. 2018-《此生未完成》于娟
  17. 今天发现一个好的修图软件
  18. SUM(CASE WHEN ?? THEN ?? ELSE ?? END) AS ??
  19. Vue 3.0 这个迷人的小妖精,到底好在哪里?
  20. python一键配置多个IP

热门文章

  1. 把单元格一分为二_excel如何把一个单元格分成两个 excel单元格拆分为二行
  2. 信息化、数字化、智能化到底有什么区别
  3. 如何关闭android键盘,软键盘怎么关?软键盘关闭方法
  4. 【时间序列分析】06. AR(p)序列的性质
  5. Google SEO入门教程,技术 SEO 简介
  6. 见微知著,细节上雕花:SVG生成矢量格式网站图标(Favicon)探究
  7. c#自定义日历插件,给重要日期添加色彩。以及系统自带的monthCalendar日历插件
  8. The Performance of µ-Kernel-Based Systems
  9. android手机通过USB共享电脑网络
  10. 数据库空间存储已满,如何清理释放空间