javaWeb-1-Tomcat服务器部署Servlet程序示例-基础

目录

1、Servlet介绍

2、手动实现Servlet程序

2.1 开发Servlet程序步骤如下

3、项目结构图:Tomcat服务器部署Servlet程序项目结构图

4、开始写Serlvet处理器

4-1、写第一个Servlet处理程序 - HelloServlet implents Servlet

4-2、写第二个Servlet处理程序 - HttpServletProcessor extends HttpServlet

4-3 在IDEA中支持自动的快速的生成一个Servlet处理器(简化4-1与4-2)

4-4、在 web.xml 配置文件中配置刚才写好的servlet处理器

4-5、写一个前端提交按钮来测试Servlet处理器是否正常工作

4-6、测试结果展示

4.6.1 Tomcat服务器启动成功:war包部署成功

4.6.2 浏览器发出HTTP请求

4.6.3 Tomcat服务器做出响应

5、Web项目结构剖析-理解掌握

5.1 整个动态Web工程目录的介绍(动态资源-Servlet处理器;静态资源-jpg等)

5.2 B/S架构之HTTP请求到HTTP响应的整体流程-1

5.3 B/S架构之HTTP请求到HTTP响应的整体流程-2

5.4 Servlet程序的访问原理:HTTP请求是怎么访问到Tomcat服务器中某一个Servlet处理器的

5.5 额外的内容-Spring5中的WebFlux框架

6、Servlet程序的常见错误

6.0 web.xml 文件的规范配置

6.1 web.xml文件:url-pattern中配置的路径没有以斜杠\打头

6.2 web.xml文件:servlet-name中的两个映射值不一致

6.3 web.xml文件:servlet-class标签的全类名配置错误

7、Servlet的生命周期

参考学习视频

1、Servlet介绍

(1)Servlet是JavaEE规范(接口)之一。

(2)Servlet是JavaWeb三大组件之一。三大组件分别是:Servlet程序、Filter过滤器、Listener监听器。

(3)Servlet是运行在服务器上的一个java程序,可以接收客户端发来的请求,并响应数据给客户端解析展示。

2、手动实现Servlet程序

(1)编写一个类,让其实现Servlet接口,并重写Servlet接口中的service()方法,该service()方法就是用来处理客户端发来的请求、并且响应数据的。

(2)在 WEB-INF 文件夹中的 web.xml 文件中配置 Servlet程序的访问地址。

2.1 开发Servlet程序步骤如下

3、项目结构图:Tomcat服务器部署Servlet程序项目结构图

4、开始写Serlvet处理器

4-1、写第一个Servlet处理程序 - HelloServlet implents Servlet

(1)在 src 目录下创建一个HelloServlet类,并且继承Servlet接口。

package com.wind.servlet;

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

/**
一个servlet程序
 */
public class HelloServlet implements Servlet {

    public HelloServlet() {
        System.out.println("1.Servlet的无参构造器执行了.");
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2.Servlet的init方法执行了.");
    }

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("3.Servlet的service方法执行了.");
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        String method = httpServletRequest.getMethod();
        if ("GET".equals(method)) {
            this.doGet();
        }
        if ("POST".equals(method)) {
            this.doPost();
        }
    }

    private void doPost() {
        System.out.println("3.1 Servlet的service方法-doPost-执行了.");
        System.out.println("3.1 Servlet的service方法-doPost-执行了2.");
    }

    private void doGet() {
        System.out.println("3.1 Servlet的service方法-doGet-执行了.");
        System.out.println("3.1 Servlet的service方法-doGet-执行了2.");
    }

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

    @Override
    public void destroy() {
        System.out.println("4.Servlet的destroy方法执行了.");
    }
}

4-2、写第二个Servlet处理程序 - HttpServletProcessor extends HttpServlet

(1)在 src 目录下创建另一个HttpServletProcessor类,并且继承HttpServlet接口。

(2)在实际项目中,HttpServlet接口更常用。注:HttpServlet接口是Servlet的子接口。

package com.wind.servlet;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 通常会使用实现HttpServlet这个抽象类的方式来实现Servlet处理器
 */
public class HttpServletProcessor extends HttpServlet {

    private static final long serialVersionUID = -7511536601794982778L;

