HttpServlet学习中的常见问题(个人珍藏笔记)

news2024/11/26 16:45:43

目录

一、HttpServlet

1.1核心方法

1.2、面试:谈谈Servlet的生命周期

二、HttpServletRequest

2.1、核心方法

2.2、如何获取请求头

三、HttpServletResponse

3.1核心方法

四、setCharacterEncoding和setContentType区别?

五、Json格式的转换问题

5.1 ObjectMapper类的readValue方法

5.2 ObjectMapper类的writeValueAsString方法

六、对页面进行刷新

七、重定向网页的两种实现

八、对jquery方法中的success: function的理解

九、对JOSN.stringify()和JOSN.parse()的认识

十、jquery的自动转换类型机制


一、HttpServlet

1.1核心方法

方法名称调用时机作用及扩展解释
init在HttpServlet实例化之后调用一次

作用:用来初始化;

扩展解释:首次访问的到时会实例化,创建出HttpServlet实力会调用一次;

destroy在HttpServlet实例不再使用时调用一次

作用:关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动;

扩展解释:他是通过8005端口控制Tomcat,来告诉Tomcat执行destroy;但是,不一定真的可以调用到,Tomcat关闭(杀进程:比如点击x,来关闭idea,或者拔电源...),则不调用HttpServlet;

service收到HTTP请求时调用

作用:通过Tomcat收到的请求来调用service,service根据请求中不同的方法,调用不同的doXXX;

扩展解释:实际开发中,很少重写service,一般重写doXXX就可以了;

doGet收到GET请求时调用作用:根据请求计算响应
doPost收到POST请求时调用作用:根据请求计算响应
doPut/doDelete/doOptions/...收到对应的请求时调用作用:根据请求计算响应

1.2、面试:谈谈Servlet的生命周期

什么是声明周期?

        声明周期实际上就是,正确的时间干正确的事情;

回答:(根据以下,可以简略回答)

        初始阶段,实例化的时候,会调用一次init;

        每次收到请求,就会调用service,service根据请求中不同的方法,调用不同的doXXX;

        结束销毁之前,调用destroy,用来关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动;


二、HttpServletRequest

2.1、核心方法

方法描述
String getProtocol()返回请求协议的名称和版本。
String getMethod()返回请求的 HTTP 方法的名称,例如,GET、POST 或 PUT。
String getRequestURI()从协议名称直到 HTTP 请求的第一行的查询字符串中,返回该请求的 URL 的一部分。
String getContextPath()返回指示请求URL的一级路径
String getQueryString()返回包含在路径后的请求 URL 中的查询字符串。

Enumeration

getHeaderNames()

返回一个枚举,包含在该请求中包含的所有的头名。
String getHeader(Stringname)以字符串形式返回指定的请求头的值。

2.2、如何获取请求头

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.util.Enumeration;

@WebServlet("/showRequest")
public class showRequest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求头
        Enumeration<String> headerName = req.getHeaderNames();
        while(headerName.hasMoreElements()) {
            String name = headerName.nextElement();
            String value = req.getHeader(name);
            stringBuilder.append(name + ":" + value);
            stringBuilder.append("<br>");
        }
        resp.setContentType("text/html");
        resp.getWriter().write(stringBuilder.toString());
    }
}

三、HttpServletResponse

3.1核心方法

        HttpServletRequest的方法都是get系列,HttpServletResponse的方法都是set系列,doGet/doPost 这样的方法里的HttpServletResponse对象都是一个空对象;

方法描述
void setStatus(int sc)为该响应设置状态码。
void setHeader(String name,String value)

设置一个带有给定的名称和值的 header. 如果 name 已经存在,

则覆盖旧的值.

void addHeader(Stringname, String value)

添加一个带有给定的名称和值的 header. 如果 name 已经存在,

不覆盖旧的值, 并列添加新的键值对

void setContentType(Stringtype)设置被发送到客户端的响应的内容类型。

void

setCharacterEncoding(Stringcharset)

设置被发送到客户端的响应的字符编码(MIME 字符集)例如,UTF-8。
void sendRedirect(Stringlocation)使用指定的重定向位置 URL 发送临时重定向响应到客户端。
PrintWriter getWriter()用于往 body 中写入文本格式数据.

