程序员的知识教程库

网站首页 > 教程分享 正文

什么是Servlet?有什么作用?(servlet的概念和作用)

henian88 2024-08-15 21:55:54 教程分享 17 ℃ 0 评论

一、什么是Servlet

Servlet 是运行在服务端(tomcat)的Java小程序,是sun公司提供一套定义动态资源规范; 从代码层面上来讲Servlet就是一个接口

二、Servlet的作用

用来接收、处理客户端请求、响应给浏览器的动态资源。在整个Web应用中,Servlet主要负责接收处理请求、协同调度功能以及响应数据。我们可以把Servlet称为Web应用中的『控制器』

三、Servlet的入门案例

目标:在页面上点击超链接,由Servlet处理这个请求,并返回一个响应字符串:这是我的第一个Servlet项目

思路:

1、创建动态Web module

1.1、先创建一个空的java项目

1.2、创建Web-module

创建好Module的目录:

2、创建html页面

将index.jsp删除,并在webapp目录下创建一个index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>第一个Servlet的应用程序</title>
</head>
<body>
<!--
	使用绝对路径: /部署的项目名/要访问的资源路径
-->
<a href="/firstServlet/hello">访问HelloServlet</a>
</body>
</html>

什么是部署的项目名?

项目名可以修改,这里将项目名修改为:firstServlet


什么是资源路径?
就是能访问到MyFirstServlet类的路径

3、创建MyFirstServlet类,实现Servlet接口

创建Web项目会自动创建HelloServlet类,可以把它删了创建一个新的类


package com.fm.firstservlet;

import javax.servlet.*;
import java.io.IOException;

/***
 * 编写Servlet的步骤:
 *  * 1. 编写一个类实现Servlet接口,并且重写里面的方法: 主要是要重写service方法
 *  * 2. 重写service方法,service方法中就是接收、处理请求,并且将信息响应给客户端
 *  * 3. 配置Servlet的映射路径(供客户端访问的路径):在web/WEB-INF/web.xml中配置
 */

public class MyFirstServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //使用响应输出流向浏览器输出: Hello,I am Servlet
        servletResponse.getWriter().write("Hello,I am Servlet");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}


4、在web.xml中配置MyFirstServlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
<!--    配置Servlet的映射路径-->
    <servlet>
<!--        相当于给Servlet取个名,我们可以就使用Servlet的类名/类名首字母改小写-->
        <servlet-name>myFirstServlet</servlet-name>
<!--        你要配置的那个Servlet的全限定名(也就是MyFirstServlet类所在的包路径+类名)-->
        <servlet-class>com.fm.firstservlet.MyFirstServlet</servlet-class>
    </servlet>

    <servlet-mapping>
<!--        和servlet标签中的servlet-name保持一致-->
        <servlet-name>myFirstServlet</servlet-name>
<!--        给HelloServlet配置的映射路径,以/开头-->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

『映射路径』:Servlet并不是文件系统中实际存在目录或文件,所以为了方便浏览器访问,我们创建了映射路径来访问它。

5、运行项目

启动项目会自动跳转到浏览器。
在浏览器手动输入访问:localhost:8080/部署的项目名

成功响应到浏览器。

6、项目的运行访问过程(总结)

图片:

文字:

1、启动项目,Tomcat服务器会运行项目并打开index.html页面
2、点击超链接,根据超链接的路径进入到web.xml文件,找到servlet-mapping标签,
获取url-pattern标签的属性值(/hello)与超链接的资源路径(/hello)是否一致。
通过servlet-name标签找到MyFirstServlet类,执行service()方法,
将"Hello,I am Servlet"写到响应输出流里,流向浏览器输出:Hello,I am Servlet

四、Servlet的生命周期和生命周期方法

1、 什么是Servlet的生命周期?

Servlet的生命周期就是servlet从创建到销毁的过程,我们所要去探讨的就是Servlet对象在什么时候创建出来以及在什么时候销毁。当然创建和销毁Servlet对象的工作是不需要我们去做的

2、Servlet对象什么时候创建?

默认情况下是在第一次有请求访问该Servlet实例的时候才会创建该Servlet对象

3、Servlet对象什么时候销毁?

在服务器关闭,或者当前项目从服务器中移除的时候会销毁当前项目中的所有Servlet对象

