servlet(1)—javaEE

news2024/11/14 14:44:25

文章目录

  • 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 {
    @Override
    protected 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 {
    @Override
    protected 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中写入二进制格式的数据,通常是写文件

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

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

相关文章

想攀登金融领域高峰,中国人民大学与加拿大女王大学金融硕士是重要途径

每个人都希望自己的职场攀登是优质路线&#xff0c;最短路线。金融业招聘注重学历&#xff0c;最早外资投资银行招聘只要清北复交&#xff0c;现在知名金融机构工作也只招985。还有一个特点是&#xff0c;宁要国内清北复交&#xff0c;也不要海归留学。学历到底重不重要&#x…

响应式布局

文章目录 响应式布局概述viewport 视口CSS 常用单位CSS 媒体查询语法直接使用使用style标签使用link引入 自适应布局栅格系统响应式布局案例rem媒体查询 响应式布局 概述 响应式布局是指网站或应用程序可以自适应不同的屏幕尺寸和设备类型&#xff0c;简而言之就是一个网站兼…

ERTEC200P-2 PROFINET设备完全开发手册(8-2)

8.2 IRT通讯原理及API PROFINET RT通讯的特点&#xff1a; 典型的PROFINET网络如下图所示。 其中&#xff1a; T1: 采样输入 T2: IO背板周期 T3: Profinet I/O 通讯周期 T4: CPU组织块OB1执行周期 T5: Profinet I/O 通讯周期 T6: IO背板周期 T7: 建立输出 在PRO…

Java35-85

这里写目录标题 steam流collect超详解 方法引用静态方法中没有this&#xff01;&#xff01;&#xff01;引用本类或者父类的成员方法 引用构造方法引用方法成员引用数组的构造方法转成自定义对象获取部分属性并收集到数组 异常异常中的常见方法抛出 处理自定义异常File的概述和…

实验8 梯度下降法

1. 实验目的 ① 掌握深度学习框架中的自动求导机制&#xff1b; ② 掌握梯度下降法的基本原理&#xff0c;能够使用梯度下降法求解一元和多元线性回归问题。 2. 实验内容 ① 使用TensorFlow的可训练变量和自动求导机制实现梯度下降法&#xff1b; ② 使用梯度下降法训练线性…

2023-04-23 算法面试中常见的动态规划问题

动态规划 1 什么是动态规划 以菲波那切数列求和为例&#xff0c;通过 1.普通的递归2.引入记忆数组memo3.自下而上地解决问题&#xff0c;即动态规划 动态规划的定义 dynamic programming (also known as dynamic optimization) is a method for solving a complex problem by…

Redis-cli Go代码

Redis-cli Go代码 安装 go get github.com/redis/go-redis/v9 建立连接 import ("context""fmt""github.com/redis/go-redis/v9" )client : redis.NewClient(&redis.Options{Addr: "localhost:6379",Password: "", …

支付宝 网站支付Demo 案例【沙箱环境】IDEA如何配置启动Eclipse项目

前言 在跑支付宝提供的支付案例Demo的时候&#xff0c;遇到了一些问题。支付宝提供的Demo是用Eclipse跑的JAVAEE项目。我想用IDEA来跑一下看看、结果使用习惯了Mavne管理jar包和SpringBoot项目。启动web项目的时候&#xff0c;还遇到一些问题。特此记录遇到的一些小问题。顺便回…

c++之常见函数

文章目录 一、inline函数二、函数重载三、函数模板 一、inline函数 1.当进行函数的调用时&#xff0c;系统要建立栈空间&#xff0c;保护现场&#xff0c;传递参数等等&#xff0c;这些工作都需要系统时间和空间得开销然而inline 函数是以空间换时间的做法&#xff0c;省去调用…

FL Studio 21最新发布的版本主要的新功能

FL Studio 21是最新发布的版本,其主要的新功能有: 1. 全新的UI设计:FL 21采用全新的 FLAT UI 设计风格,简洁而不简单,颜值大大提高。 2. 多窗口支持:可以将FL Studio窗口分别显示在不同的显示器上,实现屏幕间切换和多视图编辑。 3. 混音台增强:新增后置通道、多输入输入和多…

反垃圾邮件产品技术要求和测试评价方法

声明 本文是学习信息安全技术 反垃圾邮件产品技术要求和测试评价方法. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 反垃圾邮件产品等级划分 根据产品功能要求和安全保证要求的不同&#xff0c;以及反垃圾邮件产品适用应用环境的不同&#xff0c;将…

ROS1学习笔记:常用可视化工具的使用(ubuntu20.04)

参考B站古月居ROS入门21讲&#xff1a;常用可视化工具的实现 基于VMware Ubuntu 20.04 Noetic版本的环境 文章目录 一、日志输出工具&#xff1a;rqt_console二、绘制数据曲线&#xff1a;rqt_plot三、 图像渲染工具&#xff1a;rqt_image_view四、图形界面总接口&#xff1a;r…

FE之TSNE:基于MNIST手写数字数据集利用T-SNE/TSNE方法实现高维数据集可视化应(二维可视化和三维可视化)应用案例之详细攻略

FE之TSNE&#xff1a;基于MNIST手写数字数据集利用T-SNE/TSNE方法实现高维数据集可视化应(二维可视化和三维可视化)应用案例之详细攻略 目录 基于MNIST手写数字数据集利用T-SNE/TSNE方法实现高维数据集可视化应(二维可视化和三维可视化)应用案例 # 1、定义数据集 # 2、数据预…

docker部署springboot(jar)项目的方式概括

1、docker挂载目录 实现原理&#xff1a;docker中只需要安装一个JDK镜像&#xff0c;把该镜像的目录挂载到外部的Linux中&#xff0c;如挂载到/usr/data/jar&#xff0c;我们只需要把Jenkins构建的jar文件传输到该目录中&#xff0c;在通过docker命令启动jar即可&#xff1a; …

【代码随想录】刷题Day5

1.链表重复节点删除 82. 删除排序链表中的重复元素 II 前后指针实现 1.做这道题最大的感受就是&#xff1a;不要觉得开辟空间浪费&#xff0c;多用临时变量去记录。越精确越容易成功 2.首先没有节点或者一个节点直接返回 3.因为头部会出现一样元素的情况&#xff0c;以至于我不…

C语言之详解静态变量static

在C语言中static是用来修饰变量和函数的&#xff0c;这篇文章详细介绍了static主要作用&#xff0c;文章中有详细的代码实例&#xff0c;需要的朋友可以参考阅读 在C语言中&#xff1a; static是用来修饰变量和函数的 static主要作用为: 1. 修饰局部变量 - 静态局部变量 2. …

linux软件安装指令---yum和rpm

这里写目录标题 一 yum指令1. yum install 软件名2. yum remove 软件名3 检查已经安装成功的软件 二 rpm指令1 rpm -q2 rpm -qa|less3 rpm -qa| grep python4 搜索文件的详细信息5 查询一个rpm中的包安装到哪里去了6 查询一个文件属于那个包7 软件包的卸载 三 总结四 示范安装 …

【面试系列】四种经典限流算法讲解

固定窗口限流算法 介绍 固定窗口限流算法&#xff08;Fixed Window Rate Limiting Algorithm&#xff09;是一种最简单的限流算法&#xff0c;其原理是在固定时间窗口(单位时间)内限制请求的数量。该算法将时间分成固定的窗口&#xff0c;并在每个窗口内限制请求的数量。具体来…

锦江展焕新演绎,憬黎公寓住造理想

2023年4月19-21日&#xff0c;“万物春生&#xff0c;赴锦程”锦江酒店&#xff08;中国区&#xff09;投资加盟品鉴会&#xff0c;在上海世博展览馆完美收官。这是一场迎着酒店行业复苏浪潮的年度盛会。 插图丨锦江酒店&#xff08;中国区&#xff09; 作为锦江酒店&#xff…

60 openEuler 22.03-LTS 搭建MySQL数据库服务器-安装、运行和卸载

文章目录 60 openEuler 22.03-LTS 搭建MySQL数据库服务器-安装、运行和卸载60.1 安装60.2 运行60.3 卸载 60 openEuler 22.03-LTS 搭建MySQL数据库服务器-安装、运行和卸载 60.1 安装 配置本地yum源&#xff0c;详细信息请参考《openEuler 22.03-LTS 搭建repo服务器》。 清除…