(十)Servlet教程——HttpServletRequest接口

news/2024/9/24 4:20:17/

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

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


http://www.ppmy.cn/news/1451861.html

相关文章

工具链工具——映射与调度、模拟与验证、开发与测试工具

本篇文章将重点介绍工具链的工具相关知识&#xff0c;我们将从工具链的基本概念出发&#xff0c;重点介绍工具链中的映射和调度工具、模拟与验证工具、开发和测试工具&#xff0c;最后提出对工具链发展的展望&#xff0c;从而对工具链的工具进行一个较为系统的讲解。 工具链的…

Python淘宝乐器销售数据可视化和乐器推荐系统设计与实现

博主介绍&#xff1a;黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者&#xff0c;CSDN博客专家&#xff0c;在线教育专家&#xff0c;CSDN钻石讲师&#xff1b;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…

阿里低代码引擎学习记录

官网 一、关于设计器 1、从设计器入手进行低代码开发 设计器就是我们用拖拉拽的方法&#xff0c;配合少量代码进行页面或者应用开发的在线工具。 阿里官方提供了以下八个不同类型的设计器Demo&#xff1a; 综合场景Demo&#xff08;各项能力相对完整&#xff0c;使用Fusion…

【设计模式】之工厂模式(三种)

系列文章目录 【设计模式】之单例模式 【设计模式】之模板方法模式 【设计模式】之责任链模式 【设计模式】之策略模式 前言 今天给大家介绍23种设计模式中的工厂模式&#xff0c;学过Spring的小伙伴应该不陌生&#xff0c;今天给大家详细介绍一下它。&#x1f308; 注意&…

Vue 3中,`toRef` 和 `toRefs`

在Vue 3中&#xff0c;toRef 和 toRefs 是两个帮助函数&#xff0c;它们用于从 reactive 对象中提取出响应式的引用。这两个函数在处理复杂的响应式状态或者在组合式API中非常有用。 ### toRef toRef 创建一个 ref 对象&#xff0c;它是一个对于 reactive 对象中某个属性的响…

【matlab基础知识】(五)三维曲线绘制

参数方程 >> t0:0.01:2*pi; xt.^3.*sin(3*t).*exp(-t);yt.^3.*cos(3*t).*exp(-t);zt.^2;plot3(x,y,z),grid >> [x,y]meshgrid(-3:0.1:3,-2:0.1:2); z(x.^2-2*x).*exp(-x.^2-y.^2-x.*y); >> mesh(x,y,z) 用点运算的形式来构造Z矩阵 surf&#xff08;x,y,z&a…

Windows Server安装DHCP和DNS

前言 本期将教大家如何在Windows server上部署DHCP服务和DNS服务&#xff0c;用于模拟给内网主机分配IP地址。虽然用于演示的系统比较老&#xff0c;如果在新版本如Windows server2016、19、22上部署&#xff0c;操作基本一致。在此之前先给大家科普一波理论&#xff0c;需略过…

深入探究TCP/IP协议

一、引言 在信息技术飞速发展的今天&#xff0c;网络已成为人类社会不可或缺的部分。实现网络中计算机相互通信的关键之一便是TCP/IP协议。作为互联网的基础&#xff0c;TCP/IP协议确保了全球范围内的数据交换和信息共享。本文将深入探讨TCP/IP协议的概念、特点、组成、相关协…