Day 15 Servlet(一)

Servlet

  • 1、简介
  • 2、快速入手
    • 2.1servlet jar包导入
    • 2.2 Content-type
    • 2.3 Servlet-url 写法
    • 2.4 注解方式配置servlet
    • 2.5 servlet 生命周期

1、简介

资源包括静态资源和动态资源。
对于服务器响应,有时候我们需要根据客户的不同请求返回不同的数据和页面。此时就需要一个java类来接收该请求,但是并不是所有的类都能接收,只有实现Servlet接口的java类才能接收和响应请求。Servlet运行在服务端。每当有请求时,Servlet会在服务端运行对应的java代码生成对应的数据返回给浏览器端。
流程:
在这里插入图片描述
①每当客户浏览器像服务器进行请求一个动态资源时,tomcat会创建一个HttpServletRequset对象来接收该请求,同时也会生成一个HttpServletResponse对象,用于返回数据。
②之后会根据请求行的内容找到我们要执行的Servlet类,实例化该类并运行其中的service方法。
③将数据封装给response对象,并返回。
我们只需要填写Service方法中要执行的内容即可。

2、快速入手

开发流程
①创建web项目,将tomat添加为当前项目的依赖
②重写service方法
③在web.xml文件中,配置servlet的映射路径
index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>first</title>
</head>
<body>
<form method="get" action="userservlet">

   用户名: <input type="text" name="username"> <br>
    <input type="submit" value="校验">
</form>
</body>
</html>

Userservlet

package com.cky.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;

public class UserServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name=req.getParameter("username");
        String info="NO";
        if (name.equals("cky")){
            info="Yes";
        }
        PrintWriter writer = resp.getWriter();
        writer.println(info);
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    <servlet>
        <servlet-name>userServlet</servlet-name>
        <servlet-class>com.cky.servlet.UserServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>userServlet</servlet-name>
        <url-pattern>/userservlet</url-pattern>
    </servlet-mapping>
</web-app>

2.1servlet jar包导入

对于servlet jar包,我们可以创建一个lib将其放入lib下添加到当前项目依赖,但是这样会让我们打包之后的项目也包含该jar包,但是该jar包其实时tomact自带的,对于在tomcat上跑的项目就会有。我们只需要在项目构建时,将其添加为项目依赖即可。
在这里插入图片描述
我们可以看到这是Provided的,即只会在编码时存在,在项目编译和打包时就不会存在了。在项目编译和打包之后,在tomcat上运行时,项目会自动调用tomcat lib下的servlet jar包。
项目编码时是需要jar包的,不然报错,无法编译。

2.2 Content-type

告诉客户端 以什么形式 编码该返回类型。
我们访问servlet时,会自动以html形式返回。在这里插入图片描述
但是不显示,我们可以手动设置

package com.cky.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;

public class UserServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name=req.getParameter("username");
        String info="NO";
        if (name.equals("cky")){
            info="Yes";
        }
        resp.setHeader("Content-Type","text/html");
        PrintWriter writer = resp.getWriter();
        writer.println(info);
    }
}

在这里插入图片描述

2.3 Servlet-url 写法

