Web开发中页面出现乱码的解决(Java Web学习笔记:需在编译时用 -encoding utf-8)

目录

  • 1 引言
  • 2 乱码表现、原因分析及解决
    • 2.1 乱码表现
    • 2.2 原因分析
    • 2.3 解决
  • 3 总结

1 引言

Web开发的页面出现了乱码,一直不愿写出来,因为网上的解决方案太多了。但本文的所说的页面乱码问题,则是与网上的大多数解决方案不一样,使用通常的方法解决不了。这些通常的解决方法包括:

  1. 在出现乱码的jsp页面源文件的头部写:<% request.setCharacterEncoding("utf-8"); %>
  2. 在出现乱码的jsp页面源文件中的<head>标签中写入:
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />

于是,本博文的写作动力就有了。

2 乱码表现、原因分析及解决

2.1 乱码表现

本项目是基于Struts 2构建的,struts.xml中涉及到乱码的action为getBooks,内容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd">
<struts><package name="teststruts" extends="struts-default" namespace="/"><action name="login" class="com.rob.teststruts.action.LoginAction"><result name="error">/error.jsp</result><result name="success">/welcome.jsp</result></action><action name="getBooks" class="com.rob.teststruts.action.GetBooksAction"><result name="login">/loginForm.jsp</result><result name="success">/showBook.jsp</result></action></package>
</struts>

展示页面showBook.jsp的内容如下:

<%@ page language="java" pageEncoding="UTF-8" errorPage="" %>
<%@ page import="java.util.*, com.opensymphony.xwork2.util.*" %>
<!DOCTYPE html>
<html><head><title>作者李刚的图书</title></head><body><table border="1" width="360"><caption>作者李刚的图书</caption><%// 获取封装输出信息的ValueStack对象ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack");String[] books = (String[])vs.findValue("books");for (String book: books) {%><tr><td>书名:</td><td><%=book%></td></tr><%}%></table></body>
</html>

项目部署、启动Tomcat后,出现如下乱码:
乱码表现

2.2 原因分析

利用引言中介绍的两种方法无法解决该问题,乱码仍然出现。忽然想到,BookService.java源文件本身是UTF-8编码,在Windows cmd下编译时没指定编码方式,会默认GBK编码,但对该文件的编译缺没报错。若一个UTF-8编码的java源文件中的注释中包含汉字,则编译时会提示如下:
在这里插入图片描述
所以,对源文件BookService.java来说,其中只有字符串中有汉字,没提示报错。最大的原因在于该文件编译时没指定utf-8编码。BookService.java的内容如下:

package com.rob.teststruts.service;public class BookService {private String[] books = new String[] {"疯狂Java讲义","疯狂Android讲义","轻量级Java EE 企业应用实战","疯狂Ajax讲义","疯狂XML讲义",};// business logic methodpublic String[] getLeeBooks(){return books;}
}

2.3 解决

对源文件BookService.java按如下方式编译,指定编码方式:

javac -encoding utf-8 -d classes src\com\rob\teststruts\service\BookService.java

用生成的BookService.class文件替换部署环境中的旧的BookService.class,重启Tomcat,访问网址,成功解决乱码,如下图:
在这里插入图片描述

3 总结

这是个共性问题,只要是基于Java Web开发的项目,只要utf-8编码的源文件编译时没指定utf-8编码方式,都会遇到这个乱码问题。该问题用通常的乱码解决方法行不通。这里愿意与大家交流,有问题请大家私信。

大家注意,只要源文件是utf-8编码格式的,最好在编译时也指定utf-8编码方式。

本文例子选自书籍《Struts 2.x 权威指南》1第29页。书中代码未包含import部分、package部分,对编译过程也没提到,大家在阅读时要注意自行补上。实际上,有一定基础的人,都可以毫无困难地复现书中例子。在此,感谢作者提供的例子,虽然该例子没考虑到编码问题,这不是作者的问题。


  1. 李刚. Struts 2.x 权威指南. 第3版. 北京: 电子工业出版社, 2012.10: 29. ↩︎

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

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

相关文章

