Java Web form 提交信息中文乱码的解决办法
最简单的办法
在 Servlet
里处理响应的方法最顶上加上一行代码
req?.characterEncoding = Charsets.UTF_8.toString()
具体如下
override fun doPost(req: HttpServletRequest?, resp: HttpServletResponse?) {
req?.characterEncoding = Charsets.UTF_8.toString()
val userName = req?.getParameter("u").toString()
val passwd = req?.getParameter("p").toString()
val user = UserBeen(userName, passwd)
val cookies = user.toCookie()
resp?.let {
for (cookie in cookies) {
it.addCookie(cookie)
}
}
req?.let {
it.session.setAttribute("mySession", user)
it.setAttribute("result", user)
it.getRequestDispatcher("/index.jsp").forward(it, resp)
}
}
比较复杂的办法
使用 WebFilter
在 doFilter
里拦截请求后修改字符编码再使用 chain
发给后方 Servlet
urlPatterns
是 WebFilter
生效范围
package com.mrx.myservlet
import javax.servlet.*
import javax.servlet.annotation.WebFilter
@WebFilter(filterName = "/encodingChanger", urlPatterns = ["/*"])
class WebFilter : Filter {
private var filterConfig: FilterConfig? = null
override fun init(filterConfig: FilterConfig?) {
this.filterConfig = filterConfig
println("init Filter")
}
override fun doFilter(request: ServletRequest?, response: ServletResponse?, chain: FilterChain?) {
request?.characterEncoding = "UTF-8"
response?.characterEncoding = "UTF-8"
println("do Filter")
chain?.doFilter(request, response)
}
override fun destroy() {
filterConfig = null
}
}