①精确匹配 比如
/servlet
②模糊匹配
/ 匹配全部 但不包含.jsp
/* 匹配全部 包含jsp

前缀模糊 比如
*.action 前面是什么都可以 只要是.action 结尾

后缀模糊
/a/*

2.4 注解方式配置servlet

package com.cky.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;
//配置多个url路径 使用value 是一样饿效果
@WebServlet(urlPatterns ={"/s1","/s2"})
public class UserServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name=req.getParameter("username");
        String info="NO";
        if (name.equals("cky")){
            info="Yes";
        }
        resp.setHeader("Content-Type","text/html");
        PrintWriter writer = resp.getWriter();
        writer.println(info);
    }
}

注意:web.xml方式 和注解方式 只能使用一个,不要同时使用。

2.5 servlet 生命周期

在这里插入图片描述
servlet是单例的,即在服务器中只会实例化一次,即使是多线程,也是使用这一个对象,所以并不支持在service中修改成员变量,多个线程对一个成员变量进行修改,就会引起线程冲突。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/486078.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录训练营第55天 | LeetCode 583. 两个字符串的删除操作、​​​​​​LeetCode 72. 编辑距离、总结

目录 LeetCode 583. 两个字符串的删除操作 文章讲解&#xff1a;代码随想录(programmercarl.com) 视频讲解&#xff1a;LeetCode&#xff1a;583.两个字符串的删除操_哔哩哔哩_bilibili 思路 ​​​​​​LeetCode 72. 编辑距离 文章讲解&#xff1a;代码随想录(programm…

一、Jdk和eclipse安装和配置

1 JDK与eclipse的安装和配置 1.1JDK安装 1.2配置环境变量 &#xff08;1&#xff09;新建系统变量名为java_home,变量值为jdk安装路径&#xff0c;由自己决定&#xff0c;例如&#xff1a;C:\Program Files\Java\jdk-11.0.6 (2))新建系统变量名为classpath,变量值为".&q…

MySQL事务(超详细!!!)

目录 一、MySQL事务的概念 二、事务的ACID特点 1、原子性&#xff08;Atomicity&#xff09; 2、持久性 3、隔离性&#xff08;Isolation&#xff09; 3.1 事务的并发问题 ①、脏读(读取未提交数据) ②读已提交、不可重复读(前后多次读取&#xff0c;数据内容不一致) …

数学算法(算法竞赛、蓝桥杯)--判定质数试除法

1、B站视频链接&#xff1a;G06 判定质数 试除法_哔哩哔哩_bilibili 题目链接&#xff1a;【深基7.例2】质数筛 - 洛谷 #include <bits/stdc.h> using namespace std;bool is_prime(int x){if(x1)return 0;//特判1不是质数for(int i2;i*i<x;i){//枚举小的那个到根号n…

算法系列--动态规划--子序列(1)

&#x1f495;"深思熟虑的结果往往就是说不清楚。"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;算法系列–动态规划–子序列(2) 今天带来的是算法系列--动态规划--子序列(1),是子序列问题的开篇!带大家初识子序列问题 一.什么是子序列问题 我们…

LeetCode 热题 HOT 100(P21~P30)

系列文章&#xff1a; LeetCode 热题 HOT 100(P1~P10)-CSDN博客 LeetCode 热题 HOT 100(P11~P20)-CSDN博客 LeetCode 热题 HOT 100(P21~P30)-CSDN博客 LC48rotate_image . - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 给定一个 n n 的二维矩阵 matrix 表…

Practical Network Acceleration with Tiny Sets

文章目录 why-AbstractIntroductionContributionsRelated WorksFilter-level pruningBlock-level pruningData Limited Knowledge DistillationMethodOverviewThe motivation to drop blocksThe recoverability of the pruned modelRecover the accuracy of the pruned modelEx…

力扣:205. 同构字符串

前言&#xff1a;剑指offer刷题系列 问题&#xff1a; 给定两个字符串 s 和 t &#xff0c;判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t &#xff0c;那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符&#xff0c;同时不改变字符…

Leetcode——560. 和为 K 的子数组

560. 和为 K 的子数组 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/subarray-sum-equals-k/description/ 题目描述&#xff1a; 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回该数组中和为 k 的子数组的个数 。子数组是数组中元素…

ABeam德硕|中国与柴火创客空间达成战略合作,拟定联合发布企业数字化转型实战课程

引言 随着近年数字技术的迅速发展&#xff0c;企业纷纷寻求数字化转型&#xff0c;而数字化转型企业人才的培养正是其中的关键一环。数字化转型人才能够从战略层面把握转型方向&#xff0c;快速适应新技术变革&#xff0c;有效应用技术工具以优化业务流程、提高组织效率、实践创…

如何配置元数据?(如何使用Spring容器)

目录 一、引出问题&#xff08;如何配置元数据&#xff1f;&#xff09;二、没有Spring的时代三、XML配置文件&#xff08;xml配bean&#xff09;1 格式1.1 示例 2 实例化一个Spring容器3 使用Spring容器4 后言 四、基于注解的配置 【[1.9. Annotation-based Container Configu…

代码随想录算法训练营第五十四天|392.判断子序列、115.不同的子序列

392.判断子序列 刷题https://leetcode.cn/problems/is-subsequence/description/文章讲解https://programmercarl.com/0392.%E5%88%A4%E6%96%AD%E5%AD%90%E5%BA%8F%E5%88%97.html视频讲解https://www.bilibili.com/video/BV1tv4y1B7ym/?vd_sourceaf4853e80f89e28094a5fe1e220…

Maven构建项目时,发生依赖下载错误的情况

在使用 Maven 构建项目时&#xff0c;可能会发生依赖下载错误的情况&#xff0c;主要原因有以下几种 1、下载依赖时&#xff0c;出现网络故障&#xff0c;或仓库服务器宕机等原因&#xff0c;导致无法连接至Maven仓库(也就是我们配置的阿里镜像)&#xff0c;从而无法下载依赖 …

国内git最新版本下载链接2.44

git官网地址:Git - Downloading Package (git-scm.com) 蓝奏云: ​​​​​​gGit-2.44.0-64-bit.exe - 蓝奏云 git仓库地址:git/git: Git Source Code Mirror - This is a publish-only repository but pull requests can be turned into patches to the mailing list via …

GPU从虚拟化迈向池化:趋动OrionX产品的创新之路

/ 引言 / 随着人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;技术的飞速发展&#xff0c;图形处理单元&#xff08;GPU&#xff09;已成为数据中心和云计算环境中的关键资源。GPU的并行处理能力使其成为执行复杂计算任务的理想选择。 然而&#xff…

Docker进阶:Docker-compose 实现服务弹性伸缩

Docker进阶&#xff1a;Docker-compose 实现服务弹性伸缩 一、Docker Compose基础概念1.1 Docker Compose简介1.2 Docker Compose文件结构 二、弹性伸缩的原理和实现步骤2.1 弹性伸缩原理2.2 实现步骤 三、技术实践案例3.1 场景描述3.2 配置Docker Compose文件3.3 使用 docker-…

【vue3学习之路(一)】

文章目录 前言一、vue3项目创建1.1环境准备1.1.1 基于 vue-cli 创建&#xff08;脚手架创建&#xff09;1.1.2 基于 vite 创建&#xff08;推荐&#xff09; 二、熟悉流程总结 前言 参考视频&#xff1a;https://www.bilibili.com/video/BV1Za4y1r7KE?p10&spm_id_frompag…

EFcore的实体类配置

1 约定配置 约定大于配置&#xff0c;框架默认了许多实体类配置的规则&#xff0c;在约定规则不满足要求时&#xff0c;可以显示地定义规则 1 数据库表明在不指定的情况下&#xff0c;默认使用的是数据库上下文类【DBContext】中DbSet 的属性名&#xff1b; 2 数据库表列的名字…

Vue3新手教程

Vue3新手教程 一. Vue3简介1. 性能的提升2.源码的升级3. 拥抱TypeScript4. 新的特性 二. 创建Vue3工程1. 基于 vue-cli 创建2. 基于 vite 创建(推荐)3. 一个简单的效果 三. Vue3核心语法1. OptionsAPI 与 CompositionAPI2. 拉开序幕的 setup2.1 setup 概述2.2 setup 的返回值2.…

【计算机考研】 跨考408全年复习规划+资料分享

跨专业备考计算机考研408&#xff0c;确实是一项挑战。在有限的时间内&#xff0c;我们需要合理安排时间&#xff0c;制定有效的学习计划&#xff0c;做到有效地备考。回顾我之前对408的经验&#xff0c;我想分享一些备考计划和方法。 要认清自己的起点。作为跨专业考生&#…