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大类࿱…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
数据库——redis
一、Redis 介绍 1. 概述 Redis(Remote Dictionary Server)是一个开源的、高性能的内存键值数据库系统,具有以下核心特点: 内存存储架构:数据主要存储在内存中,提供微秒级的读写响应 多数据结构支持&…...

Tauri2学习笔记
教程地址:https://www.bilibili.com/video/BV1Ca411N7mF?spm_id_from333.788.player.switch&vd_source707ec8983cc32e6e065d5496a7f79ee6 官方指引:https://tauri.app/zh-cn/start/ 目前Tauri2的教程视频不多,我按照Tauri1的教程来学习&…...

【Linux】使用1Panel 面板让服务器定时自动执行任务
服务器就是一台24小时开机的主机,相比自己家中不定时开关机的主机更适合完成定时任务,例如下载资源、备份上传,或者登录某个网站执行一些操作,只需要编写 脚本,然后让服务器定时来执行这个脚本就可以。 有很多方法实现…...