    public HttpServletProcessor() {
        System.out.println("1.HttpServletProcessor extends HttpServlet 的无参构造器执行了...");
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2.HttpServletProcessor extends HttpServlet 的init方法执行了...");
    }

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

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("3.HttpServletProcessor extends HttpServlet, doGet done...");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("4.HttpServletProcessor extends HttpServlet, doPost done...");
    }

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

    @Override
    public void destroy() {
        System.out.println("5.HttpServletProcessor extends HttpServlet 的destroy方法执行了.");
    }

}

4-3 在IDEA中支持自动的快速的生成一个Servlet处理器(简化4-1与4-2)

(1)在 src 目录下再次创建另一个HttpServletProcessorAuto类,并且继承HttpServlet接口。

4-4、在 web.xml 配置文件中配置刚才写好的servlet处理器

(1)在 web.xml 中配置将来在Tomcat服务器中部署的各个Servlet处理器与其对应的访问路径URL

<?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">

    <!--1.使用servlet标签给Tomcat配置动态servlet程序-->
    <servlet>
        <!--servlet-name标签:给servlet程序起一个别名(一般就是类名)-->
        <servlet-name>HelloServlet</servlet-name>
        <!--servlet-class标签:servlet程序的全类名-->
        <servlet-class>com.wind.servlet.HelloServlet</servlet-class>
    </servlet>

    <!--2.使用servlet-mapping标签给动态servlet程序配置访问地址-->
    <servlet-mapping>
        <!--servlet-name标签:告诉Tomcat服务器,我当前配置的访问地址是给哪个servlet程序使用-->
        <servlet-name>HelloServlet</servlet-name>
        <!--url-pattern标签:配置访问地址.
        (1)/        :斜杠表示,在服务器解析的时候,表示访问地址是:http://ip:port/工程路径
        (2)/hello   : 表示访问地址是:http://ip:port/工程路径/hello 比如:http://localhost:8080/javaWeb/hello -->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    <!--3.使用a.html访问-->

    <!--1.使用servlet标签给Tomcat配置动态servlet程序-->
    <servlet>
        <servlet-name>HttpServletProcessor</servlet-name>
        <servlet-class>com.wind.servlet.HttpServletProcessor</servlet-class>
    </servlet>

    <!--2.使用servlet-mapping标签给动态servlet程序配置访问地址-->
    <servlet-mapping>
        <servlet-name>HttpServletProcessor</servlet-name>
        <url-pattern>/httpServlet</url-pattern>
    </servlet-mapping>
    <!--3.使用b.html访问-->

</web-app>

4-5、写一个前端提交按钮来测试Servlet处理器是否正常工作

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="http://localhost:8080/javaWeb/hello" method="POST">
    <!--action属性值与web.xml中的<url-pattern>标签内容一致,用于访问到servlet程序的service方法-->
    <input type="submit">
</form>
</body>
</html>

4-6、测试结果展示

4.6.1 Tomcat服务器启动成功:war包部署成功

4.6.2 浏览器发出HTTP请求

4.6.3 Tomcat服务器做出响应

5、Web项目结构剖析-理解掌握

5.1 整个动态Web工程目录的介绍(动态资源-Servlet处理器;静态资源-jpg等)

5.2 B/S架构之HTTP请求到HTTP响应的整体流程-1

5.3 B/S架构之HTTP请求到HTTP响应的整体流程-2

5.4 Servlet程序的访问原理:HTTP请求是怎么访问到Tomcat服务器中某一个Servlet处理器的

5.5 额外的内容-Spring5中的WebFlux框架

6、Servlet程序的常见错误

6.0 web.xml 文件的规范配置

6.1 web.xml文件:url-pattern中配置的路径没有以斜杠\打头

6.2 web.xml文件:servlet-name中的两个映射值不一致

6.3 web.xml文件:servlet-class标签的全类名配置错误

7、Servlet的生命周期

Servlet 程序被首次访问以后,会按照以下顺序执行:

(1)执行Servlet程序的构造器方法。(2)执行 init() 初始化方法。

(3)执行业务逻辑,也即 service() 方法。(4)执行 destroy() 方法。

其中第(1)步和第(2)步是在初次访问并创建Servlet程序时会执行(每次启动服务只执行一次),第(3)步每次刷新 (每次访问)都会执行,第(4)步停止Tomcat服务器时会执行一次。

参考学习视频

(1)B站javaWeb学习视频完整版:https://www.bilibili.com/video/BV1Y7411K7zz?p=99

(2)java8在线API:https://www.matools.com/api/java8

(3)博客站点:https://blog.csdn.net/weixin_49343190/article/details/107878144

猜你喜欢

转载自blog.csdn.net/cmm0401/article/details/111408300