HarmonyOS:@LocalBuilder装饰器: 维持组件父子关系

一、前言 当开发者使用Builder做引用数据传递时&#xff0c;会考虑组件的父子关系&#xff0c;使用了bind(this)之后&#xff0c;组件的父子关系和状态管理的父子关系并不一致。为了解决组件的父子关系和状态管理的父子关系保持一致的问题&#xff0c;引入LocalBuilder装饰器。…

初学stm32 --- DAC输出三角波和正弦波

输出三角波实验简要&#xff1a; 1&#xff0c;功能描述 通过DAC1通道1(PA4)输出三角波&#xff0c;然后通过DS100示波器查看波形 2&#xff0c;关闭通道1触发(即自动) TEN1位置0 3&#xff0c;关闭输出缓冲 BOFF1位置1 4&#xff0c;使用12位右对齐模式 将数字量写入DAC_…

【opencv】第7章 图像变换

7.1 基 于OpenCV 的 边 缘 检 测 本节中&#xff0c;我们将一起学习OpenCV 中边缘检测的各种算子和滤波器——Canny 算子、Sobel 算 子 、Laplacian 算子以及Scharr 滤波器。 7.1.1 边缘检测的一般步骤 在具体介绍之前&#xff0c;先来一起看看边缘检测的一般步骤。 1.【第…

【Python】Python与C的区别

文章目录 语句结束符代码块表示变量声明函数定义注释格式Python的标识符数据输入input()函数数据输出print()函数 语句结束符 C 语言 C 语言中每条语句必须以分号;结束。例如&#xff0c;int a 10;、printf("Hello, World!");。分号是语句的一部分&#xff0c;用于…

web-app uniapp监测屏幕大小的变化对数组一行展示数据作相应处理

web-app uniapp监测屏幕大小的变化对数组一行展示数据作相应处理 1.uni.getSystemInfoSync().screenWidth; 获取屏幕宽度 2.uni.onWindowResize&#xff08;&#xff09; 实时监测屏幕宽度变化 3.根据宽度的大小拿到每行要展示的数量itemsPerRow 4.为了确保样式能够根据 items…

Idea-离线安装SonarLint插件地址

地址&#xff1a; SonarQube for IDE - IntelliJ IDEs Plugin | Marketplace 选择Install Plugin from Disk..&#xff0c;选中下载好的插件&#xff0c;然后重启idea

数据结构与算法之二叉树: LeetCode 637. 二叉树的层平均值 (Ts版)

二叉树的层平均值 https://leetcode.cn/problems/average-of-levels-in-binary-tree/description/ 描述 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值与实际答案相差 1 0 − 5 10^{-5} 10−5 以内的答案可以被接受 示例 1 输入&#xff1a;root…

MySQL表的增删改查(基础)-下篇

修改 真正在改硬盘了&#xff0c;这样的修改是“持久有效”。一定要确保&#xff0c;update的修改是改对了&#xff0c;改出问题来就麻烦。指定update的时候&#xff0c;如果当前不指定任何条件&#xff0c;就会针对所有的行都能生效&#xff01; (把整个表都给改了)。 案例 --…

项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(五)

文章目录 一、学生管理模块功能实现1、添加学生功能实现1.1 页面设计1.2 前端功能实现1.3 后端功能实现1.4 效果展示2、学生管理功能实现2.1 页面设计2.2 前端功能实现2.3 后端功能实现2.3.1 后端查询接口实现2.3.2 后端编辑接口实现2.3.3 后端删除接口实现2.4 效果展示二、代码…

使用 WPF 和 C# 绘制图形

绘图困难 此示例展示了如何在 WPF 和 C# 中绘制图形。绘制图形总是很棘手&#xff0c;因为您通常需要在至少两个不同的坐标系中工作。首先&#xff0c;您要为图形使用世界坐标。例如&#xff0c;您可能希望 X 值的范围为 2000 年至 2020 年&#xff0c;Y 值的范围为 10,000 美元…

3D滤波器处理遥感tif图像

