解析关于Tomcat Servlet-request的获取请求参数及几种常用方法

解析,关于,tomcat,servlet,request,获取,请求,参数,几种,常用,方法 · 浏览次数 : 101

小编点评

**摘要** 本文介绍了Tomcat中的Servlet-request请求参数、Servlet转发机制、常用方法。 **Servlet-request请求参数** * `request.getParameterNames()`:返回请求参数名的集合。 * `request.getParameterValues(String key)`:根据key获取请求参数的值。 * `request.getParameter()`:获取所有请求参数。 **Servlet转发机制** * `request.getRequestDispatcher(\"/servletB\").forward(request,response)`:将请求转发至ServletB。 **常用方法** * `request.getRemoteAddr()`:获取客户端的IP地址。 * `request.getRemoteUser()`:获取远程的用户名称。 * `request.getRemoteHost()`:获取远程的主机IP地址。 * `request.getRemotePort()`:获取远程的端口号。 * `request.getServerName()`:获取主机服务名。 * `request.getServerPath()`:获取服务路径。 * `request.getServerPort()`:获取服务端口号。 * `request.getContext()`:获取Servlet上下文。 * `request.getServletPath()`:获取服务路径。 **结论** 通过学习这些方法,开发人员可以轻松地处理请求参数和实现Servlet转发机制。

正文

摘要:本文主要讲解Tomcat之Servlet-request请求参数、Servlet转发机制、常用方法

本文分享自华为云社区《浅谈Tomcat之Servlet-request获取请求参数及常用方法》,作者:QGS。

//获取Map集合中所有的key
Enumeration<String>   getParameterNames();
//获取Map
Map<String, String[]>   getParameterMap(); 
//根据key获取Map集合中的vale  (常用**)
String[]   getParameterValues(String s);
//获取value一维数组的第一个元素   (常用**)
String    getParameter(String name); 
浏览器向服务器提交的是String类型

测试

//getParameterNames()获取所有key值
Enumeration<String> keys = request.getParameterNames();
while (keys.hasMoreElements()){
    String key = keys.nextElement();
 System.out.print("key: "+key +" ");
 //getParameterValues(key) 、据key获取Map集合中的vale
 String[] Values = request.getParameterValues(key);
 if (Values.length>1){
 for (String value : Values) {
 System.out.print("value:"+value+" ");
 }
 }else {
 System.out.print(Values[0]);
 }
 System.out.println();
}

通过标签中的name获取value一维数组

getParameterNames()获取所有key值

如果html页面的数据有更改,浏览器清除过缓存在执行。
//通过标签中的name获取value一维数组
String[] usernames = request.getParameterValues("username");
String[] pwds = request.getParameterValues("pwd");
String[] hobbies = request.getParameterValues("hobby");
for (String username : usernames) {
 System.out.print(username);
}
System.out.println();
for (String pwd : pwds) {
 System.out.print(pwd);
}
System.out.println();
for (String hobby : hobbies) {
 if (hobby.isEmpty()){
 System.out.println("null");
 }
 System.out.print(hobby);
}
System.out.println();
//获取数组的第一个参数
String username = request.getParameter("username");
String pwd = request.getParameter("pwd");
String hobby = request.getParameter("hobby");
System.out.println("getParameter :"+username+" "+pwd+" "+hobby);

getParameter获取数组的第一个参数

//获取数组的第一个参数
String username = request.getParameter("username");
String pwd = request.getParameter("pwd");
String hobby = request.getParameter("hobby");

请求域对象

Request又称“请求域”
应用域对象ServletContext(Servlet上下文对象)、
当用户的共享数据很少修改操作并且数据量少的时候,使用ServletContext能够提升程序的执行效率(应用域绑定数据,看作将数据放到Cache当中,用户访问时直接从Cache中提取,减少IO等操作)。
应用域对象ServletContext的操作方法(类似Map集合的操作)
//向域绑定数据
setAttribute(String name , Object obj)
//从域获取数据,根据name(key)获取数据
Object getAttribute(String name)
//移除数据,根据name(key)
removeAttribute(String name)
请求域对象
请求域比应用域的范围小, 占用资源小,生命周期短,请求域对象只在一次请求内有效。
请求域对象ServletContext的操作方法(类似Map集合的操作)
//向域绑定数据
setAttribute(String name , Object obj)
//从域获取数据,根据name(key)获取数据
Object getAttribute(String name)
//移除数据,根据name(key)
removeAttribute(String name)

案例

//获取系统当前时间
Date nowTime =new Date();
//向request域 中绑定数据
request.setAttribute("NowTime",nowTime);
//从request域 获取数据
Object obj = request.getAttribute("NowTime");
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss");
String timeStr = sdf.format((Date)obj);
out.print("当前时间: "+ timeStr);

Servlet转发机制

转发servlet类

public class ServletA extends HttpServlet {
    @Override
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 //使用Servlet转发机制。执行ServletA后,跳转至ServletB,调用请求转发器,将request,response参数传递给另一个HttpServlet子类
 request.getRequestDispatcher("/servletB").forward(request,response);
 }
}
public class ServletB extends HttpServlet {
    @Override
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 //获取系统当前时间
        Date nowTime =new Date();
 //向request域 中绑定数据
 request.setAttribute("NowTime",nowTime);
 //从request域 获取数据
        Object obj = request.getAttribute("NowTime");
 response.setContentType("text/html;charset=utf-8");
 response.setCharacterEncoding("utf-8");
 PrintWriter out = response.getWriter();
 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss");
        String timeStr = sdf.format((Date)obj);
 out.print("当前时间: "+ timeStr);
 }
}

