JSP中 contentType 和 pageEncoding 的差异<引用>

本文详细解释了JSP页面中contentType和pageEncoding的区别及作用。contentType用于定义客户端浏览器解析网页内容的编码格式,pageEncoding则决定了JSP源文件的编码方式。文章深入探讨了这两种编码设置在JSP编译和运行过程中的具体应用。
contentType — 指定的是JSP页最终 Browser(客户端)所见到的网页内容的编码.
就是 Mozilla的 Character encoding, 或者是 IE6的 encoding. 例如 JSPtw Forum 用的contentType就是 Big5.

pageEncoding — 指定JSP编写时所用的编码
如果你的是 WIN98, 或 ME 的NOTEPAD记事本编写JSP, 就一定是常用的是Big5 或 gb2312, 如果是用 WIN2k winXP的
NOTEPAD时, SAVE时就可以选择不同的编,码, 包括 ANSI(BIG5/GB2312)或 UTF-8 或 UNIONCODE(估是 UCS 16).

因为 JSP要经过 两次的”编码”,
第一阶段会用 pageEncoding, 第二阶段会用 utf-8 至utf-8, 第三阶段就是由TOMCAT出来的网页, 用的是contentType.

阶段一是 JSPC的 JSP至JAVA(.java)原码的”翻译”, 它会跟据 pageEncoding 的设定读取JSP. 结果是 由指定的
pageEncoding(utf-8,Big5,gb2312)的JSP 翻译成统一的utf-8 JAVA原码(.java). 如果pageEncoding设定错了, 或没设定
(预设 ISO8859-1), 出来的 在这个阶段 就已是中文乱码.

阶段二是由 JAVAC的JAVA原码至JAVA BYTECODE的编译. 不论JSP的编写时是用(utf-8,Big5,gb2312),经过阶段一的结果全
都是utf-8的ENCODING的JAVA原码.
JAVAC用 utf-8的ENCODING读取AVA原码, 编译成字符串是 utf-8 ENCODING的二进制码(.class). 这是 JAVA VIRTUAL MACNHINE
对常数字符串在 二进制码(JAVA BYTECODE)内表逹的规范.

阶段三是TOMCAT(或其的application container)加载和执行阶段二得来的JAVA二进制码, 输出的结果( 也就是BROWSER(客户端))
见到的. 这时一早隐藏在阶段一和二的参数contentType, 就发挥了功效. (见 阶段一的 ).

response.setContentType(”text/html; charset=utf-8″);

出来的可以是 utf-8, Big5, gb2312, 看的就是JSP ? contentType的设定.



