JavaEE-Servlet的使用

news2025/4/15 20:16:35

目录

  • 显示 HttpServletRequest 的常用属性
  • 获取GET请求中的query string 的内容
  • 获取 POST 请求中 body 的内容
  • 实现自动刷新
  • 构造重定向页面

显示 HttpServletRequest 的常用属性

能够返回一个页面, 显示以下内容:

  • URL
  • 方法
  • 版本号
  • query string
  • context path
  • 所有的 header
  • 
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.Enumeration;
    
    @WebServlet("/ShowRequest")
    public class ShowRequest extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            StringBuilder result = new StringBuilder();
            result.append(req.getProtocol());
            result.append("<br>");
            result.append(req.getMethod());
            result.append("<br>");
            result.append(req.getRequestURI());
            result.append("<br>");
            result.append(req.getQueryString());
            result.append("<br>");
            result.append(req.getContextPath());
            result.append("<br>");
    
            result.append("==================<br>");
    
            Enumeration<String> headerNames = req.getHeaderNames();
            while (headerNames.hasMoreElements()) {
                String headerName = headerNames.nextElement();
                String headerValue = req.getHeader(headerName);
                result.append(headerNames + ":" + headerValue + "<br>");
            }
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write(result.toString());
        }
    }
    

    在这里插入图片描述

    获取GET请求中的query string 的内容

    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/message")
    public class GetStirng extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String aa = req.getParameter("aa");
            String bb = req.getParameter("bb");
            resp.getWriter().write("aa=" + aa + ",bb=" + bb);
        }
    }
    

    在这里插入图片描述

    获取 POST 请求中 body 的内容

    分别实现这两种 body 格式的处理:

    1. aa=10&bb=20
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/message")
    public class GetStirng extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String aa = req.getParameter("aa");
            String bb = req.getParameter("bb");
            resp.getWriter().write("aa=" + aa + ",bb=" + bb);
        }
    }
    
    

    在这里插入图片描述

    1. { “aa”: 10, “bb”:20}
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/message")
    public class GetStirng extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String aa = req.getParameter("aa");
            String bb = req.getParameter("bb");
            resp.getWriter().write("aa=" + aa + ",bb=" + bb);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // 前端通过body,以form表单格式,把aa和bb传到服务器
            String aa = req.getParameter("aa");
            String bb = req.getParameter("bb");
            resp.getWriter().write("aa=" + aa + ",bb=" + bb);
        }
    }
    
    

    在这里插入图片描述

    实现自动刷新

    1. 实现 Servlet, 设置 header, 实现每隔 1s 自动刷新页面的效果. 页面上要显示当前时间戳
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/servletResponse")
    public class ServletResponse extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.setContentType("text/html;charset=utf8");
            resp.setStatus(200);
            resp.setHeader("Refresh", "3");
            resp.getWriter().write("timeStamp:" + System.currentTimeMillis());
        }
    }
    
    

    在这里插入图片描述

    1. 网上搜索 SimpleDateFormat 类的用法, 让页面上能够显示格式化的事前. 例如 2022-01-19 12:00:00
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.text.DateFormat;
    import java.util.Date;
    
    @WebServlet("/servletResponse")
    public class ServletResponse extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.setContentType("text/html;charset=utf8");
            resp.setStatus(200);
            resp.setHeader("Refresh", "3");
            resp.getWriter().write("timeStamp:" + System.currentTimeMillis());
    
            DateFormat df1 = null;
            DateFormat df2 = null;
            df1 = DateFormat.getDateInstance();
            df2 = DateFormat.getDateTimeInstance();
    //        System.out.println("DATE:" + df1.format(new Date()));
    //        System.out.println("DATETIME:" + df2.format(new Date()));
    
            resp.getWriter().write("<br>");
            resp.getWriter().write("DATE:" + df1.format(new Date()));
            resp.getWriter().write("<br>");
            resp.getWriter().write("DATE:" + df2.format(new Date()));
        }
    }
    
    

    在这里插入图片描述

    构造重定向页面

    实现访问 /redirect 路径后, 自动重定向到 搜狗主页 的代码.

    package com.example.test_20230602;
    
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/redirectServlet")
    public class RedirectServlet extends HelloServlet{
        @Override
        public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
            resp.setStatus(302);
            resp.setHeader("Location","https://sogou.com");
        }
    }
    
    

    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/602045.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Shell脚本攻略:通配符、正则表达式

目录 一、理论 1.通配符 2.正则表达式 二、实验 1.通配符 2.正则表达式 一、理论 1.通配符 &#xff08;1&#xff09;概念 通配符只用于匹配文件名、目录名等&#xff0c;不能用于匹配文件内容&#xff0c;而且是已存在的文件或者目录。 各个版本的shell都有通配符&…

MySQL遇到的问题

注意&#xff1a;当前遇到问题都是MySQL5.7.33版本和Windows10的系统&#xff0c;MySQL服务的名称是MySQL57&#xff0c;以下出现的MySQL57只是我的MySQL服务名称&#xff0c;要根据自己的MySQL服务的名称来 可以通过“服务”&#xff0c;找到自己的MySQL服务名称&#xff0c;…

SpringBoot测试——高级配置

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ SpringBoot测试——高级配置 一、SpringBoot加…

电容器基础原理知识

电容器基础知识 电容器是一种储能元件&#xff0c;在电路中用于调谐、滤波、耦合、旁路、能量转换和延时。电容器通常叫做电容。按其结构可分为固定电容器、半可变电容器、可变电容器三种。 常用电容的结构和特点 常用的电容器按其介质材料可分为电解电容器、云母电容器、瓷介…

什么是RabbitMQ?

RabbitMQ是一个由erlang开发的消息队列。消息队列用于应用间的异步协作。 2.RabbitMQ的组件 Message&#xff1a;由消息头和消息体组成。消息体是不透明的&#xff0c;而消息头则由一系列的可选属性组成&#xff0c;这些属性包括routing-key、priority、delivery-mode&#xff…

ChatGPT与软件架构(2) - 基于Obsidian和GPT实现解决方案架构自动化

磨刀不误砍柴工&#xff0c;良好的工具可以有效提高效率。本文介绍基于Obsidian和GPT打造架构知识库的思路&#xff0c;为架构师提供整理、分享、原文: Solution Architecture Automation With Obsidian and GPT Stas Parechyn Unsplash 本文介绍的ArchVault是一个旨在帮助架构…

【100个 Unity实用技能】 | Unity 的 LOD技术(多细节层次)

&#x1f3ac; 博客主页&#xff1a;https://xiaoy.blog.csdn.net &#x1f3a5; 本文由 呆呆敲代码的小Y 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;Unity系统学习专栏 &#x1f332; 游戏制作专栏推荐&#xff1a;游戏制作 &…

vue3+ts+echarts5基本地图下钻~

依靠本地json文件实现省市下钻&#xff0c;有后台的可以改成服务&#xff0c;样式没有&#xff0c;vue3tsecharts5&#xff0c;一定要设宽高 html&#xff1a; <div click"back">返回</div> <div id"echartsMap" style"width: 58%; h…

【Azure】微软 Azure 基础解析(七)Azure 网络服务中的虚拟网络 VNet、网关、负载均衡器 Load Balancer

本系列博文还在更新中&#xff0c;收录在专栏&#xff1a;「Azure探秘&#xff1a;构建云计算世界」 专栏中。 本系列文章列表如下&#xff1a; 【Azure】微软 Azure 基础解析&#xff08;三&#xff09;描述云计算运营中的 CapEx 与 OpEx&#xff0c;如何区分 CapEx 与 OpEx…

入职字节跳动那一天,我哭了(蘑菇街被裁,奋战7个月拿下offer)

前言 先说一下自己的个人情况&#xff0c;20届应届生&#xff0c;通过校招进入到了蘑菇街&#xff0c;然后一待就待了差不多2年多的时间&#xff0c;可惜的是去年8月份受疫情影响遇到了大裁员&#xff0c;而我也是其中一员。好在之前一直想去字节跳动&#xff0c;年尾就已经在…