OutputStream

getOutputStream()

用于往 body 中写入二进制格式数据.


四、setCharacterEncoding和setContentType区别?

setCharacterEncoding只能设置字符编码;

setContentType不仅可以设置字符编码,还可以设置文档内容类型;


五、Json格式的转换问题

5.1 ObjectMapper类的readValue方法

        可以把json格式的数据转换成java的对象,第一个参数是可以是字符串也可以是输入流,第二个参数是类对象,是要解析出的结果的对象的类;

例如:(json格式的数据转换成java的对象)

import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

class Student {
    //1.所有属性必须要是公开的
    //2.必须要有无参的构造方法
    public int studentId;
    public int studentName;
}
public class Post extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        Student s = objectMapper.readValue(req.getInputStream(), Student.class);
        //在服务器打印日志
        System.out.println(s.studentId);
        System.out.println(s.studentName);
        resp.setContentType("application/json; charset=utf8");
        //写入浏览器
        objectMapper.writeValue(resp.getWriter(), s);
    }
}

5.2 ObjectMapper类的writeValueAsString方法

例如:可以把java的对象转换成json格式的数据;

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 {
    //1.所有属性必须要是公开的
    //2.必须要有无参的构造方法
    public int studentId;
    public String studentName;
}
@WebServlet("/json")
public class Post extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        Student s = objectMapper.readValue(req.getInputStream(), Student.class);
        //在服务器打印日志
        System.out.println(s.studentId);
        System.out.println(s.studentName);
        resp.setContentType("application/json; charset=utf8");
        //写入浏览器
        resp.getWriter().write(objectMapper.writeValueAsString(s));
    }
}

六、对页面进行刷新

例如:(每隔一秒对页面进行刷新)

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("/autoRefresh")
public class AutoRefresh extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setHeader("refresh", "1");
        resp.getWriter().write(System.currentTimeMillis() + " ");
    }
}

解释:

        header中的refresh属性,值是一个“秒数”,浏览器会在时间到了之后自动刷新;

        虽然当前设置的时间是 1s 刷新一次,但是并不是精确的1000ms,会比1000ms略多一点,为什么呢?原因:调度要消耗时间、网络传输消耗时间、服务器响应、本身对ms级别的计时存在误差;


七、重定向网页的两种实现

如下代码:(方法一:设置状态,再跳转;方法二:一步到位)

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("/redirect")
public class RedirectServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //方法一:设置状态,进行跳转
        resp.setStatus(302);
        resp.setHeader("Location", "https://www.baidu.com");
        //方法二:一步到位
        resp.sendRedirect("https://www.baidu.com");
    }
}

八、对jquery方法中的success: function的理解

代码如下:

            $.ajax({
                type: 'post',
                url: 'message',//这里是相对路径
                data: JSON.stringify(data),//这里放的是body的内容
                contentType: "application/json; charset=utf8",
                success: function(body) {
                    console.log("数据提交成功!");
                }
            });

解释和理解:

        上述代码浏览器给服务器发送了一个带有数据data的post请求,随后服务器接收到了请求,如果服务器能正确的处理请求,则会调用浏览器的success方法,而body就是服务器请求后返回的信息,但如果没有正确处理请求,发生错误,就会不会调用success方法,而是会调用jquery的error方法;

        以上,success就是一个回调函数,而浏览器用ajax请求服务器就是注册回调函数;


九、对JOSN.stringify()和JOSN.parse()的认识

JOSN.stringify(参数):

        JOSN.stringify()方法将一个 JavaScript 对象或值转换为 JSON 字符串,这就和 jackson 的writeValueAsString是一样的;

JOSN.parse(参数):

        JOSN.parse()方法是将 JSON 字符串成转换成 JavaScript的对象或值,这就和 jackson 的readValue是一样的;


十、jquery的自动转换类型机制

如下代码

        function getMessages() {
            $.ajax({
                type: 'get',
                url: 'message',
                success: function(body) {//这里body由于jquery的特殊机制,已经转换成了数组
                    //业务逻辑
                    let container = document.querySelector('.container');
                    for(let i = 0; i < body.length; i++) {
                        let message = body[i];
                        let div = document.createElement('div');
                        div.className = 'row';
                        div.innerHTML = message.from + ' 对 ' + message.to + ' 说: ' + message.message;
                        container.appendChild(div);
                    }
                }
            });
        }

