Servlet 简介+ Cookie和session+过滤器Filter和监听器Listener

news2024/11/15 4:24:38

目录

1.Servlet 介绍

1.1  什么是Servlet

1.2 Servlet的使用方法

1.3 Servlet接口的继承结构

2.Servlet的生命周期

2.1 servlet生命周期中重要的方法

3.获得前端提交数据

4.中文乱码的解决方案

5.重定向和转发 

5.1 重定向

5.2 转发

6. Request对象

7. Response对象

8.Cookie和Session

8.1 Cookie

10.2.session

9.过滤器和监听器

9.1 过滤器

9.2 监听器

1.Servlet 介绍

1.1  什么是Servlet

 Servlet是Server Applet的简称,是用Java编写的是运行在 Web 服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

Servlet是Java编程语言编写的服务器端程序,运行在支持Java Servlet规范的Web服务器上。Servlet主要用于处理客户端请求生成动态Web页面。Servlet通常用于开发基于Web的应用程序,如电子商务网站、社交网络和在线游戏等。

Servlet是一个独立的Java类,它可以接收来自客户端的HTTP请求,并生成HTML、XML或其他格式的响应。Servlet通常通过HTTP协议与客户端进行通信,但也可以处理其他协议,如HTTPS、FTP等。

Servlet通常通过Java Servlet容器来运行,最常用的容器是Apache Tomcat。Servlet容器负责加载、初始化和管理Servlet,以及处理与Servlet的通信。Servlet容器还提供了一些额外的功能,如会话管理、安全性和性能优化。

总的来说,Servlet是一种强大的服务器端编程技术,可以帮助开发人员构建高性能、可扩展和可靠的Web应用程序。通过使用Servlet,开发人员可以轻松地处理各种Web请求,并生成动态内容,从而为用户提供更好的用户体验。

1.2 Servlet的使用方法
 

Servlet技术的核心是Servlet接口,定义了Servlet与Servlet容器之间的契约,Servlet容器将Servlet类载入内存,生成Servlet实例并调用它具体的方法,所以它是所有Servlet类必须直接或者间接实现的一个接口。

1.3 Servlet接口的继承结构

Servlet接口:只负责定义Servlet程序的访问规范;

GenericServlet抽象类:实现了Servlet接口,做了很多空实现,并持有一个ServletConfig类的引用,并提供了一些ServletConfig的使用方法;

HttpServlet抽象类:实现了service方法,并实现了请求分发处理;

2.Servlet的生命周期

简单来说,Servlet的生命周期就是servlet类对象什么时候创建?什么时候调用对应的方法,什么时候销毁。

2.1 servlet生命周期中重要的方法

构造方法:创建servlet的时候调用。默认情况下,第一次访问servlet的时候,会创建servlet对象。此时会有且只会调用1次构造函数,证明了servlet对象是单实例的。

init方法:创建完servlet对象之后调用,也只是会调用1次。

service方法:提供服务的方法,接收用户的请求,并处理用户的请求,然后响应用户的请求。每次发送请求,都会调用service方法。调用几次,service方法会执行几次。

destroy方法:销毁的方法。销毁servlet对象的时候调用。比如我们停止服务器或者重新部署服务器,都会销毁servlet对象,只会调用1次。

3.获得前端提交数据


    学好Servlet必须紧紧围绕着请求响应这两个概念 以上写的代码只是进行请求,然后再响应到客户端。请求的时候没有带数据给Servlet 下面开始写在请求的时候前端带数据到servlet里面,我们servlet要接收前端给我们的这个数据

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <form action="login" method="post">
    <input type="text" name="username"/><br>
    <input type="text" name="password"/><br>
    <input type="submit" value="提交">
  </form>
  </body>
</html>

 servlet实例

public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
        request.setCharacterEncoding("utf-8");
        //html页面中  input标签发送的数据,都会存到HttpServlet这个对象里面
        //通过前端input标签name的属性值获取前端发送的数据
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("username: " + username+"===password"+password);
        
        //Servlet响应数据到客户端的时候,如果是中文的话,会乱码
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().write("username: " + username+"===password"+password);
    }

4.中文乱码的解决方案

请求时候的乱码问题:

//前端发送数据到Servlet,如果是post请求的话,input输入中文数据的时候,Servlet接到的数据是乱码的。
request.setCharacterEncoding("utf-8");

响应时候中文乱码的问题: 

 //Servlet响应数据到客户端的时候,如果是中文的话,会乱码
response.setContentType("text/html;charset=utf-8");

5.重定向和转发 

5.1 重定向

是什么

用户通过浏览器发送一个请求,Tomcat服务器接收这个请求,会给浏览器发送一个状态码302,并设置一个重定向的路径,浏览器如果接收到了这个302的状态码以后,就会去自动加载服务器设置的路径

一个页面跳转到另外一个页面(应用场景)、登录页面跳转到主页面: login.jsp====>LoginServlet====>main.jsp

特征:

①重定向的过程是浏览器(客户端)的行为 ②实际上浏览器做了2次请求(当点击登录按钮的时候做了两次请求)(分别是请求login和main.jsp) ③注意上一次请求的request对象会丢失 ④重定向有一个非常明显的特征,即浏览器的url变化

 response.sendRedirect("main.jsp"); //就这一行代码,但是这一行代码必须写在doGet或者doPost方法中

5.2 转发

是什么

用户发送数据请求到服务器,服务器接收当前请求,会调用内部方式(转发)处理该请求,最终把响应给客户端

特征:

①转发是服务器的行为 ②浏览器在这个过程中只有一次行为 ③转发可以带有数据 request对象中 ④url不会发生任何的变化

request.getRequestDispatcher(“main.jsp”).forward(request,response);
//这一行代码就表示进行了转发,url没有变,但是响应的结果却是一次请求干了两个活

6. Request对象

  • 是什么

ServletRequest是一个接口,用户访问服务器,服务器会生成一个对象包含了http所有请求头,由于使用的是http协议,所以该对象的名字叫HttpServletRequest

  • 常用的方法

getRequestURL() //获取的完整的URL,即统一资源定位符
getRequestURI() //获取资源的名字,即统一资源标识符
getQueryString() //获取一个url参数部分
getRemoteAddr() //返回的是客户端的ip地址
getRemoteUser() //返回的是客户端的用户
getRemotePort() //返回的是客户端的主机的端口号
getRemoteHost() //返回的是客户端的主机地址
getCookie() //获取Cookie对象
getSession() //获取Session对象
getLocalName() //获取Web服务器主机的名字
getServletContext() //获取上下文对象的
setCharacterEncoding() //设置编码集的
getParameter() //获取前端传过来的数据
setAttribute() //将数据设置给request对象
geAttribute() //获取request对象中的数据 

7. Response对象

  • 是什么

响应对象,把数据返回给客户端。 我们的Servlet紧紧围绕着两个点(Request,Response)请求和响应

  • 常用方法

setHeader() //设置响应头的参数
setContentType() //设置字符编码集
getWriter() //获取字符输出流对象
addCookie() //对浏览器新增一个Cookie
sendRedirect() //重定向

8.Cookie和Session

8.1 Cookie

是什么

cookie是在浏览器中保存的

如果想要使用cookie要保证我们的浏览器是开启cookie,所以说有一定的弊端,如果浏览器没有开启cookie,就不能再使用cookie了

cookie的大小是有限制的,通常是4096byte

cookie的保存是以键值对的形式存在的

常用方法

//1.cookie的构造方法,目的是实例化出来cookie对象
Cookie(String name,String value)
//2.设置cookie的方法
setValue(String value) //修改cookie的值
getValue(String value) //获得cookie的值    
getName(String value) //获得cookie的键    
setMaxAge(int time) //设置cookie的有效时间
//3.要将cookie发送到浏览器
response.addCookie(Cookie cookie);
//4.获得所有cookie
request.getCookies();

10.2.session

为什么使用session?

cookie保存数据类型是单一的,只能保存字符串类型的数据

cookie的大小有限制

是什么?

保存服务器中

当用户发送一个HTTP请求到服务器时,服务器会检查该请求是否包含session标识符(通常是存cookie),如果没有,则会创建一个新的session(存储区域),并将session标识符发送给客户端。浏览器再发送请求时会携带session标识符,此时服务器根据session标识符就可以找到对应的session(存储区域)

使用session的时候一般要开启cookie如果浏览器没有开启cookie功能,我们可以通过html的url传参完后session的使用

没有大小的限制

信息的保存也是以键值对的形式存在的

常用方法

request.getSession(); //返回HttpSession
setAttribute(key,value); //设置属性 key ,value
getAttribute(key); //获取key的值
removeAttribute(String key)    //通过key值删除数据
invalidate(); //将session中的变量全部清空
setMaxInactiveInterval(int interval); //设置session失效时间,单位为秒
getMaxInactiveInterval();//获取session失效时间
getId(); //获取sessionID

9.过滤器和监听器

9.1 过滤器

  • 什么是过滤器

当浏览器向服务器发送请求的时候,过滤器可以将请求拦截下来,完成一些特殊的功能,比如:编码设置、权限校验、日志记录等。

  • 过滤器执行流程

 

9.2 监听器

  • 是什么?

监听器可以监听ServletContext,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。

  • Listener分类:Javaweb提供了8个监听器(接口)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(南京观海微电子)——半导体制程介绍

半导体的制程&#xff1a; 1. IC 设计&#xff1a; 预先规划芯片的功能&#xff0c;功能包含算术逻辑、记忆功能、 浮点运算、 数据传输&#xff0c;各功能分布在芯片上各区域&#xff0c;并制作所需的电子元件&#xff0c;工程师使用&#xff08;HDL&#xff09;设计电路图&…

opencv之几何变换

文章目录 1 前言2 线性几何变换的主要类型2.1 平移 (Translation)&#xff1a;2.1.1 定义2.1.2代码 2.2 缩放 (Scaling)&#xff1a;2.2.1 定义2.2.2 代码 2.3 旋转 (Rotation)&#xff1a;2.3.1 定义2.3.2 代码 2.4 仿射变换 (Affine Transformation)&#xff1a;2.4.1 定义2.…

Git:版本控制的强大工具与全面解析

Git&#xff0c;作为现代软件开发中不可或缺的版本控制工具&#xff0c;凭借其高效、灵活和分布式的特性&#xff0c;赢得了全球开发者的青睐。无论是个人项目还是大型企业级应用&#xff0c;Git 都能够提供强大的版本管理、分支策略、远程协作等功能。本文将从Git的创建与初始…

【电子数据取证】Android APK静态分析与动态分析

文章关键词&#xff1a;电子数据取证、手机取证、安卓取证、云取证、APK分析 当前手机用户量增长越来越快&#xff0c;尤其是中国&#xff0c;手机用户量已超10亿&#xff0c;即大约75%的中国人拥有自己的手机。正因为手机越来越智能化&#xff0c;携带也方便&#xff0c;因此…

算法day08 链表

4.链表_哔哩哔哩_bilibili 一、判断链表为回文 暴力方式&#xff1a; 从链表头开始将链表每一个元素值依次放入数组中&#xff0c;按下标比较值。 从链表尾开始将链表一半元素值放入stack栈中&#xff1b;每次弹栈比较 弹出的值和 链表值。 快慢指针&#xff1a; 假设有这样一个…

python-Flask搭建简易登录界面

使用Flask框架搭建一个简易的登录界面&#xff0c;登录成功获取token数据 1 搭建简易登录界面 代码如下 from flask import Flask, jsonify from flask import request import time, hashlibapp Flask(__name__)login_html <html> <head> <title>Log…

ROS - Turtle Nest 使用说明

系列文章目录 前言 正如乌龟巢是小乌龟的出生地一样&#xff0c;ROS 2 Turtle Nest 也是新 ROS 软件包诞生和发展的地方。 Turtle Nest 为创建新的 ROS 软件包提供了一个简单的图形用户界面&#xff0c;简化了软件包的创建过程。 一、为什么使用 Turtle Nest 而不是 “ros2 pkg…

STM32CubeMX生成freertos默认设置卡死,卡在HAL_Init不动,裸机运行程序正常跑,解决方法

1、简介 最近通过STM32CubeMX生成freertos发现任务不执行&#xff0c;卡在HAL_Init不动&#xff0c;网上找很久不好使&#xff0c;刚开始怀疑硬件问题&#xff0c;但是裸机运行程序正常跑&#xff0c;然后怀疑软件有问题&#xff0c;但是对F1,F3系列都好使&#xff0c;仅仅对F…

Git版本控制策略:Rebase还是Merge?详解优缺点与适用场景

在团队合作中&#xff0c;如何高效地管理代码版本和保持主干代码的稳定性&#xff0c;常常是开发团队关注的焦点。在使用Git管理代码的常规操作中&#xff0c;Merge是最常见的操作&#xff0c;此外Rebase也是一种很实用的操作&#xff0c;尤其是我们想要保持更干净的提交历史时…