import cv2 import numpy as np from osgeo import gdal# 定义 Gabor 滤波器的参数 kSize 31 # 滤波器核的大小 g_sigma 3.0 # 高斯包络的标准差 g_theta np.pi / 4 # Gabor 函数的方向 g_lambda 10.0 # 正弦波的波长 g_gamma 0.5 # 空间纵横比 g_psi np.pi / 2 # …

JuiceFS 2024:开源与商业并进,迈向 AI 原生时代

即将过去的 2024 年&#xff0c;是 JuiceFS 开源版本推出的第 4 年&#xff0c;企业版的第 8 个年头。回顾过去这一年&#xff0c;JuiceFS 社区版依旧保持着快速成长的势头&#xff0c;GitHub 星标突破 11.1K&#xff0c;各项使用指标增长均超过 100%&#xff0c;其中文件系统总…

高可用虚拟IP-keepalived

个人觉得华为云这个文档十分详细&#xff1a;使用虚拟IP和Keepalived搭建高可用Web集群_弹性云服务器 ECS_华为云 应用场景&#xff1a;虚拟IP技术。虚拟IP&#xff0c;就是一个未分配给真实主机的IP&#xff0c;也就是说对外提供数据库服务器的主机除了有一个真实IP外还有一个…

支付宝租赁小程序提升租赁行业效率与用户体验

内容概要 在当今数字化的世界里&#xff0c;支付宝租赁小程序的出现构建了一种新的租赁模式&#xff0c;使得用户在使用过程中体验更加流畅。想象一下&#xff0c;你在寻找租赁服务时&#xff0c;不再需要繁琐的流程和冗长的等待&#xff0c;只需通过手机轻松点击几下&#xf…

python异常机制

异常是什么&#xff1f; 软件程序在运行过程中&#xff0c;非常可能遇到刚刚提到的这些问题&#xff0c;我们称之为异常&#xff0c;英文是Exception&#xff0c;意思是例外。遇到这些例外情况&#xff0c;或者交异常&#xff0c;我们怎么让写的程序做出合理的处理&#xff0c…

Git撤销指定commit并更新远端仓库

Git撤销指定commit并更新远端仓库 一、撤销指定commit 1.首先执行git log 命令&#xff0c;查看git历史提交以及commit信息&#xff1a; 由于需要脱敏&#xff0c;所以截图可能看得马赛克比较多&#xff0c;需要关注的就是上面的commit后跟的id&#xff0c;以及HEAD当前指定…

【opencv】第8章 图像轮廓与图像分割修复

8.1 查找并绘制轮廓 一个轮廓一般对应一系列的点&#xff0c;也就是图像中的一条曲线。其表示方法可能 根据不同的情况而有所不同。在OpenCV 中&#xff0c;可以用findContours()函数从二值图 像中查找轮廓 8.1.1 寻找轮廓&#xff1a; findContours() 函数 findContours) 函…

.NET Core NPOI 导出图片到Excel指定单元格并自适应宽度

NPOI&#xff1a;支持xlsx&#xff0c;.xls&#xff0c;版本>2.5.3 XLS&#xff1a;HSSFWorkbook&#xff0c;主要前缀HSS&#xff0c; XLSX&#xff1a;XSSFWorkbook&#xff0c;主要前缀XSS&#xff0c;using NPOI.XSSF.UserModel; 1、导出Excel添加图片效果&#xff0…

SQL分类与数据类型整理

SQL分类与数据类型整理 SQL分类数据类型数值型整数型小数型布尔型字符串型日期型二进制型其他类型&#xff08;空间数据类型&#xff09; 总结 SQL&#xff0c;全称为Structured Query Language&#xff08;结构化查询语言&#xff09;&#xff0c;是一种高度专业化的计算机语言…

基于深度学习算法的AI图像视觉检测

基于人工智能和深度学习方法的现代计算机视觉技术在过去10年里取得了显著进展。如今&#xff0c;它被广泛用于图像分类、人脸识别、图像中物体的识别等。那么什么是深度学习&#xff1f;深度学习是如何应用在视觉检测上的呢&#xff1f; 什么是深度学习&#xff1f; 深度学习是…