解释:

        以上代码,body是响应正文,本来是String类型,但是由于jquery的特殊机制,将body自动转换成了js的对象数组了,如果没有jquery做这件事情,就需要使用JSON.parse来完成;


 

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

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

相关文章

串行通讯协议,只需要一文就可以给你讲懂

前言 最近在做一个通过ESP8266和STM32通讯从而实现远程控制&#xff0c;中间需要用到串口来发送报文&#xff0c;通过报文来实现两者之间的通讯。 今天刚好趁着这个机会来给大家讲解一下串行通讯&#xff0c;希望能给大家以后的学习提供一些思路。 串行通讯介绍 串口通信线…

磨金石教育摄影干货分享|怎样拍出唯美有内涵的“中国风”照片

之前有网友私聊我&#xff0c;说这两年很多人都在拍中国元素的照片&#xff0c;他们的照片不仅仅是对古建筑简单的拍摄&#xff0c;照片的内容拥有丰富的文化内涵。想问我这样的照片应该怎么拍才能达到有内涵的水平。 其实这个问题确实有一定的难度&#xff0c;每个人都有自己…

腾格尔成影视圈的香饽饽,十月天传媒正式邀请演唱主题曲

俗话说&#xff1a;姜还是老的辣&#xff0c;酒还是陈酿好。这句话用到音乐人腾格尔身上&#xff0c;就再贴切不过了。说起音乐人腾格尔&#xff0c;这位来自草原的雄鹰和苍狼&#xff0c;有很多部音乐作品&#xff0c;都被歌迷朋友们一直传唱。 如今的腾格尔老师&#xff0c;已…

六.初阶指针

前言&#xff1a;大家好哇&#xff01;今天带大家认识下C语言中的指针&#xff0c;指针的用法等&#xff0c;希望对大家有所帮助&#xff01; 目录 一.指针是什么 1.指针是什么&#xff1f; 2.如何理解指针变量 二.指针和指针的类型 1.指针类型 2.指针类型的意义 &#x…

http 跨域资源共享详解

http 跨域资源共享详解 由于浏览器同源策略限制&#xff0c;会导致出现跨域问题。而跨域资源共享&#xff08;CORS&#xff09;可以突破浏览的同源策略的限制&#xff0c;不过需要服务端配合设置相应的响应头&#xff0c;从而使跨源数据传输得以安全进行。 跨域资源共享新增了…

进销存软件对中小型企业管理有什么作用?

进销存软件对中小型企业管理有什么作用&#xff1f; 01 更加有序 库存不乱单据不乱价格不乱 使用进销存软件可以把这些都记录下来&#xff0c;有条不紊&#xff0c;出现什么问题也有据可查&#xff0c;不像纸质单据&#xff0c;会丢会坏&#xff0c;乱成一团。 02 能打印正式…

[Spring Cloud] Hystrix通过配置文件统一设置参数/与OpenFeign结合使用

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

网站favion.ico图标

Favicon.ico一般用于作为缩略的网站标志&#xff0c;它显示在浏览器的地址栏或者标签上。 目前主要的浏览器都支持favicon.ico图标 一 制作favicon图标 1 把品优购图标切成png图片 2 把png图片转换为ico图标&#xff0c;这需要借助第三方转换网站&#xff0c;例如&#xff1…

刷题经验分享(一)

文章目录删除公共字符&#xff1a;组队竞赛&#xff1a;删除公共字符&#xff1a; 第一题&#xff1a;删除公共字符 方法一&#xff1a; 思路&#xff1a; 1.将第二个字符串的字符都映射到一个hashtable数组中&#xff0c;用来判断一个字符在这个字符串。 2. 判断一个字符在第…

140.深度学习分布式计算框架-3

140.1 Horovod Horovod是 Uber 开源的又一个深度学习工具&#xff0c;它的发展吸取了 Facebook「一小时训练 ImageNet 论文」与百度 Ring Allreduce 的优点&#xff0c;可为用户实现分布式训练提供帮助。Horovod 支持通过用于高性能并行计算的低层次接口 – 消息传递接口 (MPI…

