servlet(1)—javaEE
文章目录
- 1.认识servlet
- 2.使用servlet
- 2.1创建项目
- 2.2引入依赖
- 2.3创建目录
- 2.4编写代码
- 2.5打包
- 2.6部署
- 2.7运行
- 2.8验证
- 3.开发步骤
- 4.部署方式
- 4.1打包
- 4.2安装插件
- 5.访问出错的情况
- 5.1 404
- 5.2 405
- 5.3其他
- 6.servlet的三大生命周期方法
- 7.servlet api
- 7.1HttpServlet
- 7.2HttpServletRequest(请求)
- 7.3HttpServletResponse(响应)
1.认识servlet
(1)客户端和服务端使用支持网络编程的语言就可以实现网络编程,即网络通信,但是对于应用层协议,还是需要由应用程序自己来封装/分用
(2)对于http协议,客户端基于浏览器就可以自己省略自己程序封装/分用http协议格式的数据,这个步骤浏览器会自己完成;服务端基于web服务器也可以类似的省略服务端自己写程序封装/分用http协议这个步骤,web服务器的作用是部署网站,也对应的省略http协议处理的逻辑
(3)web服务器中支持java的产品很多,其中之一是Tomcat,而一个java开发的网站可以运行在这些支持java的不同的服务器上就必须满足一定的规范,这个规范就是servlet,servlet就是java官方规定的web开发的api,api就是规范,不同的支持java的web服务器必须符合这些规范,目的是让其有可移植性
(4)总结:
web服务器:针对所有的编程语言能运行网站系统的服务器程序
servlet容器:运行java开发的网站的服务器程序,java开发的网站一定是用了servlet技术
servlet:java官方规定web开发的api规范,基于java的web服务器就必须遵守这个规范(servlet容器)
ajax:设置发送http请求的内容(请求方法、URL、请求头、body)处理响应
servlet:处理http响应,返回响应
2.使用servlet
2.1创建项目
创建一个Maven项目
2.2引入依赖
配置pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>mavenText</artifactId><version>1.0-SNAPSHOT</version><!-- 配置打包的格式 --><packaging>war</packaging><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><!-- 引入依赖 --><dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency></dependencies><!-- 默认打包的文件夹名太长,进行配置 --><build><!-- 最终打包的文件名 --><finalName>servlet-demo</finalName></build>
</project>
2.3创建目录
准备web项目需要的结构
<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name>
</web-app>
2.4编写代码
编写servlet代码
开发servlet的步骤:
(1)类注解@webServlet:传入的字符串必须是/开头,并且一个项目可以开发多个servlet,但是路径必须唯一
(2)继承HttpServlet
(3)重写doxxx方法,xxx是提供的服务方法,例如:重写doGet方法就提供了doGet服务方法
方法的作用:
(1)获取请求信息:通过servlet规定的api,HttpServletRequest方法参数对象
(2)自己的逻辑:如数据库的操作
(3)返回响应信息:通过servlet规定的api,HttpServletResponse方法参数对象
package org.example.servlet;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;// /hello是资源路径,必须以/开头且唯一
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//返回一个字符串resp.getWriter().write("hello servlet");}
}
2.5打包
执行Maven package命令,在target目录下生成一个war格式的压缩文件
有这个说明打包成功
2.6部署
把war文件复制到Tomcat/webapps目录下
2.7运行
运行网站是运行Tomcat,Tomcat来运行网站
2.8验证
访问网站资源
3.开发步骤
(1)pom.xml配置
(2)准备src/main/webapp/WEB-INF/web.xml
(3)开发servlet
4.部署方式
4.1打包
将打包的war文件复制到tomcat/webapps目录下
4.2安装插件
安装smart tomcat插件,安装后IDEA就可以通过插件操作本地的Tomcat软件
(1)下载插件,完成后重启IDEA
(2)配置
5.访问出错的情况
5.1 404
检查应用上下文路径和资源路径,服务端和客户端是否一致
5.2 405
方法不支持,提供的服务方法列表不包含请求方法,检查方法
5.3其他
出现500报错,或者200正常但是结果不符合预期,抓包查看请求和响应
6.servlet的三大生命周期方法
servlet容器与servlet:容器管理整个servlet对象的生命周期,容器是Tomcat等java网站的web服务器
扫描@WebServlet注解的类,在某个时机创建实例对象,处理请求,根据请求路径找到对应的servlet对象
(1)init():初始化方法,实例化对象的时候执行一次
(2)service():每次请求执行一次
(3)destory():销毁方法只执行一次
7.servlet api
7.1HttpServlet
init()、service()、destory()、doxxx()
7.2HttpServletRequest(请求)
(1)getParameter
String getParameter(String name) 返回请求数据的值,传入请求数据的键
(1)请求的数据可以是:queryString、body表单格式、body中form-data格式的简单类型
(2)请求的格式不可以是:body的json格式、body中form-data格式的复杂类型(文件)
(2)getHeader
String getHeader(String name) 返回指定请求头的值;
请求头也是键值对的数据,格式是键:值
(3)getInputStream
InputStream getInputStream() 读取请求的body内容,返回下一个InputStream对象;
一般用于body的json格式
(4)setCharacterEncoding
void setCharacterEncoding(String env) 设置请求正文的编码格式;
body包含数据的时候使用
7.3HttpServletResponse(响应)
作用:设置http响应的信息,如状态码、响应头、响应正文,doxxx返回Tomcat会帮助我们封装为http响应格式的报文
(1)setStatus
void setStatus(int sc) 设置响应状态码
注意:
(1)没有调用这个方法,程序会执行doxxx方法正常返回,状态码=200
(2)代码格式:
public void doxxx(){
try{
…
respone.setStatus(200);//不设置默认也是200
}catch(Exception e){
respone.setStatus(500);//不设置默认也是500,但是Tomact返回500会返回一个错误的网页
}
}
package org.example.servlet;import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@WebServlet("/error")
public class errorServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) {try {String s = null;s.length();} catch (Exception e){//这种写法叫吃异常,Tomcat代码调用doGet就是正常执行完成e.printStackTrace();//不打印就会以为后端正常,说明即使状态码是200,也不意为着正常}}
}
(2)setContentType
void setContentType(String Type) 设置响应内容格式类型,设置响应头content-Type:值
(1)返回网页:text/html
(2)返回JSON:application/json;charset=UTF-8(同时设置编码格式)
(3)返回文件:可以设置为二进制流,也可以设置为文件具体的类型,也可以不设置
(3)getWriter
PrintWriter getWriter() 往body中写入文件格式数据,通常是写网页、JSON
(4)getOutputStream
OutputStream getOutputStream() 往body中写入二进制格式的数据,通常是写文件
相关文章:

servlet(1)—javaEE
文章目录 1.认识servlet2.使用servlet2.1创建项目2.2引入依赖2.3创建目录2.4编写代码2.5打包2.6部署2.7运行2.8验证 3.开发步骤4.部署方式4.1打包4.2安装插件 5.访问出错的情况5.1 4045.2 4055.3其他 6.servlet的三大生命周期方法7.servlet api7.1HttpServlet7.2HttpServletReq…...
定制 Jenkins 镜像说明
Dockerfile模板示例 FROM jenkins/jenkins:2.332.4-jdk8 MAINTAINER jason USER root RUN sed -i ‘s/deb.debian.org/mirrors.aliyun.com/g’ /etc/apt/sources.list && apt update && apt install ca-certificates tzdata -y && rm -rf /var/cach…...

【离散数学】测试五 图论
1. n层正则m叉树一共有()片树叶。 A. nm B. mn C. mn 正确答案: B 2. 下图是一棵最优二叉树 A. 对 B. 错 正确答案: B 3. 要构造权为1,4,9,16,25,36,49,64,81,100一棵最优二叉树,则必须先构造权为5,9,16,25,36,49,64,81,100一棵最优二叉树. A. 对 B. 错 …...

根据cadence设计图学习硬件知识 day03 了解 一些芯片 和 数据手册下载的地方
1. MT53D512M32D2DS 芯片(动态随机存取存储器)的技术指标 1.1 16n Prefetch (预加载) (n --芯片位宽) DDR 体系 链接:DDR扫盲—-关于Prefetch(预取)与Burst(突发)的深入讨论_ddr prefetch_qq_25814297-npl的博客-CSDN博客 1.2 每个通…...

计算机组成原理——第五章中央处理器(中)
辞别再无相见月,终是一人度春秋 文章目录 前言5.4.1 硬布线控制器的设计5.4.2 微程序控制器的基本原理5.4.3 微指令的设计5.4.4 微程序控制单元的设计 前言 本文主要写的是控制器的设计,控制器的设计分为硬部件控制器(就是用纯硬件的方式来实现的一种控…...
ImageJ 用户手册——第三部分(ImageJ扩展)
ImageJ 用户手册-第三部分 ImageJ扩展14. 宏指令(Macros)宏程序设计 15. 脚本( Scripts)JavaScript编程 16. 插件( Plugins)开发ImageJ插件 17. 用其他语言编写脚本Fiji脚本编辑器 18. 从命令行运行ImageJ …...

RK3399平台开发系列讲解(PCI/PCI-E)PCIE相关配置说明
🚀返回专栏总目录 文章目录 一、DTS 配置二、menuconfig 配置三、cmdline 配置沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将介绍在使用 RK3399 平台 PCIE 时候的配置。 一、DTS 配置 ep-gpios = <&gpio3 13 GPIO_ACTIVE_HIGH>; 此项是设置 PCIe…...

NAS私有云存储 - 搭建Nextcloud私有云盘并公网远程访问
文章目录 摘要视频教程1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问 4 配置固定http公网地址4.1 保留一个二级子域名4.1 配置固定二级子域名4.3 测试访问公网固定二级子域名 转载自内网穿透工具的文章:使用Nextcl…...

Revit问题:墙体被楼板剪切及材质库被锁定问题
一、Revit 墙体被楼板剪切怎么办? 建模的时候画的墙总是到楼板就停了,这是为什么?明明顶部约束到标高2了,这种情况如何解决? 首先来分析问题产生的原因是,我们在绘制楼板的时候选择了用楼板剪切重复部分的墙体。 解决…...
CPU信息查询与CPU测试方法总结
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请征得博主同意并附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/mainmaster/article/details/130267689 未经允许不能拷贝本文章内容发布到其他相关载体上。 CPU信息查询 我们知道在嵌入式系统…...

ChatGPT时代,我们可能站到了自然语言编程的大门口
ChatGPT大火,我现在有种感觉:我们可能站到了自然语言编程的门口,一脚下去,也许能把门踹开。 当然,也可能会踢到一块铁板。 回顾我们的编程之路,基本上就是一个编程门槛不断降低的历史。 最早的一批前辈们…...

深入理解AMQP协议
一.AMQP 是什么 AMQP(Advanced Message Queuing Protocol, 高级消息队列协议)是一个提供统一消息服务的 应用层标准高级 消息队列协议,是 应用层协议的一个 开放标准,为面向消息的中间件设计,是一个进程间传递 异步消息…...

大型体检管理系统源码:适用于大中型医院或独立体检中心
一套专业的体检管理系统源码,是医院、体检中心等单位开展体检业务的得力助手。它将以往人工操作的健康体检过程所得到信息转换成全信息化的电脑管理,使体检过程更为流畅、更有条理,更加便于管理,从而实现体检业务管理的自动化、信…...
ACM 1000 | 简单的a+b
文章目录 0x00 前言 0x01 题目描述 0x02 问题分析 0x03 代码设计 0x04 完整代码 0x05 运行效果 0x06 参考文献 0x07 总结 0x00 前言 C 语言网不仅提供 C 语言,还包括 C 、 java 、算法与数据结构等课程在内的各种入门教程、视频录像、编程经验、编译器教程及…...

系统分析师选择题笔记
目录 1、知识产权与标准化 1.1 保护范围与对象(★★★★) 1.2 保护期限(★) 1.3 知识产权人确定(★★★) 1.4 侵权判断(★★★) 1.5 标准的分类(★) 1.6 标准代号的识别(★) 2、系统配置与性能评价 2.1 系统性能概述 2.2 系统性能(性能指标)(★…...

MySQL隐式类型转换
当运算符与不同类型的操作数一起使用时,会发生类型转换以使操作数兼容。有些转换是隐式发生的。例如,MySQL会根据需要自动将字符串转换为数字,反之亦然。 转换规则 如果一个或两个参数都为NULL,则比较结果为NULL 。但是相等比较…...

IT知识百科:什么是SSID?
一、什么是SSID SSID(Service Set Identifier)是无线网络中的一个重要概念,它是一个用于标识无线局域网(WLAN)的名称。SSID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称。在无线…...

OpenAI-ChatGPT最新官方接口《从0到1生产最佳实例》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(十一)(附源码)
Production Best Practices 生产最佳实例 前言Introduction 导言Setting up your organization 设置您的组织Managing billing limits 管理计费限额API keys API密钥Staging accounts 演示账户 Building your prototype 构建您的原型Additional tips 其它技巧 Techniques for i…...

2023 IT市场权威榜单|美创数据库防火墙斩获“新一代信息技术创新产品”
4月20日,由赛迪顾问主办的“2023 IT市场权威榜单”评选结果正式发布,美创数据库防火墙斩获新一代信息技术创新产品! 美创数据库防火墙是一款抵御并消除由于应用程序业务逻辑漏洞或者缺陷所导致的数据库安全问题的专业级数据库安全产品&#x…...
30个超级有用的JavaScript单行代码
在这篇文章中,我列出了一个系列的 30 个 JavaScript 单行代码,它们在使用 vanilla js(≥ ES6)进行开发时非常有用。它们也是使用该语言在最新版本中为我们提供的所有功能来解决问题的优雅方式。 我将它们分为以下5大类࿱…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...

手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...

android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

实战设计模式之模板方法模式
概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...
TJCTF 2025
还以为是天津的。这个比较容易,虽然绕了点弯,可还是把CP AK了,不过我会的别人也会,还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...
结合PDE反应扩散方程与物理信息神经网络(PINN)进行稀疏数据预测的技术方案
以下是一个结合PDE反应扩散方程与物理信息神经网络(PINN)进行稀疏数据预测的技术方案,包含完整数学推导、PyTorch/TensorFlow双框架实现代码及对比实验分析。 基于PINN的反应扩散方程稀疏数据预测与大规模数据泛化能力研究 1. 问题定义与数学模型 1.1 反应扩散方程 考虑标…...