wlanapi.dll丢失怎么办?分享多种wlanapi.dll丢失的解决方法

Wlanapi.dll是Windows中的一个重要文件&#xff0c;它是无线局域网API的一部分&#xff0c;负责提供和管理无线网络连接的功能。如果出现wlanapi.dll丢失的情况&#xff0c;会导致无法连接到无线网络&#xff0c;影响电脑的正常使用。下面我们来看看wlanapi.dll丢失怎么办&…

在linux服务器中对R语言中for循环设置多核运行

1 问题 在R中构建了for循环&#xff0c;由于循环过多&#xff0c;运行速度过慢&#xff0c;且不同循环之间是并行关系&#xff0c;拟通过多核运行可以解决此问题。 2 代码设置 2.1 shell脚本中的设置 b.sh export OPENBLAS_NUM_THREADS8Rscript ./..._1.R \2.2 R代码中的设…

程序员必备的10张流程图

随着互联网的发展&#xff0c;现在有越来越多的人想成为程序员。 如果你想成为程序员你可以先问自己这几个问题&#xff1f; •你是一个逻辑和抽象思维能力比较强的人吗&#xff1f; •你是否愿意不断地去学习那些新的东西&#xff0c;并且在大多数时间内你都需要去自学。 …

Midway.js探索与实践

您好&#xff0c;如果喜欢我的文章&#xff0c;可以关注我的公众号「量子前端」&#xff0c;将不定期关注推送前端好文~ 前言 我司的技术基建在Midway之上&#xff0c;主要是面向中后台前后端一体化方案&#xff0c;大白话就是全栈应用解决方案&#xff0c;什么是Midway呢&am…

freeswitch的gateway配置方案优化

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 在之前的文章中&#xff0c;我们简单介绍过gateway的三种配置方案&#xff0c;但是实际应用之后发现&#xff0c;方案中的参数设置有缺陷&#xff0c;会导致一些问题。 本文档中&#xff0c;针对具体的gateway配置问题…

linux第六七天 which find进程等

ctrlF5 //强制刷新 which ifconfig //找到ifconfig的路径 发现在/usr/sbin/ifconfig 目录下 然后 cp /usr/sbin/ifconfig /root/bin/ipconfig 就相当于自己设置了ifconfig的另外一种命令 多个条件可以使用-a(-o)连接&#xff0c;表示而且&#xff08;或者&#xff09…

Django中使用celery实现定时任务和异步任务

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、准备二、配置1.引入库2.代码编写a、在settings.py文件下添加如下代码b、在项目主目录下创建celery.py文件c、在项目的__init__.py里面添加如下代码![在这里…

【期望】Kuangbin 危险的派对 牛客期望专题班 increment of coins

4849. 危险的迷宫 - AcWing题库 题意&#xff1a; 思路&#xff1a; 本来对期望怎么想都想不通&#xff0c;后来看了大佬的题解&#xff0c;自己动手画了画&#xff0c;以及队友说的“拆分”&#xff0c;忽然间就有点懂了.... 这个说的很对&#xff0c;把期望问题看作是DAG上…

Unity中对预制体烘焙光照贴图,在其他Scene中使用或者动态生成带光照贴图的预制体

记录个人开发笔记&#xff0c;如果有大佬有更好的方法或者觉得我这个方法哪里有问题欢迎指正&#xff01; 首先说下为什么会弄预制体烘焙光照贴图&#xff0c;因为项目需求需要动态生成一个房间的&#xff0c;因此是将房间弄成预制体&#xff0c;动态生成就好了&#xff0c;这…

【Datagear】如何给Datagear追加Admin

【背景】 Datagear默认是只设置了一个Admin&#xff0c;这个Admin可以完成用户的各种管理操作&#xff0c;并且对所有数据源&#xff0c;数据集&#xff0c;图表&#xff0c;面板拥有全部编辑权限。 【问题】 只有一个Admin很多场景下不够用。但是应用设置本身没有提供追加A…