首先要看是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"