首页 > 其他分享 >【Servlet】Servlet入门

【Servlet】Servlet入门

时间:2024-04-01 14:31:52浏览次数:19  
标签:入门 tomcat Servlet request servlet AddServlet 请求

文章目录

一、介绍

概念:server applet,即:运行在服务器端的小程序

Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。

将来我们定义一个类,实现Servlet接口,复写方法,tomcat就可以识别这个类,我们就称它为一个Servlet

作用:

  1. 获取用户(客户端)发给我的数据
  2. 调用DAO中的方法完成添加功能
  3. 在控制台打印添加成功

Servlet用大白话来说,就像是一个在Web服务器上运行的Java小程序,它专门用来处理来自浏览器或其他客户端的请求,并根据这些请求动态生成响应内容。你可以想象一下,每当我们在网页上点击按钮或链接发送请求时,Servlet就在后台接收到这个请求,并进行一系列操作,比如从数据库查询数据、执行业务逻辑或者计算结果。

Servlet并不是直接给用户看的一个静态HTML页面,而是负责生成这些动态页面背后的内容。当Servlet完成工作后,会把生成的结果(可能是HTML页面的一部分、JSON数据、XML数据或者其他格式的数据)返回给客户端,客户端(通常是浏览器)再将这些数据呈现给我们用户。

打个比方,如果你在网上购物,当你点击“查看购物车”按钮时,实际上就是向服务器发送了一个请求。这时,服务器上的Servlet就发挥作用了,它读取你的购物车信息,计算总价等细节,然后生成包含你购物车商品列表的网页并传回给你,这样你就能看到自己挑选的商品了。

总之,Servlet是Java语言提供的一种强大工具,用于开发和扩展Web服务器功能,实现与用户的交互式通信,从而创建动态、功能丰富的Web应用程序。


二、入门案例

在web目录下新建add.html文件

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="add" method="post">
    名称:<input type="text" name="fname">
    价格:<input type="text" name="price">
    库存:<input type="text" name="fcount">
    备注:<input type="text" name="remark">
    <input type="submit" value="添加">
</form>
</body>
</html>

新建AddServlet类

image-20240303171017922

如果是一个普通类,它是不能够去获取用户发给我的数据的,此时需要让它继承HttpServlet,而这个类并不在JDK包里,而在servlet-api包下。

image-20240303184502393


导入servlet-api的解决办法

  1. 将servlet-api导入到项目里去

    • 在父项目的根目录新建lib文件夹,然后将servlet-api引入。

      这种情况是在很多个Module共享的,默认情况下和module是没有关系的。

      第一步:右击,将它添加为库

      image-20240303203252513

      然后从子项目中引用它

      image-20240303203509169

      加进来后,表示这个module依赖这个Library,但是这个Module里有一个artifact部署包,它是已经生成了。

      • 方法一:将artifact删掉,重新建一个

      • 方法二:点击Problems,将lib加入进入

        image-20240303203716327

    • 在当前项目的web\WEB-INF下新建lib文件夹,导入servlet-api

      缺点:只能是当前module独享。如果有第二个module,我们需要再次重复的新建lib。

      优点:启动的时候会自动将lib加进去

  2. 将Tomcat依赖加入进来

    找到库(Library)

    image-20240303184640242

    将tomcat依赖导入进来

    image-20240303184717917

    查看外部库,可以看见tomcat库已被引入

    image-20240303184747810

此时HttpServlet已经可以正常导入了

编写AddServlet类

package com.atguigu.servlets;

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

public class AddServlet extends HttpServlet {
    /**
     * 这个方法可以帮你去响应post请求,发一个post请求过来,doPost方法就会被调用
     * 当客户端给服务端发请求的时候,服务器端就把这个请求封装成一个对象:request
     */
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        // 请求里去获取参数,获取名字为fname的值
        String fname = request.getParameter("fname");
        // 通过Http请求发过来的只能是字符串
        String priceStr = request.getParameter("price");
        // 如果需要用到数字,强转即可。
        int price = Integer.parseInt(priceStr);
        String fcountStr = request.getParameter("fcount");
        String fcount = request.getParameter(fcountStr);
        String remark = request.getParameter("remark");

        System.out.println("fname = " + fname);
        System.out.println("price = " + price);
        System.out.println("fcount = " + fcount);
        System.out.println("remark = " + remark);
    }
}

将servlet的名字和某个类对应上,请求add这个组件可以对应上我们刚刚写的AddServlet

image-20240303184832812

配置web\WEB-INF\web.xml

一个servlet允许对应多个servlet-mapping,无论发给哪个,都是对应一个servlet。这样可以在servlet当中获取我们到底是通过哪个URL请求过来的。根据不同URL发送的请求,可以执行不同的业务逻辑。

<servlet>
 <servlet-name>Demo02Servlet</servlet-name>
 <servlet-class>com.atguigu.servlets.Demo02Servlet</servlet-class>
</servlet>
<servlet-mapping>
 <servlet-name>Demo02Servlet</servlet-name>
 <url-pattern>/demo02</url-pattern>
</servlet-mapping>
<servlet-mapping>
 <servlet-name>Demo02Servlet</servlet-name>
 <url-pattern>/demo021</url-pattern>
</servlet-mapping>
<servlet-mapping>
 <servlet-name>Demo02Servlet</servlet-name>
 <url-pattern>/demo022</url-pattern>
</servlet-mapping>

