在Java Web开发中,出现乱码问题通常是由于字符编码设置不正确引起的。你已经在Tomcat和MySQL中设置了UTF-8编码,这是正确的。但是,你的过滤器只设置了响应的字符编码,没有设置请求的字符编码。
为了解决乱码问题,你需要在过滤器中同时设置请求和响应的字符编码。修改`doFilter`方法如下:@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { //处理请求的字符编码 servletRequest.setCharacterEncoding("UTF-8"); //处理响应的字符编码 servletResponse.setContentType("text/html;charset=UTF-8"); //放行 filterChain.doFilter(servletRequest, servletResponse);}
这样设置后,请求的数据就可以正确地以UTF-8编码保存到MySQL中了,并且在页面上正常显示。
另外,为了防止SQL注入攻击,建议你使用预编译语句来执行数据库插入操作。下面是一个示例代码:// 获取请求参数String username = request.getParameter("username");String password = request.getParameter("password");// 进行数据库插入操作Connection conn = null;PreparedStatement pstmt = null;try { conn = DriverManager.getConnection(url, user, password); String sql = "INSERT INTO users (username, password) VALUES (?, ?)"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, username); pstmt.setString(2, password); pstmt.executeUpdate(); // 插入成功,进行其他操作} catch (SQLException e) { e.printStackTrace();} finally { // 关闭连接和释放资源 if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } }}
通过使用预编译语句,可以有效地防止SQL注入攻击,并确保插入到数据库中的数据完整和准确。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |