关于解决地址栏传参中文跳转页面乱码的相关问题

本文介绍如何处理前端页面中文URL导致的乱码问题。通过在Servlet中添加特定编码处理代码,确保点击链接后能正确传递并显示中文参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:

    我需要将首页的index.jsp中从北京—济南的列车的这个框,点击一下自动跳转到搜索页面search.jsp,并将北京-济南-当天时间一并显示在搜索页面的搜索框内。

实现过程:

    1.前端页面代码如下


    href中的url地址就有中文,如果后台没有任何处理的话,跳转到搜索页面就会出现中文乱码,解决方法是:

    2.在搜索的servlet下,也就是图片上地址栏里的TrainListServlet中,加上代码如下:

第12358行编码处理

<think>好的,用户现在想了解Vue项目中的页面通信和页面传参。之前他们已经问过关于Vue的Hooks和Mixins的区别,现在可能是在实际开发中遇到了组件或页面间数据传递的问题,需要进一步学习。我需要先理清Vue中常见的通信方式,然后分门别类地解释。 首先,用户提到的“页面通信”可能指的是不同路由组件之间的数据传递,而“页面传参”可能涉及多种传递参数的方法。需要涵盖常见的传参方式,比如URL参数、路由props、Vuex/Pinia状态管理,以及事件总线等。另外,考虑到用户之前的问题涉及Vue 3的Composition API,可能需要特别说明Vue 3中的变化,比如事件总线的替代方案。 接下来,要确保回答结构清晰,按照不同的方法逐一介绍,每种方法给出定义、适用场景、示例以及优缺点。需要注意使用中文,并且符合之前的格式要求,比如代码块用反引号,结构化的列表和对比。 可能用户的实际需求是选择适合自己项目场景的传参方式,比如简单的父子组件通信可能用props和事件,而跨层级或兄弟组件可能用全局状态管理。需要指出不同方法的适用场景,帮助用户做出决策。 还要注意区分Vue 2和Vue 3的不同之处,比如Vue 3中移除了事件总线,推荐使用mitt库或其他替代方案。同时,Vue 3的Composition API配合Pinia可能更推荐使用,这也是需要强调的。 最后,总结部分需要对比各种方法的优缺点,帮助用户快速理解在什么情况下选择哪种方式。要确保语言简洁明了,避免技术术语过多,让用户容易理解。</think>以下是 Vue 项目中常见的 **页面通信与传参方式** 的详细说明,涵盖简单到复杂场景,按优先级从高到低排序: --- ### 一、URL 传参(路由传参) #### 1. **适用场景** - **页面跳转时传递简单数据**(如 ID、状态码) - **数据需体现在浏览器地址栏**(支持页面刷新后保留参数) #### 2. **实现方式** ```javascript // 发送方:通过路由跳转传参 this.$router.push({ path: '/detail', query: { id: 123 }, // URL 显式参数:/detail?id=123 params: { type: 'vip' } // 需配合路由配置 name 使用,URL 不显示 }); // 接收方:通过路由对象获取 // 选项式 API this.$route.query.id // 123 (query 参数) this.$route.params.type // 'vip' (params 参数) // 组合式 API(Vue 3) import { useRoute } from 'vue-router'; const route = useRoute(); route.query.id; // 123 ``` #### 3. **注意事项** - `query` 参数会暴露在 URL 中,适合非敏感数据 - `params` 参数需在路由配置中声明占位符: ```javascript // 路由配置 { path: '/detail/:type', name: 'detail', component: DetailPage } ``` --- ### 二、Props 传参(父子组件通信) #### 1. **适用场景** - **父组件向子组件传递数据** - **静态或动态数据传递** #### 2. **实现方式** ```vue <!-- 父组件 --> <ChildComponent :message="parentMsg" :data-list="items" /> <!-- 子组件 --> <script> export default { props: { message: String, // 类型校验 dataList: { // 高级配置 type: Array, required: true, default: () => [] } } } </script> ``` #### 3. **单向数据流** - 子组件不能直接修改父组件传递的 props,需通过 `$emit` 事件通知父组件修改 --- ### 三、自定义事件(子父通信) #### 1. **适用场景** - **子组件向父组件传递数据** - **触发父组件行为** #### 2. **实现方式** ```vue <!-- 子组件:触发事件 --> <button @click="$emit('update-data', newData)">提交</button> <!-- 父组件:监听事件 --> <ChildComponent @update-data="handleUpdate" /> ``` --- ### 四、全局状态管理(Vuex / Pinia) #### 1. **适用场景** - **跨组件/跨层级共享数据** - **复杂应用状态管理**(如用户登录状态、全局配置) #### 2. **Vuex 示例** ```javascript // store.js export default new Vuex.Store({ state: { count: 0 }, mutations: { increment(state) { state.count++; } }, actions: { asyncIncrement({ commit }) { commit('increment'); } } }); // 组件中使用 this.$store.state.count; // 获取状态 this.$store.commit('increment'); // 同步修改 this.$store.dispatch('asyncIncrement'); // 异步操作 ``` #### 3. **Pinia(Vue 3 推荐)** ```javascript // stores/counter.js export const useCounterStore = defineStore('counter', { state: () => ({ count: 0 }), actions: { increment() { this.count++; } } }); // 组件中使用 import { useCounterStore } from '@/stores/counter'; const counter = useCounterStore(); counter.count; // 获取状态 counter.increment(); // 调用 action ``` --- ### 五、事件总线(Event Bus) #### 1. **适用场景** - **简单项目的跨组件通信**(非父子关系) - **Vue 2 中临时解决方案**(Vue 3 推荐使用 `mitt` 库替代) #### 2. **实现方式(Vue 2)** ```javascript // 创建事件总线 export const bus = new Vue(); // 发送方 bus.$emit('message', { text: 'Hello' }); // 接收方 bus.$on('message', (payload) => { console.log(payload.text); // 'Hello' }); ``` --- ### 六、本地存储(LocalStorage / SessionStorage) #### 1. **适用场景** - **持久化存储数据**(如用户 Token) - **页面关闭后仍需保留的数据** #### 2. **实现方式** ```javascript // 存储数据 localStorage.setItem('key', JSON.stringify(data)); // 读取数据 const data = JSON.parse(localStorage.getItem('key')); // 删除数据 localStorage.removeItem('key'); ``` --- ### 七、对比总结 | **方式** | 适用场景 | 优点 | 缺点 | |------------------|-----------------------------|-----------------------------|--------------------------| | **URL 传参** | 简单数据传递,需保留在 URL | 支持页面刷新、分享链接 | 暴露数据,类型受限 | | **Props/Events** | 父子组件通信 | 直观,Vue 原生支持 | 跨层级传递繁琐 | | **Vuex/Pinia** | 复杂全局状态管理 | 集中管理,支持响应式 | 增加项目复杂度 | | **Event Bus** | 简单跨组件通信(Vue 2) | 轻量级 | 不易维护,Vue 3 已淘汰 | | **本地存储** | 持久化数据存储 | 数据持久化 | 非响应式,需手动同步 | --- ### 八、选择建议 1. **简单父子通信** → Props + 自定义事件 2. **兄弟组件/跨层级** → Vuex/Pinia 3. **临时数据共享** → Event Bus(Vue 2)/ mitt(Vue 3) 4. **页面跳转传参** → URL 参数 5. **持久化数据** → LocalStorage + Vuex 持久化插件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值