e.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="f.jsp" method="post">
name:<input type="text" name="name">
<input type="submit" value="submit">
</form>
</body>
</html>
f.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
Hello:<%=request.getParameter("name")%>
</body>
</html>
在e.jsp输入内容后,在b.jsp显示:
①:输入英文:
②:输入汉字:
可以看到,输入汉字之后,会产生乱码。
这里可以用一个过滤器,将请求的字符编码设置为UTF-8:
package com.sa.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(filterName = "CharacterFilter")
public class CharacterFilter implements Filter {
private FilterConfig filterConfig;
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
req.setCharacterEncoding(filterConfig.getInitParameter("encoding"));
chain.doFilter(req, resp);
}
public void init(FilterConfig config) throws ServletException {
this.filterConfig=config;
}
}
web.xml:
<filter>
<filter-name>CharacterFilter</filter-name>
<filter-class>com.sa.filter.CharacterFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
再次测试: