解决jsp request.getParameter乱码问题(兼容Tomcat 6~8三个版本)

JSP页面写法:

<%@ page contentType="text/html; charset=utf-8" language="java" %>
<%@ page import="java.io.*" %>
<%!
int getServerVersion(HttpServletRequest request) {ServletContext application = request.getSession().getServletContext();String info = application.getServerInfo();int version = 8;int a = info.indexOf("/");int b = info.indexOf(".");if (a != -1 && b != -1) {version = Integer.valueOf(info.substring(a + 1, b));}return version;
}String getParameter(HttpServletRequest request, String name) {int version = getServerVersion(request);String value = request.getParameter(name);if (version <= 7 && value != null) {// Tomcat 7及以下需要转换字符编码try {value = new String(value.getBytes("ISO-8859-1"), "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}}return value;
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JSP页面</title>
</head><body>
<p>汤姆猫服务器版本: <%= getServerVersion(request) %></p>
<p>
<% 
if (getServerVersion(request) <= 7) {// 防止Tomcat 6-7获取post数据时乱码request.setCharacterEncoding("ISO-8859-1");
} else {// 防止Tomcat 8获取post数据时乱码request.setCharacterEncoding("UTF-8");
}
String value = getParameter(request, "get_text");
out.println("get_text=" + value + "<br />");
value = getParameter(request, "post_text");
out.println("post_text=" + value);
%>
</p>
<form id="form1" name="form1" method="get" action=""><label><input name="get_text" type="text" id="textfield" value="浏览器" /></label><label><input type="submit" id="button" value="GET提交" /></label>
</form>
<form id="form2" name="form1" method="post" action=""><label><input name="post_text" type="text" id="textfield2" value="操作系统" /></label><label><input type="submit" id="button2" value="POST提交" /></label>
</form>
</body>
</html>

Servlet页面写法:

package mytest;import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class ParamsTest*/
public class ParamsTest extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public ParamsTest() {super();// TODO Auto-generated constructor stub}private int getServerVersion(HttpServletRequest request) {ServletContext application = request.getSession().getServletContext();String info = application.getServerInfo();int version = 8;int a = info.indexOf("/");int b = info.indexOf(".");if (a != -1 && b != -1) {version = Integer.valueOf(info.substring(a + 1, b));}return version;}private String getParameter(HttpServletRequest request, String name) {int version = getServerVersion(request);String value = request.getParameter(name);if (version <= 7 && value != null) {// Tomcat 7及以下需要转换字符编码try {value = new String(value.getBytes("ISO-8859-1"), "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}}return value;}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {if (getServerVersion(request) <= 7) {// 防止Tomcat 6-7获取post数据时乱码request.setCharacterEncoding("ISO-8859-1");} else {// 防止Tomcat 8获取post数据时乱码request.setCharacterEncoding("UTF-8");}// 防止所有Tomcat版本输出网页内容乱码response.setCharacterEncoding("UTF-8");PrintWriter out = response.getWriter();out.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");out.println("<html xmlns=\"http://www.w3.org/1999/xhtml\">");out.println("<head>");out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />");out.println("<title>Servlet页面</title>");out.println("</head>");out.println("<body>");out.println("<p>汤姆猫服务器版本: " + getServerVersion(request) + "</p>");out.println("<p>");String value = getParameter(request, "get_text");out.println("get_text=" + value + "<br />");value = getParameter(request, "post_text");out.println("post_text=" + value);out.println("</p>");out.println("<form id=\"form1\" name=\"form1\" method=\"get\" action=\"\">");out.println("  <label>");out.println("  <input name=\"get_text\" type=\"text\" id=\"textfield\" value=\"浏览器\" />");out.println("  </label>");out.println("  <label>");out.println("  <input type=\"submit\" id=\"button\" value=\"GET提交\" />");out.println("  </label>");out.println("</form>");out.println("<form id=\"form2\" name=\"form1\" method=\"post\" action=\"\">");out.println("  <label>");out.println("  <input name=\"post_text\" type=\"text\" id=\"textfield2\" value=\"操作系统\" />");out.println("  </label>");out.println("  <label>");out.println("  <input type=\"submit\" id=\"button2\" value=\"POST提交\" />");out.println("  </label>");out.println("</form>");out.println("</body>");out.println("</html>");}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

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

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

相关文章

移远通信亮相AWE 2024,以科技力量推动智能家居产业加速发展

科技的飞速发展&#xff0c;为我们的生活带来了诸多便利&#xff0c;从传统的家电产品到智能化的家居设备&#xff0c;我们的居家生活正朝着更智能、更便捷的方向变革。 3月14日&#xff0c;中国家电及消费电子博览会&#xff08;Appliance&electronics World Expo&#xf…

GPT如何与回归模型分析、混合效应模型、多元统计分析及结构方程模型、Meta分析、随机森林模型及贝叶斯回归分析结合应用

自2022年GPT&#xff08;Generative Pre-trained Transformer&#xff09;大语言模型的发布以来&#xff0c;它以其卓越的自然语言处理能力和广泛的应用潜力&#xff0c;在学术界和工业界掀起了一场革命。在短短一年多的时间里&#xff0c;GPT已经在多个领域展现出其独特的价值…

【物联网】Modbus 协议及Qinghub物联网平台应用

Modbus 协议简介 QingHub设计器在设计物联网数据采集时不可避免的需要针对Modbus协议的设备做相关数据采集&#xff0c;这里就我们的实际项目经验分享Modbus协议 你可以通过QingHub作业直接体验试用&#xff0c;也可以根据手册开发相应的代码块。 qinghub项目已经全面开源。 …

yocto系列之配置ubuntu22.04主机

回顾 在前面的文章中我们介绍了Yocto项目&#xff0c;并讨论了诸如open-embedded、poky、bitbake、recipes等主题。这是前面文章的链接&#xff1a; Yocto: 第1部分 - yocto系列之yocto是个什么东东 https://mp.csdn.net/mp_blog/creation/editor/136742286 在这篇文章中&a…

【本地图片转换为PDF】

本地图片转换为PDF 1.需要使用到pdfbox 需要添加如下依赖 <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox --><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.…

sqllab第十九关通关笔记

知识点&#xff1a; 错误注入 最大长度为32位&#xff1b;如果目标长度>32时&#xff0c;需要利用截取函数进行分段读取referer注入 insert语句update语句 通过admin admin进行登录发现页面打印除了referer字段的信息 这应该是一个referer注入 首先进行测试一下 构造payl…

基于SpringBoot和Echarts的全国地震可视化分析实战

目录 前言 一、后台数据服务设计 1、数据库查询 2、模型层对象设计 3、业务层和控制层设计 二、Echarts前端配置 1、地图的展示 2、次数排名统计 三、最终结果展示 1、地图展示 2、图表展示 总结 前言 在之前的博客中基于SpringBoot和PotsGIS的各省地震震发可视化分…

C++提高笔记(四)---STL容器(stack、queue、list)

1、stack容器&#xff08;栈&#xff09; 1.1 栈stack基本概念 概念&#xff1a;stack是一种先进后出&#xff08;First In Last Out&#xff0c;FILO&#xff09;的数据结构&#xff0c;它只有一个出口 栈中只有顶端的元素才可以被外界调用&#xff0c;因此栈不允许有遍历行…

使用C#的winform控制数据库实例服务的运行状态

一、得到sqlserver的实例名 二、引用对应的程序集和命名空间 using System.ServiceProcess; C#操作服务要用的类 ServiceController 声明类 private ServiceController serviceController new ServiceController("MSSQLSERVER"); 三、判断服务状态 serviceCon…

上证指数000001行情数据API接口

# 测试&#xff1a;返回不超过10条数据&#xff08;2年历史&#xff09; https://tsanghi.com/api/fin/index/CHN/daily?tokendemo&ticker000001&order2Python示例 import requestsurl f"https://tsanghi.com/api/fin/index/CHN/daily?tokendemo&ticker000…

2024届 C++ 刷题 笔试强训 Day 02

选择题 01 使用 printf 函数打印一个 double 类型的数据&#xff0c;要求&#xff1a;输出为 10 进制&#xff0c;输出左对齐 30 个字符&#xff0c;4 位精度。以下哪个选项是正确的&#xff1f; A %-30.4e B %4.30e C %-30.4f D %-4.30f 题目解析&#xff1a; 本题考察格式化…

要将镜像推送到GitLab的Registry中的步骤

1、通过cli 模式登录gitlab &#xff08;命令行模式&#xff09; docker login git.asc-dede.de Username: haiyang Password: Login Succeeded 2、查看我的本地镜像&#xff1a; 3&#xff0c;推送镜像apollo_core到对应的gitlab项目的Registry 中 docker push registry.gi…

「Linux系列」Linux简介及常见的Linux系统

文章目录 一、Linux简介二、常见的Linux系统三、Linux 应用领域四、Linux对比Windows五、相关链接 一、Linux简介 Linux是一种自由和开放源代码的类Unix操作系统&#xff0c;它最初是作为Unix操作系统的替代品而开发的。Linux操作系统的内核由林纳斯托瓦兹在1991年首次发布&am…

Sunday 算法介绍

1. Sunday 算法介绍 「Sunday 算法」 是一种在字符串中查找子串的算法&#xff0c;是 Daniel M.Sunday 于1990年提出的字符串模式匹配算法。 Sunday 算法思想&#xff1a;对于给定文本串 T 与模式串 p&#xff0c;先对模式串 p 进行预处理。然后在匹配的过程中&#xff0c;当发…

UE5.1 iClone8 正确导入角色骨骼与动作

使用iClone8插件Auto Setup 附录下载链接 里面有两个文件夹,使用Auto Setup C:\Program Files\Reallusion\Shared Plugins 在UE内新建Plugins,把插件复制进去 在工具栏出现这三个人物的图标就安装成功了 iClone选择角色,导入动作 选择导出FBX UE内直接导入 会出现是否启动插件…

23.2 微服务SpringCloud基础实战(❤❤❤)

23.2 微服务基础实战 1. SpringCloud简介2. 项目整体设计3. 实战:新建多模块项目3.1 项目基础架构3.2 准备工作:删除src文件夹3.3 新建Maven子模块:课程服务模块3.4 新建课程列表模块3.5 新建课程价格模块3.6 架构总览4. 课程列表模块业务开发4.1 pom依赖引入4.2 pom组件引入4.…

在CentOS 7上快速安装配置Nginx

步骤 1: 安装EPEL存储库 EPEL&#xff08;Extra Packages for Enterprise Linux&#xff09;存储库提供了许多CentOS官方存储库中未包含的额外软件包。首先&#xff0c;我们需要安装EPEL存储库&#xff1a; sudo yum install epel-release步骤 2: 安装Nginx 通过安装好的EPE…

全量知识系统 因子分析+在线处理+实时库+生存拓扑控制+跨语言 的设想及百度AI答问 之3

Q12. 进一步&#xff0c;在因子分析在线处理生存拓扑控制的基础上&#xff0c;三种实时表的在线处理程序由 三个不同程序语言的代理类来代理&#xff0c;以分离不同目标机的编程语言环境的影响。&#xff08;因为&#xff0c;这里要限制 目标编程语言中的数据类型以简化实现过程…

docker的常用指令

docker的常用指令 从docker镜像仓库&#xff0c;搜索所有和mysql有关的镜像 docker search mysql 从docker仓库拉取mysql docker pull mysql这里的mysql是指使用search搜索出来的所有容器的NAME 如果和我一样遇到以下问题&#xff1a; 我可以登录阿里云的官网&#xff0c;找…

基于springboot+vue实现计算机等级考试报名系统项目【项目源码+论文说明】计算机毕业设计

基于springbootvue实现计算机等级考试报名演示 摘要 在进入二十一世纪之后&#xff0c;网络发展越来越迅速&#xff0c;人们的很多生活习惯与消费习惯都随之发生了改变&#xff0c;计算机技术为人们的生活带来了很多的便利。而计算机技术是我国各个教育阶段中的一门必修课程&a…