JSP页面中文乱码处理
- JSP页面添加 UTF-8
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
- Servlet 中添加请求体编码方式 UTF-8
servletRequest.setCharacterEncoding("utf-8");
- 取出参数直接使用
String name = req.getParameter("name");
具体代码示例如下:
JSP
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<html>
<head></head>
<body>
<form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data">
name:<input type="text" name="name" /><br />
file1:<input type="file" name="file1" /><br />
file2:<input type="file" name="file2" /><br />
file3:<input type="file" name="file3" /><br />
<input type="submit" value="上传" />
</form>
</body>
</html>
编码过滤器
@WebFilter(filterName = "encodingFilter", urlPatterns = "/*")
public class CharacterEncodingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("character encoding filter");
servletRequest.setCharacterEncoding("utf-8");
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
}
}
Servlet
import org.apache.commons.lang3.StringUtils;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
@WebServlet(name = "upload", urlPatterns = "/upload")
@MultipartConfig(location = "", maxFileSize = -1, maxRequestSize = -1, fileSizeThreshold = 5)
public class UploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("name");
System.out.println("入参 name: " + name);
for (Part part : req.getParts()) {
System.out.println("part size: " + part.getSize());
System.out.println("content type: " + part.getContentType());
System.out.println("content-disposition: " + part.getHeader("content-disposition"));
System.out.println("file head: " + getFileHead(part));
System.out.println("file name: " + getFileName(part));
}
}
private String getFileName(Part part) {
if (part == null) {
return null;
}
String disposition = part.getHeader("content-disposition");
if (StringUtils.isEmpty(disposition)) {
return null;
}
String name = StringUtils.substringBetween(disposition, "filename=\"", "\"");
return name;
}
private String getFileHead(Part part) {
if (part == null) {
return null;
}
try {
InputStream inputStream = part.getInputStream();
if (inputStream == null) {
return null;
}
byte[] buf = new byte[4];
inputStream.read(buf);
String ret = "";
for (byte b : buf) {
int i = Math.abs(b);
String hex = Integer.toHexString(i & 0xFF);
if (hex.length() == 1) {
ret = ret + "0";
}
ret = ret + hex;
}
return ret;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}