还有, pageEncoding 和contentType的预设都是 ISO8859-1. 而随便设定了其中一个, 另一个就跟着一样了(TOMCAT4.1.27是如此).
但这不是绝对, 看的各自JSPC的处理方式. 而pageEncoding不等于contentType, 更有利亚洲区的文字 CJKV系JSP网页的开发和展示,
(例pageEncoding=Big5 不等于 contentType=utf-8).
09-23
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>泰信应用商城管理系统</title> <link rel="stylesheet" type="text/css" href="css/style.css"> <style> /* 全局样式 */ * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Microsoft YaHei', Arial, sans-serif; } body { background-color: #f5f7fa; color: #333; } /* 顶部导航栏 */ .header { background: linear-gradient(135deg, #0066cc, #004080); color: white; padding: 15px 30px; display: flex; justify-content: space-between; align-items: center; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); position: fixed; width: 100%; top: 0; z-index: 1000; } .header h1 { font-size: 22px; font-weight: 500; } .user-info { font-size: 14px; } .user-info a { color: white; text-decoration: none; margin-left: 10px; padding: 5px 10px; border-radius: 4px; transition: background 0.3s; } .user-info a:hover { background: rgba(255, 255, 255, 0.2); } /* 主容器 */ .container { display: flex; margin-top: 60px; min-height: calc(100vh - 60px); } /* 左侧菜单 */ .nav { width: 220px; background: white; box-shadow: 2px 0 10px rgba(0, 0, 0, 0.05); position: fixed; height: 100%; padding-top: 20px; overflow-y: auto; } .nav ul { list-style: none; } .nav li { border-bottom: 1px solid #f0f0f0; } .nav a { display: block; padding: 15px 25px; color: #555; text-decoration: none; transition: all 0.3s; font-size: 14px; } .nav a:hover { background: #f8f9fa; color: #0066cc; border-left: 3px solid #0066cc; padding-left: 22px; } .nav a.active { background: #e6f2ff; color: #0066cc; border-left: 3px solid #0066cc; font-weight: 500; } /* 右侧内容区 */ .content { flex: 1; margin-left: 220px; padding: 30px; background: white; min-height: calc(100vh - 60px); box-shadow: -2px 0 10px rgba(0, 0, 0, 0.05); } .content h2 { color: #0066cc; margin-bottom: 20px; font-weight: 500; font-size: 24px; padding-bottom: 15px; border-bottom: 1px solid #eee; } .content p { line-height: 1.6; color: #666; } /* 响应式设计 */ @media (max-width: 768px) { .nav { width: 180px; } .content { margin-left: 180px; padding: 20px; } } </style> </head> <body> <!-- 顶部导航栏 --> <div class="header"> <h1>泰信应用商城管理系统</h1> <div class="user-info"> 欢迎, <%= session.getAttribute("username") %> | <a href="login.jsp">退出</a> </div> </div> <!-- 主容器 --> <div class="container"> <!-- 左侧菜单 --> <div class="nav"> <ul> <li><a href="provider.jsp" class="active">应用提供商</a></li> <li><a href="category.jsp">应用分类管理</a></li> <li><a href="app.jsp">应用新加</a></li> <li><a href="upgrade.jsp">应用升级</a></li> <li><a href="signature.jsp">应用签名</a></li> </ul> </div> <!-- 右侧内容区 --> <div class="content"> <h2>欢迎使用泰信应用商城管理系统</h2> <p>请从左侧导航栏选择您要操作的功能模块。</p> <!-- 可以在这里添加仪表盘内容 --> <div style="margin-top: 30px; padding: 20px; background: #f8f9fa; border-radius: 6px;"> <h3 style="color: #555; margin-bottom: 15px;">系统概览</h3> <p>当前系统版本:v1.0.0</p> <p>最后登录时间:<%= new java.util.Date() %></p> </div> </div> </div> </body> </html> 修改代码 还是左侧左侧菜单中 一行一行显示 不要隐藏
09-17
``` <%@ page language="java" import="test_package.*" import="java.util.*" import="java.sql.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <link rel="stylesheet" href="../style/certificate.css"> </head> <body> <% List<test_information> list = (List<test_information>)session.getAttribute("date"); %> <div class = "tit">查看凭证</div> <div class = "Ribbon"> <table> <tr> <td style="white-space: nowrap;"> <!-- 按钮1 --> <input type="button" value="传统记账" class="R_button"> <!-- 表单2 - 导出 --> <form action="" class="inline-form"> <input type="submit" value="导出" class="R_button"> </form> <!-- 表单3 - 打印 --> <form id="printForm" action="white.jsp" method="post" class="inline-form"> <input type="hidden" id="selectedTelsHiddenField" name="telsToPrint"> <input type="submit" value="打印" onclick="return submitSelectedTels();" class="R_button"> </form> <!-- 按钮4 --> <input type="button" value="模板" onclick="template.show()" class="R_button"> </td> <td> <input type = "text" name = "search_name"> <input type = "button" value = "搜索"> </td> </tr> </table> </div> <div class="body"> <table class="cer" > <% for(test_information news:list) { %> <!-- 将每条记录分为两列展示 --> <tr> <td class="zero_box"> <input type="checkbox" name="selectedTels" value="<%=news.getTel()%>" onchange="updateSelection(this)" style = "zoom : 300%"> </td> <td class="first_box"> <%= news.getMaterial() %> <br/> <%= news.getStart_time() %> </td> <td class="second_box"> <%= news.getWashing_method() %> <br/> <%= news.getPrice() %> </td> <td class="third_box"> <form action =""> <input name = "id" value ="<%=news.getTel() %>" type = "hidden"> <input type ="submit" class = "func_button" value = "税费" ><br> <input type ="submit" class = "func_button" value = "查看凭证" ><br> <input type ="submit" class = "func_button" value = "删除凭证" > </form> <br/> </td> </tr> <% } %> </table> <div style="display:none;" id="printArea"></div> </div> <script> let selectedTelsArray = []; function updateSelection(el) { if (el.checked && !selectedTelsArray.includes(el.value)) { // 如果当前被选中,则加入集合 selectedTelsArray.push(el.value); } else { // 否则移除该元素 const indexToRemove = selectedTelsArray.indexOf(el.value); if (indexToRemove !== -1) { selectedTelsArray.splice(indexToRemove, 1); } } console.log(selectedTelsArray); // 输出调试信息 } // 提交之前设置 hidden field 的值 function submitSelectedTels() { document.getElementById('selectedTelsHiddenField').value = JSON.stringify(selectedTelsArray); return true; } </script> </body> </html>```为什么搜索框搜索按钮未对齐
03-18
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值