五、Servlet的生命周期方法

1、什么是Servlet的生命周期方法?

在Servlet的生命周期中必然会经历的方法我们称之为Servlet的生命周期方法,总共包含三个方法:init、service、destroy

2、init方法

该方法会在Servlet实例对象被创建出来之后执行,我们可以在该方法中获取当前Servlet的初始化参数,以及进行一些读取配置文件之类的操作

3、service方法

该方法会在Servlet实例对象每次接收到请求的时候均执行,我们可以在该方法中接收、处理请求,以及将客户端需要的数据响应给客户端

4、destroy方法

该方法会在Servlet实例对象销毁之前执行,我们可以在该方法中做一些资源回收、释放、关闭等等操作

六、配置Servlet提前创建

有时候我们需要在Servlet创建的时候做一些资源加载等等耗时操作,所以如果Servlet在第一次接收请求的时候才创建的话必然会影响用户的访问速度,所以此时我们需要让Servlet提前创建,将Servlet的创建提前到服务器启动的时候。

通过修改web.xml中Servlet的配置可以实现:

<!-- 配置Servlet本身 -->
<servlet>
    <!-- 全类名太长,给Servlet设置一个简短名称 -->
    <servlet-name>myFirstServlet</servlet-name>

    <!-- 配置Servlet的全类名 -->
    <servlet-class>com.fm.firstservlet.MyFirstServlet</servlet-class>

    <!-- 配置Servlet启动顺序 -->
    <load-on-startup>1</load-on-startup>
</servlet>

七、ServletConfig的介绍

1、 接口方法介绍

方法名

作用

getServletName()

获取<servlet-name>HelloServlet</servlet-name>定义的Servlet名称

getServletContext()

获取ServletContext对象

getInitParameter()

获取配置Servlet时设置的『初始化参数』,根据名字获取值

getInitParameterNames()

获取所有初始化参数名组成的Enumeration对象

2、获取Servlet的初始化参数

在桌面上创建一个文件aa.txt,输入内容,将文件复制粘贴到resources目录中

我们可以在web.xml中对Servlet配置初始化参数,接下来可以在Servlet的init方法中获取配置的初始化参数的值

web.xml代码

<!--
        配置MyFirstServlet
    -->
<servlet>
    <servlet-name>myFirstServlet</servlet-name>
    <servlet-class>com.fm.servlet.MyFirstServlet</servlet-class>

    <!--配置当前Servlet的初始化参数-->
    <init-param>
          <!--参数名称-->
        <param-name>configLocation</param-name>
          <!--参数值-->
        <param-value>aa.txt</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>myFirstServlet</servlet-name>
    <url-pattern>/myFirst</url-pattern>
</servlet-mapping>

MyFirstServlet代码

package com.fm.firstservlet;

import javax.servlet.*;
import java.io.IOException;
import java.io.InputStream;

/**
 * 模拟它是SpringMVC中的一个类
 */
public class MyFirstServlet implements Servlet {
    private String filePath;
    @Override
    public void init(ServletConfig config) throws ServletException {
        //使用ServletConfig对象读取初始化参数
        filePath = config.getInitParameter("configLocation");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        //目标:读取aa.txt文件的内容
        InputStream is = MyFirstServlet .class.getClassLoader().getResourceAsStream(filePath);
        System.out.println(is);
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

八、Servlet的体系结构

1、类型关系

Servlet接口有一个实现类是GenericServlet,而GenericServlet有一个子类是HttpServlet,我们创建Servlet的时候会选择继承HttpServlet,因为它里面相当于也实现了Servlet接口,并且对一些方法做了默认实现;而且子类的功能会比父类的更加强大

2、方法关系

我们编写Servlet类继承HttpServlet的时候,只需要重写doGet()和doPost()方法就行了,因为HttpServlet重写了service()方法,在service()方法中判断请求方式,根据不同的请求方式执行doXXX()方法。

九、使用Idea直接创建Servlet

创建后Web.xml会自动生成以下代码:

<!-- IDEA会自动生成servlet标签 -->
<servlet>
        <servlet-name>CreateServlet</servlet-name>
        <servlet-class>com.fm.CreateServlet</servlet-class>
    </servlet>

Servlet代码

package com.fm;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

public class CreateServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表