habor仓库

1.安装docker 现在打开不了docker官网&#xff0c;本人是在清华下载站下载的 Index of /docker-ce/linux/rhel/9/x86_64/stable/Packages/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 解压docker 错误&#xff1a; 原因&#xff1a;rhel9自带podman和runc&…

车辆种类检测数据集介绍

车辆种类检测数据集 数据集概述 本数据集专为车辆种类检测任务而设计&#xff0c;包含了大量的车辆图像&#xff0c;每张图像均带有详细的车辆种类标注信息。数据集旨在帮助研究人员和开发人员训练高精度的目标检测模型&#xff0c;以应用于车辆识别、交通监控等多个领域。 数…

使用mysql保存密码

登录MySQL 这行命令告诉MySQL客户端程序用户root准备登录&#xff0c;-p表示告诉 MySQL 客户端程序提示输入密码。 mysql -u root -p创建数据库 create database wifi; use wifi;create table password(user_password CHAR(8),primary key(user_password));源码 代码编译 …

《PCI Express体系结构导读》随记 —— 第II篇 第7章 PCIe总线的数据链路层与物理层(2)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第II篇 第7章 PCIe总线的数据链路层与物理层&#xff08;1&#xff09; 7.1 数据链路层的组成结构 数据链路层使用ACK/NAK协议发送和接收TLP&#xff0c;由发送部件和接收部件组成。其中&#xff0c;发送部件由…

Ubuntu 20.04 上使用 Prometheus 和 Grafana 监控 PHP 8.0

本文方案监听php状态信息是采用php-php-exporter直接通过sock监控php-fpm信息。还可以通过nginx查询php状态信息从而监控&#xff0c;中间需要加上nginx配置。详见本文末尾 查找最新的 php-fpm_exporter 版本 访问 php-fpm_exporter 的 GitHub releases 页面 来查找最新版本。…

Nginx简单的安全性配置

文章目录 引言I Nginx简单的安全性配置禁止特定的HTTP方法限制URL长度禁止某些用户代理限制请求速率连接限制禁止访问某些文件类型II 常见的安全规则防御CC攻击User-Agent过滤GET-URL过滤GET-参数过滤POST过滤(sql注入、xss攻击 )引言 Nginx本身并不具备复杂的防火墙规则定制…

【电力电子】单相并网逆变器

摘要 单相并网逆变器是一种将直流电转换为单相交流电&#xff0c;并与电网同步输出的装置。它广泛应用于小型可再生能源系统&#xff0c;如光伏发电&#xff0c;确保产生的电能能够高效、安全地并入电网。本文探讨了单相并网逆变器的设计理论、控制策略以及其在不同负载条件下…

PAT--1002 写出这个数

题目描述 读入一个正整数 n&#xff0c;计算其各位数字之和&#xff0c;用汉语拼音写出和的每一位数字。 输入格式&#xff1a; 每个测试输入包含 1 个测试用例&#xff0c;即给出自然数 n 的值。这里保证 n 小于 10 100 。 输出格式&#xff1a; 在一行内输出 n 的各位数字…

深入探索C语言中的各种Sleep方法

引言 在程序设计中&#xff0c;有时需要让进程或线程暂停执行一段时间&#xff0c;这种需求可以通过使用 sleep 函数来实现。本文将详细介绍在 C 语言环境下可用的不同类型的 sleep 函数&#xff0c;包括它们的用途、参数以及注意事项&#xff0c;并提供一些示例代码。 目录 …

HTB-Responder(文件包含和哈希破解)

前言 各位师傅大家好&#xff0c;我是qmx_07,今天给大家讲解Responder靶场 渗透过程 信息搜集 服务器开放了80,5985端口尝试访问网站5985端口是一种远程管理协议 绑定域名 我们发现访问ip&#xff0c;进行了重定向跳转&#xff0c;需要绑定一下域名 echo "10.129.160…

麦穗检测计数-目标检测数据集(包括VOC格式、YOLO格式)

麦穗检测计数-目标检测数据集&#xff08;包括VOC格式、YOLO格式&#xff09; 数据集&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1N9tGbcssxvSM1W71q2YbNA?pwd3nb3 提取码&#xff1a;3nb3 数据集信息介绍&#xff1a; 共有 3373张图像和一一对应的标注文件 标…