一、Servlet简介

1、什么是Servlet

servlet是运行在服务端的Java小程序,是sun公司提供的一套规范,用来处理客户端请求、响应给浏览器的动态资源

Servlet是Javaweb三大组件之一(Servlet、Filter、Listener),且最重要

2、Servlet的作用

用来处理从客户端发送过来的请求,并对该请求作出响应

Servlet的任务有:

<1>获取请求数据

<2>处理请求

<3>完成响应

3、Servlet的入门

<1>准备工作

    Servlet规范要求:Servlet程序需要编写实现类,并在web.xml进行配置

    实现类:通常继承javax.servlet.http.HttpServlet类,并复写doGet和doPost方法

        doGet()方法用于处理get请求

        doPost()方法用于处理post请求

        配置信息:在web.xml进行配置

<2>编写步骤

①创建类,继承HttpServlet,复写doGet()和doPost()方法

a0cc61be125285ef3555b209ebb45dd1.jpg                第五天:JavaWeb核心之Servlet_第1张图片

②在web.xml中编写配置文件

第五天:JavaWeb核心之Servlet_第2张图片        第五天:JavaWeb核心之Servlet_第3张图片

③浏览器访问

    在浏览器中地址栏输入:http://localhost:8080/day13/hello

    浏览器显示空白页

    第五天:JavaWeb核心之Servlet_第4张图片

    控制打印信息

    第五天:JavaWeb核心之Servlet_第5张图片

<3>Servlet执行的流程

第五天:JavaWeb核心之Servlet_第6张图片

4、Request接受请求参数

<1>Request接收请求参数的概述

第五天:JavaWeb核心之Servlet_第7张图片 

第五天:JavaWeb核心之Servlet_第8张图片

<2>Request接收请求参数入门

编写步骤

①编写表单,提供表单字段:username、password、hobby。以post方式提交

abf0a1bb22c4e80552aa1ecaba7fde4c.jpg

第五天:JavaWeb核心之Servlet_第9张图片

②编写Servlet实现类,使用对应方法获得请求参数,并处理POST中文乱码

9f9bb7d4a0ed21d3b7795d198498119e.jpg

第五天:JavaWeb核心之Servlet_第10张图片

第五天:JavaWeb核心之Servlet_第11张图片

③编写Servlet,配置文件

第五天:JavaWeb核心之Servlet_第12张图片

④测试,访问“http://localhost:8080/day13/02.request.html”,并提交表单,控制台显示

第五天:JavaWeb核心之Servlet_第13张图片

⑤servlet访问过程

第五天:JavaWeb核心之Servlet_第14张图片

5、案例:登录功能的实现

<1>案例分析

第五天:JavaWeb核心之Servlet_第15张图片<2>代码实现

第五天:JavaWeb核心之Servlet_第16张图片

第五天:JavaWeb核心之Servlet_第17张图片

第五天:JavaWeb核心之Servlet_第18张图片

第五天:JavaWeb核心之Servlet_第19张图片

第五天:JavaWeb核心之Servlet_第20张图片

二、Servlet的生命周期

<1>Servlet规范规定,所有的servlet必须实现javax.servlet.Servlet接口

第五天:JavaWeb核心之Servlet_第21张图片

①第一次调用时,将执行初始化方法:init(ServletConfig)

②每一次调用,都将执行service(ServletRequest,ServletResponse)方法

③服务器关闭,或项目移除:destroy()方法

<2>JavaEE规范中提供Servlet接口实现类

①GenericServlet:通用servlet实现,没有实现service

②HttpServlet:与Http协议有关的实现,实现service方法,完成与http协议有关的操作

      request.getMethod()    获得请求方式(get、post)

          如果是get,将调用doGet()

          如果是post,将调用doPost()

<3>生命周期就是一个对象从创建到销毁的过程

Servlet生命周期:servlet从创建到销毁的过程

①何时创建:用户第一次访问Servlet创建Servlet的实例(单实例)

②何时销毁:当项目从服务器中移除的时候,或者关闭服务器的时候