转发html页面

//既可以转发Servlet类也可以转发html(属于Web容器当中合法的资源都可以转发)
request.getRequestDispatcher("/share.html").forward(request,response);

常用方法

//获取客户端的IP地址
String remoteAddr = request.getRemoteAddr();
//获取远程的用户
String remoteUser = request.getRemoteUser();
//获取远程的主机IP
String remoteHost = request.getRemoteHost();
//获取远程的的端口
int remotePort = request.getRemotePort();
//获取主机服务名
String serverName = request.getServerName();
//获取服务路径(项目名称)
String servletPath = request.getServletPath();
//获取服务端口
int serverPort = request.getServerPort();
//获取Servlet上下文 或者this.getServletContext();
ServletContext servletContext = request.getServletContext();
//指定字符集(解决不同字符集乱码问题)
response.setCharacterEncoding("utf-8");

 

点击关注,第一时间了解华为云新鲜技术~

与解析关于Tomcat Servlet-request的获取请求参数及几种常用方法相似的内容:

解析关于Tomcat Servlet-request的获取请求参数及几种常用方法

摘要:本文主要讲解Tomcat之Servlet-request请求参数、Servlet转发机制、常用方法 本文分享自华为云社区《浅谈Tomcat之Servlet-request获取请求参数及常用方法》,作者:QGS。 //获取Map集合中所有的key Enumeration getP

驱动开发:内核解析内存四级页表

关于内存管理和分页模式,不同的操作系统和体系结构可能会有略微不同的实现方式。9-9-9-9-12的分页模式是一种常见的分页方案,其中物理地址被分成四级页表:PXE(Page Directory Pointer Table Entry)、PPE(Page Directory Entry)、PDE(Page Table Entry)和PTE(Page Table Entry)。这种分页模式可以支持大量

ThreadLocal源码解析及实战应用

ThreadLocal是一个关于创建线程局部变量的类。 通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。而使用ThreadLocal创建的变量只能被当前线程访问,其他线程则无法访问和修改。ThreadLocal在设计之初就是为解决并发问题而提供一种方案,每个线程维护一份自己的数据,达到线程隔离的效果。

[转帖]深度解析:ARM 处理器在云计算领域的崛起!

https://zhuanlan.zhihu.com/p/377544841 最近是不是听了很多关于ARM处理器的内容? ARM处理器是什么?它在未来的云计算领域中又占据着什么地位? ARM未来的趋势是怎样的? 跟随小编一起来看看吧~ ARM 处理器的崛起 近年来科技媒体上关于 ARM 芯片的新闻可

C#中关于 object,dynamic 一点使用心得

首先说一下使用场景 WebAPI接口入参使用 object和 dynamic 后续解析和处理 1.object和dynamic 区别 在.NET中,object和dynamic也有一些区别: object:object是.NET中的顶级类,所有类都是object的子类。在C#中,您可以使用objec

【数仓运维实践】关于GaussDB(DWS)单SQL磁盘空间管控

摘要:本文主要讲解数仓运维中遇到单SQL磁盘空间管控问题的解析和方案。 本文分享自华为云社区《GaussDB(DWS)运维 -- 单SQL磁盘空间管控》,作者: 譡里个檔。 【问题描述】 执行部分SQL语句时出现如下报错信息(具体数值可能因为配置有差异),本文针对根因和场景触发场景,确定触发此类问题

解析PPTX 遇到异常:“\b”(十六进制值 0x08)是无效的字符。

问题描述: 通过DocumentFormat.OpenXml解析PPTX文件时遇到异常:“\b”(十六进制值 0x08)是无效的字符,查看文件发现存在乱码,乱码的十六进制值刚好时异常中提到的0x08 原因分析: 网上有很多关于这类xml遇到无效字符异常的文章,其原因是xml中包含了不可打印的控制字符

跳跃表数据结构与算法分析

目前市面上充斥着大量关于跳跃表结构与Redis的源码解析,但是经过长期观察后发现大都只是在停留在代码的表面,而没有系统性地介绍跳跃表的由来以及各种常量的由来。作为一种概率数据结构,理解各种常量的由来可以更好地进行变化并应用到高性能功能开发中。本文没有重复地以对现有优秀实现进行代码分析,而是通过对跳跃表进行了系统性地介绍与形式化分析,并给出了在特定场景下的跳跃表扩展方式,方便读者更好地理解跳跃表数据

C#实现生成Markdown文档目录树

前言 之前我写了一篇关于C#处理Markdown文档的文章:C#解析Markdown文档,实现替换图片链接操作 算是第一次尝试使用C#处理Markdown文档,然后最近又把博客网站的前台改了一下,目前文章渲染使用Editor.md组件在前端渲染,但这个插件生成的目录树很丑,我魔改了一下换成boots

[转贴]Python 中 -m 的典型用法、原理解析与发展演变

在命令行中使用 Python 时,它可以接收大约 20 个选项(option),语法格式如下: python [-bBdEhiIOqsSuvVWx?] [-c command | -m module-name | script | - ] [args] 1 本文想要聊聊比较特殊的“-m”选项:关于它