tomcat6的include页面和传参的中文问题

本文介绍了解决Tomcat服务器上中文乱码的方法,包括设置JSP页面编码、配置过滤器、修改server.xml文件等步骤,确保项目中的中文字符能够正确显示。

在include的页面开头中加入(注意utf-8区分大小写,要和主页面相同)

top.jsp 代码
java 代码
  1. <%@page import="java.util.*" contentType="text/html;charset=utf-8" %>  

在项目的web.xml中加个过滤器

web.xml 代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns="http://java.sun.com/xml/ns/j2ee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"  
  5.     version="2.4">  
  6.     <jsp-config>  
  7.         <jsp-property-group>      
  8.             <description>         
  9.                 Special property group for JSP Configuration JSP example.      
  10.             </description>      
  11.             <display-name>JSPConfiguration</display-name>      
  12.             <url-pattern>*.jsp</url-pattern>      
  13.             <el-ignored>true</el-ignored>      
  14.             <page-encoding>utf-8</page-encoding>      
  15.             <scripting-invalid>false</scripting-invalid>      
  16.             <include-prelude></include-prelude>      
  17.             <include-coda></include-coda>       
  18.                
  19.         </jsp-property-group>  
  20.     </jsp-config>  
  21. </web-app>  


tomcat6页面之间传的参数的中文问题,在servel.xml中找到下面这行,加入 URIEncoding="UTF-8"   (这里大写无所谓,注意不是URL而是URI)

server.xml 代码

xml 代码
  1. <Connector port="8080" protocol="HTTP/1.1"    
  2.            connectionTimeout="20000"    
  3.            redirectPort="8443" URIEncoding="UTF-8"/>  
