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日

相关文章

  • 利用JDBC的PrepareStatement打印真实SQL的方法详解

    利用JDBC的PrepareStatement打印真实SQL的方法详解: JDBC中的PrepareStatement对象是常用的执行SQL语句的方式,通过prepareStatement构建出的SQL语句是带有参数占位符的。然而,有时候我们需要查看这个SQL语句的完整内容,包括占位符的具体值。我们可以通过以下步骤达到目的: 将占位符的具体值设置进Prepa…

    Java 2023年6月16日
    00
  • 如何在Java中优雅地判空详解

    如何在Java中优雅地判空详解 在Java开发中,判断对象是否为空是一个非常常见的操作。但是,如果不注意判空的方式和实现,容易导致代码可读性差、冗长、容易出错等问题。本文将介绍几种优雅的判空方式,帮助Java开发者写出更简洁、易读、易维护的代码。 使用Objects工具类 Java8中新增的Objects类提供了一系列静态方法,用于判断对象是否为空。例如: …

    Java 2023年5月26日
    00
  • Java虚拟机GC日志分析

    下面是关于Java虚拟机GC日志分析的完整攻略: 什么是Java虚拟机GC日志 Java虚拟机的内存管理采用了分代垃圾收集的方式,GC日志是Java虚拟机在垃圾回收时所产生的日志,它里面包含了垃圾回收的很多相关信息,如垃圾回收的原因、结果、执行时间以及内存状态等。 获取GC日志 在使用Java虚拟机时,默认情况下并不会产生GC日志,需要手动开启才可以,一般有…

    Java 2023年5月26日
    00
  • Springboot连接数据库及查询数据完整流程

    下面我将为大家详细讲解“Springboot连接数据库及查询数据完整流程”的完整攻略。 准备工作 首先,需要在pom.xml文件中添加以下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-st…

    Java 2023年5月20日
    00
  • Java多线程开发工具之CompletableFuture的应用详解

    Java多线程开发工具之CompletableFuture的应用详解 什么是CompletableFuture CompletableFuture是JDK 8中引入的一个新的异步编程工具,它支持异步计算和任务链式调用,可以方便地编写出高效的异步代码。它提供了一套完成器API,可以在任务完成后通过回调函数对结果进行操作。 CompletableFuture的用…

    Java 2023年5月19日
    00
  • 详解SpringBoot下文件上传与下载的实现

    详解SpringBoot下文件上传与下载的实现 文件上传 在SpringBoot中,我们可以通过MultipartFile类型的参数来实现文件上传。步骤如下: 在前端,添加一个文件的input框,并设置为type=”file”。 <form action="/upload" method="post" encty…

    Java 2023年5月31日
    00
  • Spring Boot应用程序同时支持HTTP和HTTPS协议的实现方法

    下面是关于如何实现Spring Boot应用程序同时支持HTTP和HTTPS协议的完整攻略: 准备工作 在实现HTTPS协议之前,我们需要准备一个SSL证书,可以选择购买正式的SSL证书或者自己生成一个自签名的证书。 在这里,我们示范自签名证书的生成方法: 生成自签名证书 安装openssl工具 在Linux环境中,可以通过包管理器进行安装:比如Ubuntu…

    Java 2023年5月20日
    00
  • 使用jdbcTemplate查询返回自定义对象集合代码示例

    下面是“使用jdbcTemplate查询返回自定义对象集合”的完整攻略。 1. 准备工作 在使用jdbcTemplate查询返回自定义对象集合代码前,需要导入相关依赖包: <dependency> <groupId>org.springframework</groupId> <artifactId>spring…

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