【技术分享】Java页面URL传值中文乱码?一招教你轻松解决!

在Java Web开发中,页面URL传值时中文出现乱码是一个常见的问题。这通常是由于字符编码不一致导致的。为了解决这个问题,我们需要确保在请求和响应过程中使用相同的字符编码。以下是一些解决方法:

方法一:设置服务器的默认编码

  1. 修改web.xml文件

    在你的Web应用的WEB-INF/web.xml文件中添加以下配置,以设置全局的字符编码过滤器:

    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
  2. Spring Boot项目

    如果你使用的是Spring Boot,可以在application.propertiesapplication.yml文件中设置默认编码:

    spring.http.encoding.charset=UTF-8
    spring.http.encoding.enabled=true
    spring.http.encoding.force=true
    

方法二:在Servlet中手动设置请求和响应的编码

你可以在Servlet中手动设置请求和响应的编码:

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/example")
public class ExampleServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置请求编码为UTF-8
        request.setCharacterEncoding("UTF-8");
        // 设置响应编码为UTF-8
        response.setContentType("text/html; charset=UTF-8");
        
        // 获取参数并处理
        String name = request.getParameter("name");
        // 输出到响应中
        response.getWriter().write("Hello, " + name);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

方法三:使用过滤器统一设置编码

你可以创建一个过滤器来统一设置请求和响应的编码:

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

@WebFilter("/*")
public class EncodingFilter implements Filter {
    public void init(FilterConfig fConfig) throws ServletException {}

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html; charset=UTF-8");
        chain.doFilter(request, response);
    }

    public void destroy() {}
}

方法四:前端页面设置表单提交时的编码

确保你的HTML表单在提交时使用UTF-8编码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Form Submission</title>
</head>
<body>
    <form action="yourServletURL" method="post" accept-charset="UTF-8">
        <label for="name">Name:</label>
        <input type="text" id="name" name="name">
        <button type="submit">Submit</button>
    </form>
</body>
</html>

总结

通过以上几种方法,可以有效地解决Java Web应用中URL传值中文乱码的问题。推荐使用全局过滤器的方法,因为它能够统一管理编码,减少代码重复,提高代码的可维护性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值