首页 > 编程语言 >JavaWeb Servlet

JavaWeb Servlet

时间:2024-07-25 14:28:59浏览次数:10  
标签:JavaWeb Servlet void javax Override servlet public

Servlet入门

  • Servlet是Java提供的一门动态web资源开发技术。简而言之,不同用户访问同样的资源会看到不一样的效果。
  • Servlet是JavaEE规范之一,其实是一个接口。

1 快速入门

1.1 创建web项目,导入Servlet依赖坐标

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>

还需要配置maven-tomcat插件

  <build>
    <finalName>Servlet-demo02</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
      </plugin>
    </plugins>
  </build>

1.2 创建实现Servlet接口

public class ServletDemo 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 {
        System.out.println("Servlet starts successfully!");
    }

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

    @Override
    public void destroy() {

    }
}

1.3 配置:使用注解,配置Servlet访问路径

@WebServlet("/demo01")

1.4 访问:启动Tomcat,浏览器输入URL访问

有可能出现8080端口被占用
可以使用以下命令:

sudo lsof -i tcp:8080
sudo kill -9 XXXX

在这里插入图片描述
点击网站,访问/demo01,即可看到terminal提示service的output!
在这里插入图片描述

2 Servlet执行流程

在这里插入图片描述

3 生命周期

在这里插入图片描述

4 Servlet方法

4.1 init()

    /**
     * 初始化方法
     * 1. 调用时机:默认情况下,servlet第一次被访问时调用。
     *              loadOnStartup:
     * 2. 调用次数: 1次
     * @param servletConfig
     * @throws ServletException
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init...........");
    }

4.2 service()

    /**
     * 提供服务
     * 1. 调用时机:每一次Servlet被访问时调用
     * 2. 调用次数:每次
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Servlet starts successfully!");
    }

4.3 destroy()

    /**
     * 销毁方法
     * 1.调用时机:内存释放或者服务器关闭时候
     * 2. 调用次数: 1次
     */
    @Override
    public void destroy() {
        System.out.println("destroy.......");
    }

4.4 ServletConfig()

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

4.5 getServletInfo()

    @Override
    public String getServletInfo() {
        return null;

5 HttpServlet

针对B/S架构的web项目,都是针对HTTP协议,所以我们自定义的Servlet都会继承HttpServlet。

5.1 HttpServlet demo

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/demo")
public class HttpServlet extends javax.servlet.http.HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("post");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get");
    }
}

这里使用PostMan分别做Get和Post请求
展示发送的Post请求
在这里插入图片描述
Terminal显示Post
在这里插入图片描述
Get请求以此类推,省略展示。

5.2 使用Servelt Service()方法处理post/get请求

通过自己定义的HttpServlet类,实现对Post、Get请求的处理。之后只需要继承HttpServlet类,重写Post和Get方法就可以完成请求的处理,不需要每次都完成Servlet接口的重写。

5.2.1 MyHttpServlet代码展示

这里并不需要指定url路径,因为以后的HttpServlet只是继承MyHttpServlet,只需要在子类中指定urlPattern。

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

public class MyHttpServlet implements Servlet {

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        // Handle Different Http Request

        // 1. 转换成HttpServeltRequest
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        // 2. Get Method
        String method = httpServletRequest.getMethod();
        // 3. 针对不同的请求做处理
        if("GET".equals(method)){
            doGet(servletRequest, servletResponse);
        }else if("POST".equals(method)){
            doPost(servletRequest, servletResponse);
        }
    }

    /**
     *
     * 使用protected,方便子类继承时override
     * @param servletRequest
     * @param servletResponse
     */
    protected void doPost(ServletRequest servletRequest, ServletResponse servletResponse) {
    }

    protected void doGet(ServletRequest servletRequest, ServletResponse servletResponse) {
    }


    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

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

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

    @Override
    public void destroy() {

    }
}

5.2.2 MyHttpServletDemo展示

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;


@WebServlet("/demo2")
public class MyHttpServletDemo extends MyHttpServlet {
    @Override
    protected void doPost(ServletRequest servletRequest, ServletResponse servletResponse) {
        System.out.println("This is MyHttp Post");
    }

