05.JavaWeb-Servlet

news2024/11/16 1:24:16

1.Servlet基础

1.1 Servlet概述

用于处理客户端传来的HTTP请求,并返回一个响应(特点:方便、跨平台、灵活性和可扩展性)

1.2 Servlet开发入门

1.2.1 Servlet接口及实现类

        1.最基本的接口是javax.servlet.Servlet,Servlet接口定义了如下五个抽象方法:

方法描述
void init(ServletConfig config)初始化的作用,容器创建好Servlet对象就会调用这个方法,且只调用一次,容器通过config传递初始化配置信息
ServletConfig getServletConfig()用于获取Servlet对象的配置信息
String getServletConfig()返回一个包含关于Servlet信息的字符串(作者、版本。。)
void service(ServletRequest request, ServletResponse response)负责响应用户的请求,当容器接收到用户端访问Servlet对象的请求时就调用一次;通过ServletRequest对象得到客户端的相关信息和请求信息,通过ServletResponse对象设置响应信息
void destroy()负责释放Servlet对象占用的资源,当服务器关闭或Servlet对象被移除,调用此方法

         2.常用的接口,HttpServlet接口,是Servlet的实现抽象类GenericServlet的子类

1.2.2实现Servlet程序

        1.创建一个java类并继承HttpServlet

        2.重写toGet方法与toPost方法(如果GET和POST请求的处理方式一致,可以在doPost()()方法中直接调用doGet()方法。

2.Servlet的请求与响应

        Servlet最主要的作用就是处理客户端请求,并向客户端做出响应,Servlet的每次请求,Web服务器在调用Servlet()方法之前,都会创建两个对象:HttpServletRequest和HttpServletResponse

2.1HttpServletRequest

        代表客户端的请求,包含客户端发送的所有信息,如请求方法、URL、参数、头部信息等

2.1.1获取请求参数(常用)

String paramName = request.getParameter("paramName");
//paramName为要获取值的元素的name

2.1.2 获取请求方法

String method = request.getMethod();

2.1.3获取与请求关联的会话对象

HttpSession session = request.getSession();

2.1.4获取请求分派器

        将请求转发给其他资源

RequestDispatcher dispatcher = request
    .getRequestDispatcher("path/to/other/resource");

// 将请求转发给其他资源
dispatcher.forward(request, response);

2.2HttpServletResponse

        代表服务器对客户端的响应,用于发送响应内容和设置响应的属性

2.2.1设置响应内容的类型

// 设置响应内容的类型为文本类型
response.setContentType("text/html;charset=UTF-8");

2.2.2获取用于向客户端输出字符数据的PrintWriter对象(常用)

PrintWriter out = response.getWriter();
// 获取用于向客户端输出字符数据的 PrintWriter 对象

// 向客户端输出响应内容
out.println("<html>");
out.println("<body>");
out.println("<h1>Hello, World!</h1>");
out.println("</body>");
out.println("</html>");

2.2.3获取用于向客户端输出二进制数据的OutputStream对象

2.2.4将客户端重定向到指定的URL

response.sendRedirect("https://www.example.com");

2.2.5设置响应的状态码

 response.setStatus(HttpServletResponse.SC_OK);

2.3请求转发

        请求转发是将请求从一个 Servlet 转发给另一个 Servlet、JSP 页面或静态资源的过程

// 获取请求分派器,将请求转发给另一个资源
request.getRequestDispatcher("/anotherServlet").forward(request, response);

// 或者将请求转发给一个 JSP 页面
request.getRequestDispatcher("/index.jsp").forward(request, response);

// 或者将请求转发给一个静态资源
request.getRequestDispatcher("/static/file.html").forward(request, response);

        注意:一旦调用了转发方法【forward(request,response)】,后续的代码将不会执行

2.4重定向

        重定向是将请求从一个 Servlet 重定向到另一个 URL 的过程

        重定向常用于在完成某些处理后将用户导航到其他页面,例如登录成功后重定向到用户主页,或者在提交表单后重定向到一个结果页面。

// 设置重定向的 URL
String redirectUrl = "http://example.com/destination";

// 执行重定向
response.sendRedirect(redirectUrl);

        注意 :重定向是通过向客户端浏览器发送一个特殊的响应来实现的,因此浏览器会发起一个新的请求,这意味着之前的请求和响应对象都会被销毁。确保在执行重定向之前完成所有需要处理的逻辑和设置响应的操作,因为一旦调用了重定向方法,后续的代码将不会执行。

重定向作用:

1.页面跳转:重定向可将客户端浏览器导航到不同的URL,使用户在浏览器中看到目标页面。这对于实现页面之间的跳转非常有用。

2.资源定位:重定向可用于定位到其他Web应用程序或外部URL上的资源,例如下载文件或访问外部服务。

3.状态更新:重定向可用于更新客户端的状态,例如在提交表单后将用户重定向到一个结果页面,以避免用户进行页面刷新时重复提交表单。

请求转发的作用:
1.服务器内部跳转:请求转发将请求从一个Servlet转发到另一个Servlet、JSP页面或静态资源,这在服务器内部完成。用户对此过程是不可见的
2.共享请求信息:通过请求转发,原始请求的参数、属性和其他相关信息可以在目标Servlet或页面中共享和访问,方便数据的传递和处理
3.动态内容生成:通过请求转发,可以在目标Servlet或页面中生成动态内容,并将其包含在最终响应中返回给客户端
重定向适合用于页面跳转和资源定位,而请求转发适合用于服务器内部跳转和共享请求信息

2.5会话管理

        会话管理是在Web应用程序中跟踪和管理用户会话状态的过程。它允许在多个HTTP请求之间存储和检索用户特定的数据,并维护用户与应用程序之间的状态。

(细节以后搞明白一点或用到了再补充)

2.6中文乱码问题

        其实就是编码方式的问题,浏览器用的编码方式、Servlet使用的编码方式等不是UTF-8

解决方法:

response.setContentType("text/html; charset=utf-8");

        既设置了HttpServletResponse使用UTF-8编码,又通知浏览器使用UTF-8解码

2.7定时刷新页面

        有时页面中需要显示一些实时更新的数据,那么就需要设置页面自动刷新

设置方法:

//每3秒刷新一次当前页
response.setHeader("Refresh", "3");

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

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

相关文章

高完整性系统工程(十二):Separation Logic for Automated Verification

目录 1. INTRODUCTION TO SEPARATION LOGIC 分离逻辑 1.1 霍尔推理&#xff08;Hoare Reasoning&#xff09; 1.2 堆指针的影响 1.3 全局和局部推理&#xff08;Global and Local Reasoning&#xff09; 1.4 组合推理&#xff08;Compositional Reasoning&#xff09; 1.…

SpringBoot通过加装外部JAR包中的类实现业务插件功能

综合记录一下关于ClassLoader和Spring Bean的动态加载卸载功能 目录 一、需要说明二、总体设计三、具体设计3.1 加载卸载Bean工具类3.2 创建卸载方法3.3 创建加载方法3.4 创建获取具体服务类方法 四、总结 一、需要说明 有一个公共的发送通知的接口&#xff0c;这个接口需要做…

CUDA配置正确,但是torch.cuda.is_available()却是False的解决方案

1.torch.cuda.is_available()返回为False 有时候我们想要使用GPU加速&#xff0c;但是发现CUDA、pytorch都安装好了&#xff0c;且版本也匹配&#xff0c;但是仍然无法使用GPU,显示信息如下&#xff1a; 这时候我们可以看看是不是我们的Pytorch的问题 2.输入下面命令查看pyto…

(学习日记)2023.04.26

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

cesium-native编译

我相信点进这个博客的都是一些cesium专业人才&#xff0c;这文章只起了一个抛砖引玉的作用&#xff0c;希望各位人才不惜赐教。 Github地址&#xff1a;CesiumGS/cesium-native (github.com) 编译需求&#xff1a;升级公司的3dtile的架构&#xff0c;提高性能 博客目的&…

(转载)基于混合粒子群算法的TSP问题求解(matlab实现)

1 理论基础 标准粒子群算法通过追随个体极值和群体极值完成极值寻优&#xff0c;虽然操作简单&#xff0c;且能够快速收敛&#xff0c;但是随着迭代次数的不断增加&#xff0c;在种群收敛集中的同时&#xff0c;各粒子也越来越相似&#xff0c;可能在局部最优解周边无法跳出。…

福利·分析

竞争使得生产者剩余和消费者剩余的和最大化 无谓损失指的是由于过量生产或生产不足造成的消费者剩余和生产者剩余的净损失。 税收与补贴的福利分析 从量税效果&#xff1a; 为简单期间&#xff0c;我们对某种商品征收从量税&#xff1a;对每一销售的单元&#xff0c;征收特定…

汽车电子设计之AUTOSAR中CanNM模块

目录 前言 正文 网络节点类型 仅本地唤醒 仅网络唤醒 本地网络唤醒 KL15电唤醒 NM状态机 Bus Sleep Mode Network Mode Prepare Bus-Sleep Mode Passive Mode 状态机时间参数总结 NM状态机切换 网络管理报文结构 NM报文总体结构解析 CBV详解 常用函数接口 前言…

matlab给变量名称

效果 做法&#xff1a; 构建table-> ‘VariableNames’,{‘y’,‘x’} adata; a(:,2)linspace(0.1,4.1,41); tbltable(a(:,1),a(:,2), VariableNames,{y,x});

Verilog学习(SPI协议的Flash驱动控制)

目录 一、SPI通信协议 1.1 SPI物理层 1.2 SPI协议层 二、实战 2.1 SPI控制FLASH实现全擦除代码编写 2.2 上板验证 一、SPI通信协议 1.1 SPI物理层 SPI通信模式为主-从模式 &#xff0c;分为一主一从、一主多从&#xff1a; 片选线CS用于主机选择对应的从机进行通信&…

html爱情表白神器,回忆纪念册(附源码)

文章目录 1.设计来源1.1 主界面1.2 相关界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/131022313 html爱情表白神器&#xff0c;回忆纪念册 html爱情表白神器&#x…

【JavaEE初阶】万字详解TCP/IP协议!!!(一)

文章目录 1. 应用层和传输层的联系2. UDP协议3. TCP协议3.1 TCP报头介绍3.2 TCP实现可靠传输的核心机制&#xff08;1&#xff09;确认应答&#xff08;2&#xff09;超时重传&#xff08;3&#xff09;连接管理建立连接&#xff08;三次握手&#xff09;断开连接(四次挥手) &a…

测试人挣破年入20万的束缚,从第一个python+selenium项目开始!

今天整理一下实战项目的代码共大家学习。&#xff08;注:项目是针对我们公司内部系统的测试&#xff0c;只能内部网络访问&#xff0c;外部网络无法访问&#xff09; 问&#xff1a; 1.外部网络无法访问&#xff0c;代码也无法运行&#xff0c;那还看这个项目有啥用 2.如何学…

English Learning - L3 作业打卡 Lesson4 Day28 2023.6.1 周四

English Learning - L3 作业打卡 Lesson4 Day28 2023.6.1 周四 引言&#x1f349;句1: Something may appear to be free of charge, but there may be a hidden cost.成分划分弱读连读爆破语调 &#x1f349;句2: When we fail to see problems at work, my supervisor tells …

一文了解0欧电阻的奥秘:它不是导线,也不是真的0欧

目录 一、0欧电阻的定义 二、 0欧电阻和导线的区别 三、0欧电阻的选型 四、0欧电阻长什么样 五、0欧姆电阻的用途 1.调试和兼容设计&#xff1a; 2.预留电阻位置&#xff1a; 3.方便布线&#xff1a; 4.方便测试电流&#xff1a; 5.噪声抑制&#xff1a; 6.信号隔离…

学习stm32f103c8t6,如何从正点原子官网下载资料及资料使用

学习stm32f103c8t6&#xff0c;如何从正点原子官网下载资料及资料使用 一、下载资料 用百度搜索“正点原子” 点击进入后找我们需要的芯片型号的资料&#xff0c;选择stm32f103-mini开发板的资料进行下载&#xff0c;其他的像stm32f103的精英版&#xff0c;战舰开发板啥的&am…

代码随想录二刷 day11 | 栈与队列 之 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值

day11 20. 有效的括号1047. 删除字符串中的所有相邻重复项150. 逆波兰表达式求值 20. 有效的括号 题目链接 解题思路&#xff1a; 有三种不匹配的情况&#xff1a; 第一种情况&#xff0c;字符串里左方向的括号多余了 。 第二种情况&#xff0c;括号没有多余&#xff0c;但是…

大专毕业,从6个月开发转入测试岗位的一些感悟——写在测试岗位3年之际

时光飞逝&#xff0c;我从前端开发岗位转入测试岗位已经三年了&#xff0c;这期间从迷茫到熟悉&#xff0c;到强化&#xff0c;到熟练&#xff0c;到总结&#xff0c;感受还是很深的&#xff01; 三年前的某一个晚上&#xff0c;我正准备下班回家&#xff0c;我们的项目经理把…

Selenium UI自动化测试入门

1.先下载Pycharm编辑器&#xff0c; 网站&#xff1a;下载地址 2.安装python环境包 地址&#xff1a;Download Python | Python.org 安装的时候记住勾选自动配置环境变量 3.在pycharm中配置python执行器路径 4.安装selenium库 pip install selenium4.1.1 查看当前selenium版…

Flutter架构——线程模型

Flutter的架构分为框架、引擎和嵌入器层(Embedder)&#xff0c;其中嵌入器层将Flutter嵌入各个平台。Flutter完整的架构图如下&#xff1a; Flutter中的隔离是通过引擎层的一个线程来实现的&#xff0c;但是Flutter引擎线程的创建与管理又是由嵌入器负责的&#xff0c;也就是说…