(十)Servlet教程——HttpServletRequest接口

2024-04-29 04:52

本文主要是介绍(十)Servlet教程——HttpServletRequest接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 知识准备

HttpServletRequest对象

        浏览器访问网页的时候通过HTTP协议访问服务器上的静态资源或者接口服务,Servlet可以充当接口服务。当Servlet接收到来自浏览器的请求后会生成HttpServletRequest和HttpServletResponse来处理该请求。

        公共接口类HttpServletRequest继承自ServletRequest。

        客户端浏览器发出的请求被封装成为一个HttpServletRequest对象。对象包含了客户端请求信息包括请求的地址,请求的参数,提交的数据,上传的文件客户端的ip甚至客户端操作系统都包含在其内。

        接下来使用实例来一步步介绍HttpServletRequest对象包含的方法。

2.首先打开IDEA开发工具

点击“New Project”,弹出的界面如下图所示

3.左侧选择“Java Enterprise”,修改项目名称和对应的目录,Project template选择“Web Application”

Application Server选择安装的Tomcat服务器

Project SDK选择我们安装的JDK

4.点击“Next”按钮

弹出的界面如下图所示,默认会选择“Java EE 8”和Servlet,如下图所示

5.点击”Finish”按钮,就完成了一个Java Web项目的创建。

6.由于默认的项目名称比较长,我们需要做一下设置方便在浏览器中输入,点击“Edit Configurations”按钮,打开的设置界面如下图所示

7.切换到“Deployment”选项卡

将Application context改为s01

然后点击启动按钮就可以启动该应用

8.修改默认Servlet的代码

String method = request.getMethod();

System.out.println("请求方式" + method);

String questUri = request.getRequestURI();

System.out.println("资源名称部分:" + questUri);

String queryString = request.getQueryString();

System.out.println("参数部分" + queryString);

StringBuffer questUrl = request.getRequestURL();

System.out.println("请求完整路径" + questUrl.toString());

String contextPath = request.getContextPath();

System.out.println("获取应用名称:" + contextPath);

9.重启应用

再次在浏览器中输入地址http://localhost:8686/s01/hello-servlet

可以在Idea控制台中看到如下信息

10. 获取请求头信息

HttpServletRequest接口提供了一些方法获取请求头数据,常用的获取请求头数据的方法:

getHeader(String name):根据请求头的名称获取请求头的值;

getHeaders(String name):根据请求头的名称获取请求头的所有值,返回一个Enumeration对象;

getHeaderNames():获取所有请求头的名称,返回一个Enumeration对象;

      Enumeration<String> headers = request.getHeaderNames();

        while (headers.hasMoreElements()) {

            String headerName = headers.nextElement();

            System.out.println("请求头名称:" + headerName + "</br>");

        }

请求头信息将会在控制台中打印出来

11. 获取请求参数的方法

Map<String,String[]> getParameterMap()  获取包含所有请求参数及值的 Map 对象;

Enumeration<String> getParameterNames() 获取请求参数 Map 的所有 key,即获取所有请求参数名 name;

String[] getParameterValues(String name) 根据指定的请求参数名称,获取其对应的所有值;

String getParameter(String name)  根据指定的请求参数名称,获取其对应的值;

       Map<String, String[]> map = request.getParameterMap();

        for (String key : map.keySet()) {

            System.out.println("键:" + key);

        }

        Enumeration<String> paramNames = request.getParameterNames();

        while (paramNames.hasMoreElements()) {

            String paramName = paramNames.nextElement();

            System.out.println("parameterName:" + paramName);

        }

        String[] values = request.getParameterValues("uname");

        for (String s : values) {

            System.out.println("getParameterValues:" + s);

        }

        String uname = request.getParameter("uname");

        String password = request.getParameter("password");

        System.out.println("uname:" + uname);

        System.out.println("password" + password);

在浏览器地址栏中输入请求参数

http://localhost:8686/s01/hello-servlet?uname=test&password=123455

12. 请求作用域

在浏览器发出请求到到返回响应的过程中,在这个过程中使用forward跳转多个页面,这些页面可以用该域中的变量。

与请求域属性相关的方法:

setAttribute方法

getAttribute方法

removeAttribute方法

getAttributeNames方法

13. 创建一个SomeServlet类设置请求作用域数据

@WebServlet("/some")

public class SomeServlet extends HttpServlet {

    @Override

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //请求作用域中放置属性

        request.setAttribute("address", "武汉");

        request.setAttribute("floor", "12");

        request.getRequestDispatcher("other").forward(request, response);

    }

}

14. 创建一个OtherServlet类获取请求作用域数据

@WebServlet("/other")

public class OtherServlet extends HttpServlet {

    @Override

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String address = (String) request.getAttribute("address");

        String floor = (String) request.getAttribute("floor");

        System.out.println("address:" + address);

        System.out.println("floor:" + floor);

    }

}

在浏览器中访问地址:http://localhost:8686/s01/some

请求作用域属性将会在控制台中打印出来

这篇关于(十)Servlet教程——HttpServletRequest接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/945154

相关文章

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Java Scanner类解析与实战教程

《JavaScanner类解析与实战教程》JavaScanner类(java.util包)是文本输入解析工具,支持基本类型和字符串读取,基于Readable接口与正则分隔符实现,适用于控制台、文件输... 目录一、核心设计与工作原理1.底层依赖2.解析机制A.核心逻辑基于分隔符(delimiter)和模式匹

spring AMQP代码生成rabbitmq的exchange and queue教程

《springAMQP代码生成rabbitmq的exchangeandqueue教程》使用SpringAMQP代码直接创建RabbitMQexchange和queue,并确保绑定关系自动成立,简... 目录spring AMQP代码生成rabbitmq的exchange and 编程queue执行结果总结s

基于Redisson实现分布式系统下的接口限流

《基于Redisson实现分布式系统下的接口限流》在高并发场景下,接口限流是保障系统稳定性的重要手段,本文将介绍利用Redisson结合Redis实现分布式环境下的接口限流,具有一定的参考价值,感兴趣... 目录分布式限流的核心挑战基于 Redisson 的分布式限流设计思路实现步骤引入依赖定义限流注解实现

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安