用户第一次访问Servlet的时候,服务器会创建一个Servlet的实例,那么Servlet中init方法就会执行。

任何一次请求服务器都会创建一个新的线程访问Servlet中的service的方法,在service方法内部根据请求方式的不同调用doXXX的方法。(get请求调用doGet,post请求调用doPost())当Servlet中服务器移除掉,或者关闭服务器,Servlet的实例就会被销毁,那么destroy方法就会执行

三、Servlet的相关配置

1、基本配置

第五天:JavaWeb核心之Servlet_第22张图片

    其中url-pattern的配置方式:

    1)完全匹配:访问的资源与配置的资源完全相同时才能访问到

    21e2465ac5f9d45d9a714b871d855aec.png

    2)目录匹配:格式:/虚拟的目录../*   *代表任意

    9b357cd764b59f2c101a4588a60c2ce6.png

    3)扩展名匹配:格式:*.扩展名

    d0471ec49cfd87679a69b58fac3fab00.png

    注意:第二种与第三种不要混用 /aaa/bbb/*.abcd(错误的)

2、服务器启动时实例化Servlet配置

    servlet何时创建:默认第一次访问时创建

    为什么是默认?

    当在servlet的配置时,加上一个配置,servlet对象在服务器启动时就创建

3、缺省Servlet

    可以将url-pattern配置一个/,代表该servlet是缺省的servlet

    什么是缺省的servlet?

    当你访问资源地址所有的servlet都不匹配时,缺省的servlet负责处理

    其实,web应用中所有的资源的响应都是servlet负责,包括静态资源

4、欢迎页面

第五天:JavaWeb核心之Servlet_第23张图片

四、ServletContext对象

1、什么是ServletContext对象

    ServletContext代表一个web应用的环境(上下文)对象,ServletContext对象内部封装的是该web     应用的信息,ServletContext对象一个web应用只有一个

2、ServletContext对象的生命周期

    创建:该web应用被加载(服务器启动或发布web应用(前提,服务器启动状态))

    销毁:web应用被加载(服务器关闭,移除该web应用)

3、怎样获得ServletContext对象

    <1>ServletContext servletContext=config.getServletContext();

    <2>ServletContext servletContext=this.getServletContext();

4、ServletContext的作用

<1>获得web应用全局的初始化参数

   web.xml中配置初始化参数

   第五天:JavaWeb核心之Servlet_第24张图片

   通过context对象获得参数

   第五天:JavaWeb核心之Servlet_第25张图片 

<2>获得web应用中任何资源的绝对路径

   方法:String path=context.getRealPath(相当于该web应用的相对地址)

<3>Servletontext是一个域对象

   Servlet域对象的作用范围:整个web应用(所有的web应用资源都可以随意向servletcontext域中存                             取数据,数据可以共享)

   域对象通用的方法:

   setAttribute(String name,Object obj);    存放数据

   getAttribute(String name);    获得数据

   removeAttribute(String name);    删除数据

<4>案例:记录网站的登录成功的人数

①分析:

第五天:JavaWeb核心之Servlet_第26张图片

②代码实现

第五天:JavaWeb核心之Servlet_第27张图片

第五天:JavaWeb核心之Servlet_第28张图片

第五天:JavaWeb核心之Servlet_第29张图片

第五天:JavaWeb核心之Servlet_第30张图片

<5>ServletContext读取Web资源

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

第五天:JavaWeb核心之Servlet_第31张图片   

   代码实现

   ①加载配置文件  

第五天:JavaWeb核心之Servlet_第32张图片

3e90b865bdf530f76b4ad76cc947ae20.jpg

   ②开发者需要获取的是资源的绝对路径。接下来,通过使用getRealPath(String path)方法获取资源      文件的绝对路径

第五天:JavaWeb核心之Servlet_第33张图片

<6>类加载器读取文件

第五天:JavaWeb核心之Servlet_第34张图片  

<7>Servlet模板

package ${enclosing_package};
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ${primary_type_name} extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.getWriter().write("hello haohao...");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}