解析关于Tomcat Servlet-request的获取请求参数及几种常用方法
2023-09-27 14:19:58 时间
摘要:本文主要讲解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类型
测试
![](https://pic2.zhimg.com/80/v2-e98b240fa38004924a643080636fa68d_720w.webp)
![](https://pic3.zhimg.com/80/v2-4429a70b48d2aa737532665496584f42_720w.webp)
![](https://pic3.zhimg.com/80/v2-fb2078f59ea4bad77710a9d69c64cdb2_720w.webp)
//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(); }
![](https://pic3.zhimg.com/80/v2-670aafacf65a8ae0b9e29fae92794e76_720w.webp)
通过标签中的name获取value一维数组
getParameterNames()获取所有key值
如果html页面的数据有更改,浏览器清除过缓存在执行。
![](https://pic3.zhimg.com/80/v2-ee39b109ade2962717defc4df862d842_720w.webp)
//通过标签中的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类
![](https://pic3.zhimg.com/80/v2-ea7958661e2f99e1386eaf033408c1da_720w.webp)
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); } }
![](https://pic2.zhimg.com/80/v2-e6e03faefbef9dea1554673dcdacee2d_720w.webp)
转发html页面
//既可以转发Servlet类也可以转发html(属于Web容器当中合法的资源都可以转发) request.getRequestDispatcher("/share.html").forward(request,response);
![](https://pic3.zhimg.com/80/v2-cf2a0daa885bd9e202e8879afa545282_720w.webp)
常用方法
//获取客户端的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");
![](https://pic4.zhimg.com/80/v2-34d22ddf69b0582d1e6835f136b390d3_720w.webp)
相关文章
- Tomcat,JBoss与JBoss Web
- 配置发布tomcat服务
- 阿里云申请ssl证书配置tomcat访问https
- [转]Tomcat启动java.lang.OutOfMemoryError: PermGen space错误解决
- [转]Eclipse启动Tomcat时45秒超时解决方法
- docker安装使用以及tomcat部署超级详解
- tomcat启动提示server.xml的context节点中不支持source属性警告的解决方法
- Eclipse等导入(Web)项目后报错Tomcat报错 注释 乱码问题 等全部解决方法
- tomcat调优
- Tomcat 输入http://localhost:8080打不开网页的解决方法
- eclipse环境下tomcat远程调试方法
- 直接双击启动tomcat中的startup.bat闪退原因及解决方法
- Tomcat在阿里云Centos7上正常启动,但浏览器无法访问的解决方法
- Tomcat数据库连接池的配置方法总结(叶涛为您解答)
- idea设置tomcat虚拟路径的两种方法
- maven tomcat插件上传项目到tomcat服务器报错SEVERE: One or more listeners failed to start.
- centos 7 使用Ansible 发布tomcat 服务
- 如何用tomcat实现类似weblogic那样的热部署方式
- 登录Tomcat控制台