JSP struts2 url传参中文乱码解决办法

JSP struts2 url传参中文乱码解决办法

问题描述

在使用 JSP 和 Struts2 构建 Web 应用程序时,我们常常需要通过 URL 传参。但是,如果参数中包含中文等非 ASCII 字符,就会出现乱码的问题。这是因为浏览器默认使用的是 ISO-8859-1 编码方式,而中文需要使用 UTF-8 编码,两种编码方式不同,导致乱码的出现。

解决办法

常用的解决方法有两种:

  1. 使用 URLEncoder.encode() 对参数进行编码,例如:

java
String name = "张三";
String encodedName = URLEncoder.encode(name, "UTF-8");
String url = "http://example.com?name=" + encodedName;

这样就会将参数 name 编码为 %E5%BC%A0%E4%B8%89,其中 %E5%BC%A0%E4%B8%89 就是 张三 编码后的结果。

  1. 在 Struts2 的配置文件 struts.xml 中配置编码过滤器,例如:

xml
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>struts.i18n.encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

这样就会自动对 URL 中的参数进行 UTF-8 编码。

示例说明

示例一

假设我们有一个 JSP 页面,需要在 URL 中传递参数 name,值为 张三,则需要将该参数进行编码后添加到 URL 中。

<%@ page contentType="text/html;charset=UTF-8" %>
<%
  String name = "张三";
  String encodedName = URLEncoder.encode(name, "UTF-8");
  String url = "/example.action?name=" + encodedName;
%>
<a href="<%= url %>">跳转到 example 页面</a>

example.action 中获取参数值:

public class ExampleAction extends ActionSupport {
  private String name;

  public String execute() throws Exception {
    String decodedName = URLDecoder.decode(name, "UTF-8");
    System.out.println(decodedName); // 输出:张三
    return SUCCESS;
  }

  // getter 和 setter 略
}

示例二

struts.xml 中配置编码过滤器:

<filter>
    <filter-name>encoding</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    <init-param>
        <param-name>struts.i18n.encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encoding</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

然后,在 JSP 中使用 Struts2 标签的方式传参:

<%@ taglib prefix="s" uri="/struts-tags" %>
<%
  String name = "张三";
%>
<s:a action="example.action">
  <s:param name="name" value="<%= name %>"/>
  跳转到 example 页面
</s:a>

example.action 中获取参数值:

public class ExampleAction extends ActionSupport {
  private String name;

  public String execute() throws Exception {
    System.out.println(name); // 输出:张三
    return SUCCESS;
  }

  // getter 和 setter 略
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JSP struts2 url传参中文乱码解决办法 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Java实现文件监控器FileMonitor的实例代码

    下面我将为您详细介绍Java实现文件监控器FileMonitor的实例代码攻略。 FileMonitor简介 FileMonitor是Java文件监控器的一种实现方式。它可以用于监控指定目录下的文件或文件夹的变化,包括文件的创建、修改、删除等操作,以便及时做出相应的处理。 实现步骤 引入相关依赖 使用FileMonitor需要引入相应的依赖,其中最重要的是c…

    Java 2023年5月20日
    00
  • Java如何调用C++ DLL库

    Java与C++是不同语言,Java的运行环境JVM不能直接调用C++库。但是Java有一个机制可以通过Java Native Interfaces (JNI)来调用C++的动态链接库(DLL)文件。 下面是详细的步骤: 编写C++代码 首先,需要编写C++代码实现相应的函数。为了保证函数可以被调用,需要在函数前面加上__declspec(dllexport…

    Java 2023年5月24日
    00
  • Java实现ATM系统超全面步骤解读建议收藏

    Java实现ATM系统超全面步骤解读 1. 前言 ATM系统是日常生活中经常使用的自助银行系统,本文将介绍如何使用Java完成ATM系统的开发。该系统主要包括用户登录、查询账户信息、存款、取款、转账等基本功能。 2. 数据库设计 在开发ATM系统之前,需要先进行数据库设计。具体步骤如下: 2.1. 创建数据库 首先需要在MySQL数据库中创建一个名为ATM的…

    Java 2023年5月19日
    00
  • Spring Boot中使用jdbctemplate 操作MYSQL数据库实例

    下面我来详细讲解一下在Spring Boot中如何使用jdbctemplate操作MySQL数据库的方法。 准备工作 首先,我们需要在pom.xml文件中将以下依赖项添加到项目中: <dependency> <groupId>org.springframework.boot</groupId> <artifactId…

    Java 2023年6月16日
    00
  • Java 替换字符串中的回车换行符的方法

    Java 替换字符串中的回车换行符的方法可以通过使用正则表达式来实现。以下是完整的示例攻略: 方法一:使用 replaceAll() 方法 可以使用 replaceAll() 方法将字符串中的回车换行符替换为其他内容。需要使用正则表达式 “\r|\n” 匹配回车换行符,并使用 replaceAll() 方法将其替换为需要的内容。具体示例代码如下: Strin…

    Java 2023年5月27日
    00
  • Spring Security实现多次登录失败后账户锁定功能

    一、Spring Security实现多次登录失败后账户锁定功能的实现过程 配置登录失败处理器 在Spring Security的配置类中,通过实现 org.springframework.security.web.authentication.AuthenticationFailureHandler 接口,自定义一个登录失败处理器。 示例代码: @Conf…

    Java 2023年5月20日
    00
  • java中PriorityBlockingQueue的入队知识点总结

    下面是对 “java中PriorityBlockingQueue的入队知识点总结” 的详细讲解。 PriorityBlockingQueue的概述 PriorityBlockingQueue 是 java.util.concurrent 包中的一个类,它是一个具有优先级的无界阻塞队列,可以用来实现生产者-消费者模式中的队列。 PriorityBlocking…

    Java 2023年5月26日
    00
  • SpringBoot log打印及输出方式

    SpringBoot是一种快速构建基于Spring框架的应用程序的框架。在应用程序的开发和维护过程中,日志是必不可少的工具。SpringBoot提供了许多日志框架,如Logback、Log4j2和Java Util Logging等。本篇攻略将详细讲解SpringBoot log打印及输出方式,如下: 日志输出级别 SpringBoot使用Logback作为…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部