接收页面传入后台乱码问题

首先要看是get还是post

method=“post”

http://localhost:8888/email/login.jsp
<form action="userController/userLogin" method="post">
    <p>
       用户名: <input type="text" name="uname"/>
    </p>
    <p>
       密码: <input type="text" name="pwd"/>
    </p>
    <p>
        <input type="submit" value="登录"/>
    </p>
</form>
@RequestMapping("/userLogin")
    public String userLogin(HttpSession session, String uname, String pwd){

        User user = userService.login(uname,pwd);

        if (user != null) {

            session.setAttribute("user",user);
            //return "redirect:/main.jsp";
            return "main";//直接走视图解析器,也就是会在main加上前后缀

        }else {
            return "forward:/login.jsp";
        }
    }

在Controller层再加入req.setCharacterEncoding()已经无效了,因为已经接入参数了,所以只能使用过滤器。

解决方案:
1.新建一个类

package com.qih.filter;

import javax.servlet.*;
import java.io.IOException;

/**
 *
 * 实现
 * @author goup
 * @date 2020-03-06 - 04:23
 */
public class EncFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }
    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {
        req.setCharacterEncoding("utf-8");
        //执行下一个过滤器或者目标资源
        filterChain.doFilter(req,resp);
    }
    @Override
    public void destroy() {
    }
}

2.要想在进入userLogin之前执行此代码,那就需要在web.xml中配置如下:

 <filter>
        <filter-name>encFilter</filter-name>
        <filter-class>com.qih.filter.EncFilter</filter-class>
 </filter>
    <filter-mapping>
        <filter-name>encFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

3.这是手写解码类,同样可以在web.xml中直接使用spring提供的过滤器方法:

 <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>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

*后续:*手写的变形写法

<filter>
        <filter-name>encFilter</filter-name>
        <filter-class>com.qih.filter.EncFilter</filter-class>
        <init-param>
            <param-name>enc</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

在方法中:

public class EncFilter implements Filter {
	String enc;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
		enc=filterConfig.getInitParameter("enc");
    }
    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {
        req.setCharacterEncoding(enc);
        //执行下一个过滤器或者目标资源
        filterChain.doFilter(req,resp);
    }
    @Override
    public void destroy() {
    }
}

method=“get”

get乱码需要在tomcat中配置Connector URLEncoding="UTF-8"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值