思路:
-
建立一个jsp页面 方便页面输入信息
-
建立servlet类 获取jsp页面输入的信息 并在控制台打印 如果未设置格式 则打印出来是乱码的 设置了乱码 则可以正常打印
-
filter拦截类,首先要判断jsp的输入方式 ,如果是post 需要设置乱码格式,如果是get,则无需设置,因为get没有乱码现象。
-
方法步骤:
a. filter部分首先要继承Filter(javax包下的),继承后此时页面会提示报错,因为有抽象类方法没有重写,此时按alt+Enter键,重写抽象方法。
b. 同时在类外设置拦截路径//设置拦截路径 “/"表示拦截所有
@WebFilter(urlPatterns = "/”)
c. 判断是否为post 进行代码编写
jsp用来页面输入代码块:
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2019/7/17
Time: 18:32
To change this template use File | Settings | File Templates.
--%>
<%@ page isELIgnored="false" contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/encoding" method="post">
<input type="text" name="name" placeholder="请输入姓名">
<input type="submit" value="提交">
</form>
</body>
</html>
servlet代码块 获取页面输入name信息:
package cfg.china2;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/Encoding2")
public class Encoding2 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获得页面输入name信息 并在控制台打印
String name = request.getParameter("name");
System.out.println(name);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
filter代码块 用来设置乱码:
package cfg.china2;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//设置拦截路径 "/*"表示拦截所有
@WebFilter(urlPatterns = "/*")
public class FileEncoding2 implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 设置中文乱码格式 先把servletRequest强转为httpServletRequest类型 然后用request和response进行设置格式
HttpServletRequest request = (HttpServletRequest) servletRequest;
// 用request的方法 设置请求时的字符乱码格式
request.setCharacterEncoding("utf-8");
// 同理用response设置响应
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.setContentType("text/html;charset=utf-8");
// 获取请求类型 如果是post 进行设置 如果是get 则无需设置 只有post有中文乱码 get无
String method = request.getMethod();
// 判断是否是post 不区分大小写equalsIgnoreCase
if ("post".equalsIgnoreCase(method)){
// 如果是post请求 则设置乱码格式
request.setCharacterEncoding("utf-8");
// 设置完 放行
filterChain.doFilter(servletRequest,servletResponse);
}
// 如果不是 就是get 也放行
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
未设置乱码格式效果图:
设置后效果图: