当前位置: 首页 > news >正文

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 芯片&#xff08;动态随机存取存储器&#xff09;的技术指标 1.1 16n Prefetch (预加载) (n --芯片位宽) DDR 体系 链接&#xff1a;DDR扫盲—-关于Prefetch(预取)与Burst(突发)的深入讨论_ddr prefetch_qq_25814297-npl的博客-CSDN博客 1.2 每个通…...

计算机组成原理——第五章中央处理器(中)

辞别再无相见月&#xff0c;终是一人度春秋 文章目录 前言5.4.1 硬布线控制器的设计5.4.2 微程序控制器的基本原理5.4.3 微指令的设计5.4.4 微程序控制单元的设计 前言 本文主要写的是控制器的设计&#xff0c;控制器的设计分为硬部件控制器(就是用纯硬件的方式来实现的一种控…...

ImageJ 用户手册——第三部分(ImageJ扩展)

ImageJ 用户手册-第三部分 ImageJ扩展14. 宏指令&#xff08;Macros&#xff09;宏程序设计 15. 脚本&#xff08; Scripts&#xff09;JavaScript编程 16. 插件&#xff08; Plugins&#xff09;开发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 测试访问公网固定二级子域名 转载自内网穿透工具的文章&#xff1a;使用Nextcl…...

Revit问题:墙体被楼板剪切及材质库被锁定问题

一、Revit 墙体被楼板剪切怎么办? 建模的时候画的墙总是到楼板就停了&#xff0c;这是为什么&#xff1f;明明顶部约束到标高2了&#xff0c;这种情况如何解决&#xff1f; 首先来分析问题产生的原因是&#xff0c;我们在绘制楼板的时候选择了用楼板剪切重复部分的墙体。 解决…...

CPU信息查询与CPU测试方法总结

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请征得博主同意并附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/mainmaster/article/details/130267689 未经允许不能拷贝本文章内容发布到其他相关载体上。 CPU信息查询 我们知道在嵌入式系统…...

ChatGPT时代,我们可能站到了自然语言编程的大门口

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

深入理解AMQP协议

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

大型体检管理系统源码:适用于大中型医院或独立体检中心

一套专业的体检管理系统源码&#xff0c;是医院、体检中心等单位开展体检业务的得力助手。它将以往人工操作的健康体检过程所得到信息转换成全信息化的电脑管理&#xff0c;使体检过程更为流畅、更有条理&#xff0c;更加便于管理&#xff0c;从而实现体检业务管理的自动化、信…...

ACM 1000 | 简单的a+b

文章目录 0x00 前言 0x01 题目描述 0x02 问题分析 0x03 代码设计 0x04 完整代码 0x05 运行效果 0x06 参考文献 0x07 总结 0x00 前言 C 语言网不仅提供 C 语言&#xff0c;还包括 C 、 java 、算法与数据结构等课程在内的各种入门教程、视频录像、编程经验、编译器教程及…...

系统分析师选择题笔记

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

MySQL隐式类型转换

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

IT知识百科:什么是SSID?

一、什么是SSID SSID&#xff08;Service Set Identifier&#xff09;是无线网络中的一个重要概念&#xff0c;它是一个用于标识无线局域网&#xff08;WLAN&#xff09;的名称。SSID可以看作是无线网络的名称&#xff0c;类似于有线网络中的网络名称或者路由器的名称。在无线…...

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日&#xff0c;由赛迪顾问主办的“2023 IT市场权威榜单”评选结果正式发布&#xff0c;美创数据库防火墙斩获新一代信息技术创新产品&#xff01; 美创数据库防火墙是一款抵御并消除由于应用程序业务逻辑漏洞或者缺陷所导致的数据库安全问题的专业级数据库安全产品&#x…...

30个超级有用的JavaScript单行代码

在这篇文章中&#xff0c;我列出了一个系列的 30 个 JavaScript 单行代码&#xff0c;它们在使用 vanilla js&#xff08;≥ ES6&#xff09;进行开发时非常有用。它们也是使用该语言在最新版本中为我们提供的所有功能来解决问题的优雅方式。 我将它们分为以下5大类&#xff1…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...