Vue脚手架环境中简单使用MarkDown(只入门)

目录 入门 高级使用 入门 1 所在终端输入 npm install vue-meditor 2 复制以下代码 先新建一个组件 <template><div><MavonEditor v-model"myMarkDownData"/><button click"submit">提交</button></div> </te…

vue配置

首先安装node.js 在cmd node -v查看 然后 cmd命令行执行 : npm install -g vue/cli // 加-g是安装到全局 安装vue cli 安装vue cli 1 看一下 这是在cmd输入的内容,参考第一条链接 在vscode中怎么配置他? 文件-打开文件夹,选择一个文件夹 这里是firstvue 在下面新建文件夹…

可变长子网划分

目录 IP地址 子网划分 可变长子网划分 IP地址 在学习子网划分之前应该先清楚什么是IP地址和IP地址的类型 IP 地址的格式0网络地址主机地址10网络地址 主机地址 110网络地址主机地址1110组播地址11110保留 A 1.0.0.0~127.255.255.255 B 128.0.0.0~191.255.255…

C++编程进阶

目录 new运算符 new关键字的使用案例 C的引用 C中引用案例 引用的注意事项 引用做函数参数 引用做函数的返回值 前言&#xff1a; 具体案例 引用的本质 常量引用 常量引用原理 经典案例 函数的提高 函数的默认参数 注意&#xff1a; 具体案例 函数的占位参数…

已解决:树莓派外接硬盘 usb 或者sata 导致wifi无法链接 无线网卡无法使用问题

我的环境是树莓派4b 买了一个有硬盘的盒子 看上图的连接方式&#xff0c;是占用了树莓派的一个usb3.1进行了sata的转接&#xff0c;实现挂载硬盘。 但是我发现&#xff0c;安装系统开机之后&#xff0c;可以看到有硬盘接入&#xff0c;但是无法连wifi&#xff0c;如果拔掉硬盘…

G. SlavicG‘s Favorite Problem(树的遍历DFS,BFS均可)

Problem - G - Codeforces 给你一棵有n个顶点的加权树。回顾一下&#xff0c;树是一个没有任何循环的连接图。加权树是一棵树&#xff0c;其中每条边都有一定的权重。这棵树是无定向的&#xff0c;它没有根。 由于树让你感到厌烦&#xff0c;你决定挑战自己&#xff0c;在给定…

java--Lambda (3)变量的访问与修改

文章目录0 写在前面1 可以直接在 Lambda 表达式中访问外层的局部变量2 在 Lambda 表达式当中被引用的变量的值不可以被更改3 在 Lambda 表达式当中不允许声明一个与局部变量同名的参数或者局部变量4 写在最后0 写在前面 学习使用在Lambda表达式&#xff0c;有些地方访问一些变…

VM系列振弦读数模块采集测量数据的一般步骤

VM 模块是通用型单振弦式传感器测量模块&#xff0c;主要功能是测量频率的传感器内置的温度传感器&#xff0c;使用默认工作参数即可自动测读绝大多数振弦传感器。 但由于传感器类型、结构、厂家、钢弦材料、线圈等影响因素不同&#xff0c;导致使用 VM 模块测量某些传感器时需…

【408专项篇】C语言笔记-第六章(指针)

文章目录第一节&#xff1a;指针的本质1. 指针的定义2. 取地址操作符与取值操作符第二节&#xff1a;指针的传递1. 指针的传递第三节&#xff1a;指针的偏移1. 指针的偏移2. 指针与一维数组第四节&#xff1a;动态指针与内存申请1. 指针与动态内存申请2. 堆空间和栈空间的差异第…

电脑无线网卡连接的无线信号不好的,经常丢包,掉线断网如何优化解决

环境&#xff1a; 电脑&#xff1a;HP480G7 系统:Win10 专业版 无线网卡&#xff1a;水星ud6s 、TP-LINK等 AP&#xff1a;锐捷RAP2200(E) 组网模式&#xff1a;AP代管AP模式 问题描述&#xff1a; 电脑无线网卡连接的无线信号不好的&#xff0c;经常断网&#xff0c;因…