但是一个servlet-mapping不能对应多个servlet

<?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-name>AddServlet</servlet-name>
        <!-- 这里需要写上类的全类名 -->
        <servlet-class>com.atguigu.servlets.AddServlet</servlet-class>
    </servlet>
    <!-- 映射 -->
    <servlet-mapping>
        <servlet-name>AddServlet</servlet-name>
        <!-- 这里/千万不能丢! -->
        <url-pattern>/add</url-pattern>
    </servlet-mapping>
</web-app>

执行流程:

  1. 用户发请求:action=add
  2. 服务器(tomcat,项目)中,web.xml中找到servlet-mapping中的url-pattern = /add
  3. servlet-name = AddServlet
  4. 找和servlet-mappingservlet-name一致的servlet
  5. 找到servlet中的servlet-class就能通过 <servlet> 找到com.atguigu.servlets.AddServlet
  6. tomcat会将字节码文件加载进内存,并且创建其对象
  7. 用户发送的是post请求(method=post),因此 tomcat 会执行AddServlet中的doPost方法

标签:入门,tomcat,Servlet,request,servlet,AddServlet,请求
From: https://blog.csdn.net/qq_39921135/article/details/137218985

相关文章

  • 【Redis】快速入门 数据类型 常用指令 在Java中操作Redis
    文章目录一、简介二、特点三、下载与安装四、使用4.1服务器启动4.2客户端连接命令4.3修改Redis配置文件4.4客户端图形化界面五、数据类型5.1五种常用数据类型介绍5.2各种数据类型特点六、常用命令6.1字符串操作命令6.2哈希操作命令6.3列表操作命令6.4集合操......
  • Qt/C++入门基础学习001-绘图基础
    这一节介绍Qt的绘图基础知识,我们都知道,Qt里绘图使用的是QPainter,但是首先需要弄明白:在什么上绘图和在哪里绘图,然后才是怎么绘图,我们就围绕这几个问题来展开。在什么上绘图TheQPaintDeviceclassisthebaseclassofobjectsthatcanbepaintedonwithQPainter.Apa......
  • 前端学习<二>CSS基础——15-Sass入门
    Sass简介大家都知道,js中可以自定义变量,css仅仅是一个标记语言,不是编程语言,因此不可以自定义变量、不可以引用等等。面对这些问题,我们现在来引入Sass,简单的说,他是css的升级版,可以自定义变量,可以有if语句,还可以嵌套等等,很神奇吧!那下面我们就来介绍返个神奇的Sass。Sas......
  • [入门]二分查找右侧边界
    说明请在一个有序不递减的数组中(数组中的值有相等的值),采用二分查找,找到最后1次出现值x的位置,如果不存在x请输出-1。请注意:本题要求出q个x,每个x在数组中最后一次出现的位置。比如有6个数,分别是:122233,那么如果要求3个数:325,在数组中最后一次出现的位置,答案是:64-1。输......
  • SQL SERVER 从入门到精通 第5版 第二篇 核心技术 第5章 读书笔记
     第五章SQL基础 P63.SQL概述>.SQL的组成>.数据定义语言(datadefinitionlanguage,DDL):用于在数据库系统中,对数据库,表,视图,索引等数据库对象进行创建和管理>.数据控制语言(datacontrollanguage,DCL):实现对数据库中数据的完整性,完全性等的......
  • 每日面经分享(pytest入门)
    1.pytest具有什么功能a.自动发现和执行测试用例:pytest可以自动发现项目中的测试文件和测试函数,无需手动编写测试套件或测试运行器。b.丰富的断言函数:pytest提供了丰富的断言函数,方便地验证测试结果是否符合预期。断言函数可以比较值、集合、异常等。c.参数化测试:pyte......
  • 【入门】输入的这些数是否对称
    说明从键盘输入一个整数N(4<=N<=20),接下来输入N个数,判断输入的这些数是否对称,是输出“YES”,否则输出“NO”?(注意N可以是奇数或者偶数)。对称的意思是这些数正过来读和反过来读都是一样的。比如有4个数:1221,就是对称的,再比如有5个数:12321,也是对称的,但有5个数:12312,就不......
  • Java基础入门--第三章--面向对象(上)
    面向对象(上)1.1面向对象的思想2类与对象2.1类的定义2.2对象的创建与使用2.3对象的引用传递2.4访问控制权限3封装性3.1为什么要封装3.2如何实现封装4构造方法4.1定义构造方法4.2构造方法的重载5this关键字5.1使用this关键字调用本类中的属性5.2使用this......
  • PS从入门到精通视频各类教程整理全集,包含素材、作业等(4)复发
    PS从入门到精通视频各类教程整理全集,包含素材、作业等最新PS以及插件合集,可在我以往文章中找到由于阿里云盘有分享次受限制和文件大小限制,今天先分享到这里,后续持续更新 PS人物数码照片处理技法视频教程https://www.alipan.com/s/jqdSeZqQCoB提取码:89mj点击链接保存,或......
  • PS从入门到精通视频各类教程整理全集,包含素材、作业等(4)
    PS从入门到精通视频各类教程整理全集,包含素材、作业等最新PS以及插件合集,可在我以往文章中找到由于阿里云盘有分享次受限制和文件大小限制,今天先分享到这里,后续持续更新   PS人物数码照片处理技法视频教程https://www.alipan.com/s/jqdSeZqQCoB提取码:89mj点击链接......