这是一个非常好的问题!你提到了 `.tsx` 文件 `.jsp` 文件的对比,这实际上是在比较 **现代前端框架(React + TypeScript)** 与 **传统服务端渲染技术(Java Server Pages)** 的根本差异。 我们来从多个维度详细解析: > ✅ `.tsx` 是基于 **客户端组件化架构** 的现代 UI 开发方式 > ❌ `.jsp` 是基于 **服务端模板渲染** 的旧式 Web 开发方式 --- ## 🔍 一、基本定义 | 文件类型 | 全称 | 所属技术栈 | 运行环境 | |---------|------|-----------|----------| | `.tsx` | TypeScript + JSX | React / Vue / 前端框架 | 浏览器(客户端) | | `.jsp` | JavaServer Pages | Java EE / Spring MVC | 服务器(JVM) | --- ## 🧩 二、核心区别详解 ### 1. ✅ 渲染位置不同(最关键区别) | 维度 | `.tsx` (React + TypeScript) | `.jsp` | |------|-------------------------------|--------| | **渲染位置** | 客户端浏览器(Client-side Rendering) | 服务器端(Server-side Rendering) | | **过程** | 浏览器下载 JS → 动态生成 DOM | 服务器执行 Java 代码 → 输出 HTML 字符串 → 发送给浏览器 | | **示例** | `<ChatMessage sender="user" />` 在浏览器中被渲染成 HTML | `<% out.println("Hello"); %>` 在服务器上输出 HTML 片段 | ```tsx // .tsx - 在浏览器运行 return <div>Hello {name}</div>; ``` ```jsp <!-- .jsp - 在服务器运行 --> <div>Hello <%= name %></div> ``` > ⚠️ 虽然写法相似,但执行时机完全不同! --- ### 2. ✅ 语言本质不同 | `.tsx` | `.jsp` | |-------|--------| | 实际是 **TypeScript 代码**,使用 JSX 语法扩展 | 实际是 **Java 代码嵌入 HTML** | | 编译为 JavaScript 后在浏览器执行 | 编译为 Servlet(Java 类)在 Tomcat/Jetty 中运行 | ```tsx // .tsx: 使用现代 JS/TS 语法 const [count, setCount] = useState(0); ``` ```jsp <!-- .jsp: 使用脚本片段 --> <% String user = request.getParameter("user"); if (user != null) { %> <p>Welcome <%= user %></p> <% } %> ``` > 💡 `.jsp` 本质上是“带 Java 逻辑的 HTML 模板”,而 `.tsx` 是“带 HTML 结构的编程语言”。 --- ### 3. ✅ 架构模式不同 | `.tsx`(React) | `.jsp` | |----------------|--------| | **前后端分离**:前端独立部署(静态资源),通过 API 与后端通信 | **前后端耦合**:HTML Java 逻辑混在一起 | | RESTful / GraphQL API 交互 | 直接访问数据库或业务逻辑层 | | 可搭配任意后端(Node.js、Spring Boot、Python 等) | 必须运行在 Java 容器中(Tomcat、Jetty) | --- ### 4. ✅ 组件化 vs 模板包含 | `.tsx` | `.jsp` | |-------|--------| | 支持真正的 **组件化开发**:<br>`<Header />`, `<ChatBubble />` 可复用、可传参、可组合 | 使用 `<%@ include %>` 或 JSTL 导入片段,无状态管理 | | 支持 props、state、hooks、context 等高级特性 | 只能通过 `request.setAttribute()` 传递数据 | ```tsx // .tsx - 组件化 <ChatMessage sender="user" text="你好" /> ``` ```jsp <!-- .jsp - 模板包含 --> <jsp:include page="header.jsp" /> <c:forEach items="${messages}" var="msg"> <div class="${msg.sender}">${msg.text}</div> </c:forEach> ``` --- ### 5. ✅ 类型安全 vs 动态弱类型 | `.tsx` | `.jsp` | |-------|--------| | 使用 **TypeScript**,支持类型检查、自动补全、编译时错误检测 | 使用 Java 表达式,但变量作用域混乱,容易出错 | | IDE 支持强大(VS Code / WebStorm) | 需要 Eclipse / IntelliJ IDEA for Java EE | ```ts type Message = { id: number; sender: 'user' | 'ai'; text: string; }; // 编译时报错:sender 必须是 'user' 或 'ai' ``` ```jsp <!-- .jsp: 运行时才发现错误 --> <%= message.getSender().toUpperCase() %> <!-- 如果 message 为 null?--> ``` --- ### 6. ✅ 开发体验与生态 | 方面 | `.tsx`(现代前端) | `.jsp`(传统后端模板) | |------|--------------------|------------------------| | 热重载(HMR) | ✅ 支持,修改即看效果 | ❌ 不支持,需重启服务器 | | 单元测试 | ✅ Jest / Vitest / React Testing Library | ❌ 困难,依赖容器 | | 移动端适配 | ✅ 响应式设计 + PWA | ❌ 主要面向桌面浏览器 | | SEO | 需配合 SSR(Next.js) | 天然友好(服务器直出 HTML) | | 学习曲线 | 较高(需掌握 JS/TS、构建工具、状态管理) | 较低(会 Java 就能写) | --- ## 📊 总结对比表 | 特性 | `.tsx`(React + TS) | `.jsp` | |------|----------------------|--------| | 运行环境 | 浏览器(客户端) | 服务器(JVM) | | 渲染方式 | 客户端渲染(CSR)或同构渲染 | 服务端渲染(SSR) | | 技术栈 | JavaScript/TypeScript + React | Java + Servlet/JSP | | 组件化 | ✅ 完全支持 | ❌ 不支持 | | 类型安全 | ✅ TypeScript 强类型 | ⚠️ Java 强类型,但表达式弱检查 | | 性能体验 | 首屏慢,后续交互快 | 首屏快,每次跳转都刷新 | | 维护性 | 高(模块化、可测试) | 低(逻辑与视图混合) | | 适用场景 | SPA、PWA、复杂交互应用 | 企业内部系统、报表页面、老旧系统维护 | --- ## ✅ 举个实际例子:显示聊天消息列表 ### `.tsx` 写法(清晰、可维护) ```tsx function ChatList({ messages }: { messages: Message[] }) { return ( <div className="space-y-2"> {messages.map((msg) => ( <ChatMessage key={msg.id} sender={msg.sender} text={msg.text} /> ))} </div> ); } ``` ### `.jsp` 写法(混乱、难维护) ```jsp <div style="margin-bottom: 8px;" > <% List<Message> messages = (List<Message>) request.getAttribute("messages"); for (Message msg : messages) { String align = "left"; String color = "#e0e0e0"; if ("user".equals(msg.getSender())) { align = "right"; color = "#007bff"; } %> <div style="text-align:<%= align %>;"> <span style="background:<%= color %>; padding:8px; border-radius:12px;"> <%= msg.getText() %> </span> </div> <% } %> </div> ``` > ❗ 这种写法把样式、逻辑、循环全部混在一起,极易出错且难以调试。 --- ## ✅ 当前趋势建议 | 推荐方向 | 建议 | |--------|------| | 新项目开发 | ✅ 使用 `.tsx` + React/Vue + 前后端分离架构 | | 老旧系统维护 | ⚠️ 可继续使用 `.jsp`,但建议逐步迁移 | | 想提升用户体验 | ✅ SPA 更流畅,支持离线、推送等现代功能 | | 需要快速上线简单页面 | ⚠️ `.jsp` 更快,但长期成本高 | --- ## ✅ 如何过渡?(从 JSP 到 TSX) 如果你原来用 `.jsp`,现在想迁移到 `.tsx`: 1. 后端提供 REST API(如 Spring Boot) 2. 前端新建 Vite + React + TS 项目 3. 用 `fetch` 替代 `<%= %>` 获取数据 4. 用组件替代 JSP includes 5. 部署时:前端打包为静态文件,由 Nginx 托管;后端只暴露 API ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值