(十)Servlet教程——HttpServletRequest接口

embedded/2024/9/25 2:53:07/

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/embedded/29734.html

相关文章

操作系统安全:安全审计,Windows系统日志详解,Windows事件ID汇总

「作者简介」&#xff1a;2022年北京冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础对安全知识体系进行总结与归纳&#xff0c;著作适用于快速入门的 《网络安全自学教程》&#xff0c;内容涵盖系统安全、信息收集等…

Go语言的map并发读写如何保证安全?

文章目录 为什么map不是并发安全的&#xff1f;如何保证map的并发安全&#xff1f;1. 使用互斥锁&#xff08;Mutex&#xff09;示例代码&#xff1a;2. 使用并发安全的map实现示例代码&#xff1a; 总结 在Go语言中&#xff0c;map是一种内置的数据结构&#xff0c;用于存储键…

Web前端开发之CSS_2

关系选择器CSS盒子模型弹性盒子模型文档流浮动清除浮动定位 1. 关系选择器 1.1 后代选择器 E F{} 选择所有被 E 元素包含的 F 元素&#xff0c;中间用空格隔开 <ul> <li>后代列表1</li> <div> <ol> <li>后代列表2</li> </ol>…

Faststone Capture:一触即发的效率革命【AI写作】

首先&#xff0c;这篇文章是基于笔尖AI写作进行文章创作的&#xff0c;喜欢的宝子&#xff0c;也可以去体验下&#xff0c;解放双手&#xff0c;上班直接摸鱼~ 按照惯例&#xff0c;先介绍下这款笔尖AI写作&#xff0c;宝子也可以直接下滑跳过看正文~ 笔尖Ai写作&#xff1a;…

Leetcode—2385. 感染二叉树需要的总时间【中等】

2024每日刷题&#xff08;123&#xff09; Leetcode—2385. 感染二叉树需要的总时间 算法思想 参考灵神 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(…

云服务器+ASF实现全天挂卡挂时长

目录 前言正文1.安装下载2.编辑配置文件3.设置Steam社区证书4.启动ASF5.给游戏挂时长6.进阶-ASF自动启动且后台保活 前言 我遇到的最大的问题是&#xff0c;网络问题 其实不然&#xff0c;各大厂商的云服务器后台都有流量监控&#xff0c;意味着依靠一般方法是不能正常访问St…

RabbitMQ入门教学(浅入浅出)

进程间通信 互联网的通讯时网络的基础&#xff0c;一般情况下互联网的资源数据对储存在中心服务器上&#xff0c;一般情况下个体对个体的访问仅限于局域网下&#xff0c;在公网即可完成资源的访问&#xff0c;如各种网站资源&#xff0c;下载资源&#xff0c;种子等。网络通讯…

81、动态规划-爬楼梯

思路: 爬楼梯是一个特别经典的动态规划题&#xff0c;动态规划最好的办法就是从递归改到动态规划。 比如现在n阶楼梯&#xff0c;每次爬1阶或者2阶&#xff0c;一共有多少种方法。那么我就可以全排列&#xff0c;比如当前我可以走一阶算一下有多少种方法&#xff0c;然后我可…