    @Override
    protected void doGet(ServletRequest servletRequest, ServletResponse servletResponse) {
        System.out.println("This is MyHttp Get");
    }
}

5.2.3 HttpServlet源码分析

实际上以上的MyHttpServlet与HttpServlet service()框架一致
第一步也是获取method方法,然后进行method比对
最后调用对应的Method处理方法
在这里插入图片描述

标签:JavaWeb,Servlet,void,javax,Override,servlet,public
From: https://blog.csdn.net/BruceFei1/article/details/140611936

相关文章

  • JavaWeb项目中动态拼接sql语句
    业务需求描述:图中的查询框在分条件查询用户信息列表时,前端可能会传回一个条件或多个条件,此时要对不同的条件进行sql语句的不同书写,前端传的情况有很多种,所以如果分情况写sql语句会比较死,并且不够灵活,而且书写的内容会很多,所以要想一种办法来进行不同情况的sql语句拼接。参数......
  • JavaWeb(7) DOM编程
    目录一、什么是DOM编程二、获取页面元素的API1.在整个文档范围内查找元素结点2.在具体元素节点范围内查找子节点3.查找指定子元素节点的父节点4.查找指定元素节点的兄弟节点5.整体代码演示三、操作元素属性值API1.属性操作2.内部文本操作3.整体代码演示 四、增......
  • @Slf4j注解 - javaweb日志记录
    1.引言在现代的JavaWeb开发中,日志记录是一个非常重要的组成部分。良好的日志记录可以帮助开发者快速定位问题、监控系统运行状态以及进行性能调优。@Slf4j注解是Lombok库提供的一个便捷工具,用于简化日志记录的代码编写。本文将详细讲解@Slf4j注解的相关内容,包括其概念、......
  • javaWeb_JSP
    首先要对项目的pom.xml进行添加依赖点击查看代码<dependencies><!--Servlet依赖--><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version>&l......
  • servlet化学实验交流平台-计算机毕业设计源码13069
    目录摘要Abstract第一章绪论1.1选题背景及意义1.2国内外研究现状1.3研究方法第二章相关技术介绍2.1Java编程语言2.2B/S模式2.3MySQL简介2.4Serrvlet框架2.5Vue介绍第三章化学实验交流平台分析3.1系统目标3.2可行性分析3.2.1技术......
  • 计算机课程设计:JavaWeb期刊管理系统
    计算机课程设计:JavaWeb期刊管理系统项目说明 使用JavaWeb开发的数据库显示界面的课程设计,支持数据分页查询以及期刊的模糊搜索,首页采用动态二维码生成进行校验,支持上传图片,用户密码采用md5加密,支持期刊的分页显示。使用方法:这里说明一下:大致的使用方法1、getclone......
  • JavaWeb MyBatis案例
    JAVAWEBMyBatis视频学习笔记MyBatis案例1环境准备1.1数据库准备1.2准备一个Brand实体类1.3准备测试用例1.4安装MyBatisX插件2编写接口2.1编写查询所有2.1.1编写Mapper接口2.1.2编写SQL映射文件2.1.3编写测试语句完成测试2.1.4BugFix2.2查看详情2.2.1编......
  • 基于JavaWeb的同城外卖推荐系统的设计与实现
    摘 要鉴于移动互联网和外卖市场的迅速发展,越来越多的人开始选择通过外卖服务订餐。然而,现有的外卖平台存在一些问题,例如口味偏好不匹配、菜品推荐不够准确等等。因此,开发了同城外卖推荐系统,旨在提供更加个性化和准确的外卖推荐服务,帮助用户快速找到心仪的餐厅和菜品。本系......
  • 使用idea创建Javaweb项目(步骤)
    第一步创建Javaweb项目File>New>Project第二步  勾选WebApplication >Next然后就是进行起名,完成。完成创建项目,检查是否文件齐全配置tomcat配置好,就能启动tomcat,显示首页导入jar包。导入进项目,然后编写类......
  • helloServlet——maven
    1.建立maven项目要添加的archetypeCatalog=internal确保新的modle中有src文件2.每个新项目的web.xml中都要修改为ArchetypeCreatedWebApplication点击查看代码<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns="http://xmlns.jcp.org/xml/ns/javaee"......