Html的form表单提交到jsp中出现中文乱码

jsp 专栏收录该内容
7 篇文章 0 订阅

form表单提交有get和post两种方法,在提交到jsp中时处理中文乱码时方式不一样


1.处理post方法提交中文乱码
用post方法提交时,其实没什么特别的方法只要注意html页面的编码格式与jsp页面的编码格式一致即可。可以都为GBK,也可以都为UTF-8.
如图:
html页面
这里写图片描述

2.处理get方法提交中文乱码
如果使用的get方法提交的话,即使你的html页面和jsp页面编码格式一致也会出现乱码,至于为什么会这样我也没去深入了解。总之在这里提供解决方式。
方法1:
String value = request.getParameter(“parameterName”);
value = new String(value.getBytes(“ISO859_1”),”UTF-8”);
这种可以解决乱码问题,但是很明显这样很麻烦。推荐用第二种方法。
方法2:
使用过滤器.对于一个web应用程序来说,过滤器是处于web容器内的一个组件,它会过滤特定请求资源请求信息和响应信息。一个请求来到时,web容器会判断是否有过滤器与该信息资源相关联,如果有则交给过滤器处理,然后再交给目标资源,响应的时候则以相反的顺序交给过滤器处理,最后再返回给用户浏览器。
下面是解决乱码的具体例子:
MyFirstFilter.java:

package com.util;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;

import org.apache.catalina.connector.Request;

/**
 * Servlet Filter implementation class MyFirstFilter
 */
@WebFilter("/MyFirstFilter")
public class MyFirstFilter implements Filter {
    class MyRequest extends HttpServletRequestWrapper{
        public MyRequest(HttpServletRequest request) {
            super(request);
            // TODO Auto-generated constructor stub
        }

        @Override
        public String getParameter(String name) {
            // TODO Auto-generated method stub
            String value =null;
            try {

                value = super.getParameter(name);
                if(super.getMethod().equalsIgnoreCase("GET")){
                if(value != null){
                    value = new String(value.getBytes("ISO8859_1"), "UTF-8");
                }}
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            return value;
        }



    }
    public void  init(FilterConfig config) throws ServletException {

    }
    public void  doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException {

        HttpServletRequest req = (HttpServletRequest)request;
        HttpServletResponse response2 = (HttpServletResponse)response;
//      req.setCharacterEncoding("GBK");
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html");
        response.setCharacterEncoding("UTF-8");
        String path = req.getServletPath();
        String param = req.getQueryString();
        String uri = req.getRequestURL().toString();
        request.setAttribute("uri", uri);
        request.setAttribute("ServletPath", path+"?"+param);
        request.setAttribute("isFiltered", "是");
        // 把请求传回过滤链
        chain.doFilter(new MyRequest((HttpServletRequest)request),response);
    }
    public void destroy( ){
        /* 在 Filter 实例被 Web 容器从服务移除之前调用 */
    }

}

web.xml:

<?xml version="1.0" encoding="UTF-8"?>  
<web-app version="2.5"   
    xmlns="http://java.sun.com/xml/ns/javaee"   
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
       <filter>
    <filter-name>MyFirstFilter</filter-name>
    <filter-class>com.util.MyFirstFilter</filter-class>
    <init-param>
    <param-name>secondAttribute</param-name>
    <param-value>filterConfig的第二个参数</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>MyFirstFilter</filter-name>
   <url-pattern>/checkIn.jsp</url-pattern>
</web-app> 

主要就是自定义了一个HttpServletRequest类,重写了里面的getParameter()方法,其实核心处理方法跟方法1一样。

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

MarhongBaLa

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值