合肥快速做网站/seo效果最好的是
目录
HttpServlet
init
destory
service
实例:处理get、post、put、delete请求
1.通过postman得到请求
2.通过ajax得到请求
HttpServletRequest
常见方法
前端给后端传参
1.GET,query string
2.POST,form
3.POST,json
HttpSeverletResponse
setStatus
HttpServlet
核心方法
init
init:首次收到和该类相关联的请求的时候调用一次,后面再次出现该请求不再重复。
destory
HttpServlet实例不再使用的时候调用一次。
停止服务器的方法不同,可能会对destroy的使用有影响,因此一般不推荐使用destroy。
service
收到HTTP请求就会触发,doGet在service中调用。
扩充:servlet的生命周期
1.开始的时候,执行init
2.每次收到请求执行service
3.销毁之前,执行destroy
实例:处理get、post、put、delete请求
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/method")
public class MethodServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("doGet");resp.getWriter().write("doGet");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("doPost");resp.getWriter().write("doPost");}@Overrideprotected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("doPut");resp.getWriter().write("doPut");}@Overrideprotected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("doDelete");resp.getWriter().write("doDelete");}
}
在浏览器只能得到第一个get请求的内容。在postman中可以选择得到不同的请求结果。
1.通过postman得到请求
2.通过ajax得到请求
注意:test.html放在webapp下
编写HTML代码:
修改Ajax中的type的值,就可以得到不同的请求。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=<device-width>, initial-scale=1.0"><title>Document</title>
</head>
<body><!-- 使用这个界面来构造ajax请求 --><!-- 引入jQuery --><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script><script>$.ajax({type:'get',// 相对路径的写法// url:'method',// 绝对路径的写法url:'/hello_servlet2/method',success:function(body,status){console.log(body);}});</script>
</body>
</html>
HttpServletRequest
这个对象是tomcat自动构造的,tomcat会实现监听窗口,接受连接,读取请求,解析请求,构造请求对象等一系列工作。
常见方法
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/showRequest")
public class ShowRequestServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//响应里的数据格式是什么样的resp.setContentType("text/html");StringBuilder stringBuilder=new StringBuilder();stringBuilder.append(req.getProtocol());stringBuilder.append("<br>");stringBuilder.append(req.getMethod());stringBuilder.append("<br>");stringBuilder.append(req.getRequestURL());stringBuilder.append("<br>");stringBuilder.append(req.getContextPath());stringBuilder.append("<br>");stringBuilder.append(req.getQueryString());stringBuilder.append("<br>");resp.getWriter().write(stringBuilder.toString());}
}
//获取header中的所有键值对Enumeration<String> headerNames=req.getHeaderNames();while (headerNames.hasMoreElements()){String headerName=headerNames.nextElement();stringBuilder.append(headerName+":"+req.getHeader(headerName));stringBuilder.append("<br>");}resp.getWriter().write(stringBuilder.toString());
前端给后端传参
1.GET,query string
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/getParameter")
public class GetParameterServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//预期浏览器会发送一个形如/getParameter?studentId=10&classId=20的请求//getParameter得到的是String类型的结果String studentId= req.getParameter("studentId");String classId=req.getParameter("classId");resp.setContentType("text/html");resp.getWriter().write("studentId="+studentId+" classId="+classId);}
}
?后的内容是手打的,之后按下回车才会有以下的显示。
2.POST,form
对于前端是form表单这样格式的数据,后端也用getParameter来获取。使用getParameter既可以获取到query string中的键指对,也可以获取到form表单构造的body中的键值对。
前端
前端提交后只能得到404,具体的进程通过fiddler来查看。
后端代码完成后可以在浏览器页面显示出来
前后端交互过程:前端通过form表单提交值到tomcat服务器,然后tomcat构造req和resp对象,值存在req对象中,然后通过req的方法调用其中的值,通过resp编写响应,写回到tomcat,tomcat发送响应给浏览器显示。
3.POST,json
postman构造出一个post请求,body就是json数据。请求到达tomcat,tomcat解析成request对象,在服务器的servlet代码中,req.getInputStream读取body的内容,再把body内容构造成一个响应的结果返回给浏览器。
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;@WebServlet("/postParameter2")
public class PostParameter2Servlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//通过这个方法处理json格式的数据//直接把req对象里body完整的读取出来//getInputStream//在这个流对象中读多少个字节取决于Content-lengthint length= req.getContentLength();byte[] buffer=new byte[length];InputStream inputStream=req.getInputStream();inputStream.read(buffer);//把这个字节数组构造成String,打印出来String body= new String(buffer,0,length,"utf8");System.out.println("body="+body);resp.getWriter().write(body);}
}
通过json传递数据,只能得到body的值,但没有按照键值对的方式来处理,而form表单是可以的。这时候json方式处理可以使用第三方库Jackson。
通过maven引入第三方库
将Jackson代码引入到pom.xml依赖中
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.14.1</version>
</dependency>
代码:
import com.fasterxml.jackson.databind.ObjectMapper;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;class Student{public int studentId;public int classId;
}
@WebServlet("/postParameter2")
public class PostParameter2Servlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//使用Jackson使用到的核心对象ObjectMapper objectMapper=new ObjectMapper();//readValue的功能就是把一个json格式的字符串转换成Java对象Student student=objectMapper.readValue(req.getInputStream(),Student.class);System.out.println(student.studentId+","+student.classId);}
}
小结:
1GET,参数通过query string传递,服务器使用req.getParameter方法
2.POST,参数通过body(form表单的格式传递),服务器使用req.getParameter的方法
3.POST,参数通过(json),服务器通过getInputStream读取到body的值(此处可以使用第三方库,完成json格式的解析,此处使用Jackson,核心是使用ObjectMapper这个对象,使用readValue把json格式的字符串转换成Java对象)
HttpSeverletResponse
setStatus
响应设置状态码:
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/status")
public class StatusServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置响应的状态码resp.setStatus(404);resp.setContentType("text/html;charset=utf8");//设置响应的内容resp.getWriter().write("<h1>404没找到!<h1>");}
}
resp.sendError()返回tomcat自带的错误页面
相关文章:

Servlet核心API
目录 HttpServlet init destory service 实例:处理get、post、put、delete请求 1.通过postman得到请求 2.通过ajax得到请求 HttpServletRequest 常见方法 前端给后端传参 1.GET,query string 2.POST,form 3.POST,json HttpSeverletRespons…...

crs 维护模式 exclusive mode
How To Validate ASM Instances And Diskgroups On A RAC Cluster (When CRS Does Not Start). (Doc ID 1609127.1)编辑To Bottom [rootrac1 ~]# ps -ef|grep grid root 2477 1 1 20:47 ? 00:00:51 /opt/oracle.ahf/jre/bin/java -server -Xms32m -Xmx64…...

【OpenCV实现平滑图像形态学变化】
文章目录 概要目标腐蚀膨胀开运算结构元素(内核)小结 概要 形态学变化是一组简单的图像操作,主要用于处理二值图像,即只包含黑和白两种颜色的图像。这些操作通常需要两个输入,原始图像和一个内核(kernel&a…...

Ubuntu服务器中java -jar 后台运行Spring Boot项目
问:我在我的服务器中java -jar 运行springboot项目,但是我操作不了命令了,必须要终止掉才能执行后面的操作,怎么样才能让他后台运行呢?比如我的jar包名是tools-boot-0.0.1-SNAPSHOT.jar 使用nohup命令: 在…...

微服务parent工程和子工程pom文件配置注意
parent工程 重要配置: <!-- 父工程 --><packaging>pom</packaging><!-- 聚合 --><modules><module>../base</module><module>../gateway</module><module>../user-service</module><mod…...

STM32G030F6P6点灯闪烁
前言 (1)如果有嵌入式企业需要招聘湖南区域日常实习生,任何区域的暑假Linux驱动实习岗位,可C站直接私聊,或者邮件:zhangyixu02gmail.com,此消息至2025年1月1日前均有效 (2࿰…...

K8s开发人员也需要了解的相关知识
工作变动总结一下之前的笔记,整理一个速查的东西,方便之后查阅 K8s开发相关 1、k8s yml apiverison: Kubernetes (k8s) 的 API 版本表示资源定义在 API 服务器中的稳定性和支持程度。API 版本由一个字符串表示,如 v1 或 apps/v1,…...

创建并启动华为HarmonyOS本地与远程模拟器及远程真机
1.打开设备管理器 2.选择要添加的手机设备,然后点击安装 3.正在下载华为手机模拟器 4.下载完成 5.创建新模拟器 下载系统镜像 点击下一步,创建模拟器 创建成功 启动模拟器 华为模拟器启动成功 6.登陆华为账号并使用远程模拟器 7.使用远程真机...

责任链模式应用案例
前几天系统商品折扣功能优化,同事采用了责任链模式重构了代码,现整理如下。 一、概念 责任链模式是为请求创建一个处理者对象的链条,所有处理者(除最末端)都含有下一个对象的引用从而形成一条处理链,该模…...

给你一个整数 num ,返回 num 中能整除 num 的数位的数目
给你一个整数 num ,返回 num 中能整除 num 的数位的数目。 如果满足 nums % val 0 ,则认为整数 val 可以整除 nums 。 示例 1: 输入:num 7 输出:1 解释:7 被自己整除,因此答案是 1 。 示例 2&…...

Java后端开发——房贷计算器(Ajax版、Json版、等额本息+等额本金)
MVC房贷计算器(Ajax版) 1.新建一个JavaWeb项目hslcalweb,设置tomcat10。 2.创建房贷计算器JavaBean:HslCalBean.java,增加以下的属性,并生成Getter/Setter方法。 private double total; //贷款额度pr…...

2023.10.28 关于 synchronized 原理
目录 synchronized 特性 synchronized 优化机制 锁升级(锁膨胀) 其他优化机制 锁消除 锁粗化 synchronized 特性 开始时是乐观锁,如果锁冲突频繁,就转为悲观锁开始是轻量级锁,如果锁被持有的时间较长,…...

力扣 27. 移除元素
目录 1.解题思路2.代码实现 1.解题思路 利用双指针思路,当让一个指针先走,指针指向的位置不等于val时,将此时该指针的值给另一个指针并且两个指针都加一,如果等于val,则让该指针加一继续走.最后另一个指针的下标就为排好的数组的…...

redis爆满导致数据丢失
记一则redis爆满导致数据丢失的一场事故 某功能上线后,发现出现问题,最后定位到了 redis. 由于存储的数据过多,导致阿里云4G大小的 redis 爆满,触发了回收策略。 于是临时扩容,运维同学当时未找到阿里云配置。 后面我用工具连接了…...

Android14 WMS启动流程
一 概述 本文Android14源代码可参考:Search 在 Android 系统中,从设计的角度来看,窗口管理系统是基于 C/S 模式的。整个窗口系统分为服务端和客户端两大部分,客户端负责请求创建窗口和使用窗口,服务端完成窗口的维护…...

磁盘管理(初始化,引导块,坏块管理,固态硬盘)
目录 1.磁盘初始化2.引导块3.坏块的管理1.坏块检查2.坏块链表3.扇区备用 4.固态硬盘(SSD)1.原理2.组成3.读写性能特性4.与机械硬盘相比5.磨损均衡技术 1.磁盘初始化 ①进行低级格式化(物理格式化),将磁盘的各个磁道划分…...

mysql冷拷贝大表
1、简述: mysql数据迁移有多种方式,最常见的就是先把数据库导出,然后导入新的数据库。拷贝数据目录data是另外一种方式。 尤其是当数据库启动不了,或者大型数据库迁移的时候,可以考虑这个方式。 2、场景:…...

苍穹外卖-01
苍穹外卖-01 课程内容 软件开发整体介绍苍穹外卖项目介绍开发环境搭建导入接口文档Swagger 项目整体效果展示: 管理端-外卖商家使用 用户端-点餐用户使用 当我们完成该项目的学习,可以培养以下能力: 1. 软件开发整体介绍 作为一名…...

GAMP源码阅读(中)伪距单点定位 SPP
原始 Markdown文档、Visio流程图、XMind思维导图见:https://github.com/LiZhengXiao99/Navigation-Learning 文章目录 一、SPP 解算1、spp():单点定位主入口函数2、estpos()3、estpose_()4、valsol():GDOP和卡方检验结果有效性 二、卫星位置钟…...

Epinoia-有状态网络的意图验证模块,略读
Epinoia relies on a unified model for NFs by leveraging the causal precedence relationshipsthat exist between NF packet I/Os and states. 这句话的意思是:“Epinoia依靠一种统一的网络功能(NF)模型,通过利用存在于 NF 包…...

14.力扣c++刷题-->有效括号
题目:给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合…...

scrapy-redis分布式爬虫(分布式爬虫简述+分布式爬虫实战)
一、分布式爬虫简述 (一)分布式爬虫优势 1.充分利用多台机器的带宽速度 2.充分利用多台机器的ip地址 (二)Redis数据库 1.Redis是一个高性能的nosql数据库 2.Redis的所有操作都是原子性的 3.Redis的数据类型都是基于基本数据…...

单目深度估计之图像重构原理解析
一、参考资料 浅析自监督深度估计中的光度损失(Photometric Loss) 二、图像重构原理 设输入位姿估计网络的3帧连续单目序列为 < I t − 1 , I t , I t 1 > <I_{t-1},I_{t},I_{t1}> <It−1,It,It1>,其中 t t t 为时间索引,…...

【爬虫】charles手机抓包环境设置(设置系统证书)
1.说明 想要对手机抓包,最关键的是需要设置好根证书,用户证书在安卓7.0之后就不受信任了,想要对手机app抓包,就需要把用户证书设置为系统证书(根证书) 注意,想要设置为根证书,你的…...

【flink sql table api】时间属性的指定与使用注意事项
文章目录 一. 时间属性介绍二. Table api指定时间属性三. 处理时间的指定1. 在创建表的 DDL 中定义2. 在 DataStream 到 Table 转换时定义3. 使用 TableSource 定义 四. 事件时间的指定1. 在 DDL 中定义2. 在 DataStream 到 Table 转换时定义3. 使用 TableSource 定义 五. 小结…...

评价模型:CRITIC客观赋权法
目录 1.算法原理介绍2.算法步骤2.1 数据标准化2.2 计算信息承载量2.3 计算权重和得分 3.案例分析 1.算法原理介绍 CRITIC方法是一种客观权重赋权法,其基本思路是确定指标的客观权数以两个基本概念为基础。一是对比强度,它表示同一指标各个评价方案取值差…...

两个Tomcat插件配置不同端口,session冲突,同时登录被挤下线问题的解决
如果是配置了两个Tomcat的插件,在同一ip有两个需要同时登录的项目,可以在其中一个web项目的web.xml文件里添加session命名的配置,如下: <!--配置不同的session,避免管理端和手机端两个同时登录被挤下线--><se…...

Mybatis中执行Sql的执行过程
MyBatis中执行SQL的过程可以分为以下几个步骤: 解析配置文件:在运行时,MyBatis会加载并解析配置文件(通常为mybatis-config.xml),获取数据库连接信息、映射文件等。 创建SqlSessionFactory:MyB…...

IEEE Standard for SystemVerilog—Chapter 25.7 Tasks and functions in interfaces
子例程(任务和函数)可以在接口中定义,也可以在连接的一个或多个模块中定义。这允许更抽象的建模级别。例如,“读”和“写”可以定义为任务,而不需要引用任何连线,主模块只能调用这些任务。在modport中&…...

一台服务器最大能支持多少条 TCP 连接
文章目录 1. 一台服务器最大能打开的文件数1.1 限制参数1.2 调整服务器能打开的最大文件数示例 2. 一台服务器最大能支持多少连接3. 一台客户端机器最多能发起多少条连接4. 其他5. 相关实际问题5.1 "too many open files" 报错是怎么回事,该如何解决5.2 一…...