解决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);
	}

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

汽车制造业供应商管理会面临哪些问题?要如何解决?

汽车行业的供应链是及其复杂的&#xff0c;并且呈全球化分布&#xff0c;企业在知识产权方面的优势很可能是阶段性的。企业需要持续保持领先&#xff0c;将面临巨大的挑战&#xff0c;尽快地将产品推向市场是保持领先的唯一途径。然而&#xff0c;如果没有正确的方式去实现安全…

C++基础复习自用--vector

vector底层实现以及动态扩容 array是静态分配&#xff0c;后期无法改变。如果程序需要更大的array只能重新分配一个地址然后把旧空间里的复制过来。 vector是动态分配&#xff0c;他对大小可以合理控并且重新分配是数据移动效率高 关于查找删除插入 array和vector都是连续分…

20 OpenCV像素重映

文章目录 像素重映remap 重映算子代码示例 像素重映 简单点说就是把输入图像中各个像素按照一定的规则映射到另外一张图像的对应位置上去&#xff0c;形成一张新的图像。 g(x,y)是重映射之后的图像&#xff0c;h(x,y)是功能函数&#xff0c;f是源图像 remap 重映算子 Remap…

单例模式与原型模式的深度探索之旅

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自&#xff1a;设计模式深度解析&#xff1a;单例模式与原型模式的深度探索之…

鸿蒙Harmony应用开发—ArkTS声明式开发(画布组件:Canvas)

提供画布组件&#xff0c;用于自定义绘制图形。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 不支持。 接口 Canvas(context?: CanvasRenderingContext2D) 从API version 9开始&…

AI实景无人直播系统源代码开发部署流程

一、 开发流程分享 需求分析&#xff1a;与客户明确需求&#xff0c;确定无人直播系统的功能和特性。 设计系统架构&#xff1a;根据需求分析的结果&#xff0c;设计系统的架构&#xff0c;包括前后端的组成和各个模块的功能划分。 编写源代码&#xff1a;根据系统架构设计&a…

一款基于 SpringCloud 开发的AI聊天机器人系统,已对接GPT-4.0,非常强大

简介 一个基于SpringCloud的Chatgpt机器人&#xff0c;已对接GPT-3.5、GPT-4.0、百度文心一言、stable diffusion AI绘图、Midjourney绘图。用户可以在界面上与聊天机器人进行对话&#xff0c;聊天机器人会根据用户的输入自动生成回复。同时也支持画图&#xff0c;用户输入文本…

解决Vue发布后新旧包切换点击路由报错问题

错误截图 解决方案&#xff1a; 1.修改vue.config.js output: {// filename: js/[name].[chunkhash].${timeUpdate}.js,// chunkFilename: js/[id].[chunkhash].${timeUpdate}.jsfilename: [name].[contenthash].js,chunkFilename: [name].[contenthash].chunk.js}2.路由中添…

MRP(VBA系列):1.检查生产计划中的设备是否有BOM

在所有运行的前面&#xff0c;我需要先做一个检查&#xff1a;生产计划中的设备是否有BOM&#xff0c;如果有的设备没有BOM&#xff0c;我不希望程序继续&#xff01; Tips&#xff1a;所有代码都是为目前任职公司编写&#xff0c;极大概率不适合其他公司&#xff0c;在这里发…

C++ 11

目录 1. 统一的列表初始化 1.1 &#xff5b;&#xff5d;初始化 1.2 std::initializer_list 2. decltype 3. 右值引用和移动语义 3.1 左值引用和右值引用 3.2 左值引用与右值引用比较 3.3 右值引用使用场景和意义 3.4 右值引用引用左值及其一些更深入的使用场景分析 3…

长安链开源社区发布2023年度长安链优秀应用案例

1月27日结束的“长安链发布三周年庆暨生态年会”上&#xff0c;在国家区块链技术创新中心的指导下&#xff0c;长安链开源社区联合长安链生态联盟正式发布2023年度长安链行业示范案例、领域精品案例及特色创新案例。 本次评选面向2023年度应用长安链上线并取得应用成效的案例&…

国内ip地址范围多大?ip地址容易切换吗?

随着互联网的蓬勃发展&#xff0c;IP地址成为连接每一台设备和服务的纽带。对于一个庞大的网络市场而言&#xff0c;了解国内IP地址的范围及其背后的技术细节显得尤为重要。虎观代理小二将深入剖析国内IP地址的范围&#xff0c;带您走进这个庞大而复杂的网络世界。 什么是IP地…

BlenderGIS 快捷键E 报错问题 Report: Error

最新版的Blender4.0 对于 BlenderGIS2.28版本的插件不兼容&#xff0c;BlenderGIS2.28兼容Blender3.6.9及之前的版本&#xff0c;应该是BlenderGIS插件很久没更新了导致的。

Pytorch详细应用基础(全)

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 1.安装pytorch以及anaconda配置 尽量保持默认的通道&#xff0c;每次写指令把镜像地址写上就行。 defaults优先级是最低的&#…

【LeetCode 算法刷题笔记-路径篇】

1.0112. 路径总和 1.1 题目大意 描述&#xff1a;给定一个二叉树的根节点 root 和一个值 targetSum。 要求&#xff1a;判断该树中是否存在从根节点到叶子节点的路径&#xff0c;使得这条路径上所有节点值相加等于 targetSum。如果存在&#xff0c;返回 True&#xff1b;否则…

GPT-SoVITS语音合成服务器部署,可远程访问(全部代码和详细部署步骤)

GPT-SoVITS 是一个开源项目&#xff0c;它使用大约一分钟的语音数据便可以训练出一个优秀的TTS模型。 项目的核心技术是 Zero-shot TTS 和 Few-shot TTS。 Zero-shot TTS 可以让用户输入5秒钟的语音样本并立即体验转换后的语音&#xff0c;而 Few-shot TTS 则可以通过使用仅一…

《论文阅读》EmpDG:多分辨率交互式移情对话生成 COLING 2020

《论文阅读》EmpDG:多分辨率交互式移情对话生成 COLING 2020 前言简介模型架构共情生成器交互鉴别器损失函数前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来的是《EmpDG: Multi-resolution Interactive E…

Java 面向对象编程进阶三(封装)

目录 封装(encapsulation) 封装的作用和含义 封装的实现—使用访问控制符 public 访问权限修饰符&#xff1a; protected 访问权限修饰符&#xff1a; 默认访问权限修饰符 private 访问权限修饰符 封装的一些处理 封装(encapsulation) 封装是面向对象三大特征之一。对于…

蓝牙耳机哪个品牌最好?2024口碑绝佳蓝牙耳机推荐分享

​随着生活水平的不断提高&#xff0c;蓝牙耳机已成为我们生活中不可或缺的一部分。它为我们提供了极大的便利&#xff0c;无论是在听音乐、观看视频还是进行电话通话时。面对市场上种类繁多的蓝牙耳机&#xff0c;我为你整理了几款表现很不错的耳机产品&#xff0c;希望能帮助…

亚信安慧AntDB数据库分布式架构剖析之snapshot receiver进程

本文主要介绍亚信安慧AntDB数据库的分布式架构下的特有进程之snapshot receiver的设计&#xff0c;这也是分布式架构的核心进程之一。 进程简介 该进程的作用从逻辑上解释包含两个方面&#xff1a; 同步快照&#xff0c;并且是作为通信的client端存在 同步事务号&#xff0c;…