|
5鱼币
在Java Web开发中,创建了一个登录注册jsp页面,页面的表单中使用了post方法。但是数据保存到MySQL中就变成了符号,不能正常显示。其中Tomcat已设置成utf-8,MySQL的数据库编码也是utf-8m64。
jsp页面代码如下:
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>登录和注册</title>
- <link rel="stylesheet" href="style/register.css"/>
- <script src="script/ad.js" async></script>
- <script src="script/confirm_password.js" async></script>
- </head>
- <body>
- <jsp:include page="header.jsp"/>
- <div class="box">
- <!-- 用来处理登录的信息 -->
- <div class="login">
- <p>在此登录</p>
- <form action="/theBlog/loginServlet" method="post" autocomplete="off">
- 用户名:<input type="text" name="username" placeholder="请输入用户名" required><br> 密码:
- <input type="password" name="password" placeholder="请输入密码" required><br>
- <button type="submit">登录</button>
- </form>
- </div>
- <!-- 用来处理注册的信息 -->
- <div class="register">
- <p>没有账号?立即注册</p>
- <form action="/theBlog/registerServlet" method="post" autocomplete="off" accept-charset="UTF-8">
- 用户名:<input type="text" name="username" placeholder="请输入用户名" required><br>
- 密码:<input type="password" name="password" placeholder="请输入密码" id="password" required><br>
- 确认密码:<input type="password" name="passwordc" placeholder="请确认密码" id="confirm_password" required><br>
- <button type="submit">注册</button>
- </form>
- </div>
- </div>
- <jsp:include page="ad.jsp"/>
- <jsp:include page="footer.jsp"/>
- </body>
- </html>
复制代码
过滤器如下:
- package edu.zjku.filter;
- import javax.servlet.*;
- import javax.servlet.annotation.WebFilter;
- import java.io.IOException;
- @WebFilter("/*")
- public class CharsetFilter implements Filter {
- @Override
- public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
- //处理乱码
- servletResponse.setContentType("text/html;charset=UTF-8");
- //放行
- filterChain.doFilter(servletRequest, servletResponse);
- }
- }
复制代码
在Java Web开发中,出现乱码问题通常是由于字符编码设置不正确引起的。你已经在Tomcat和MySQL中设置了UTF-8编码,这是正确的。但是,你的过滤器只设置了响应的字符编码,没有设置请求的字符编码。
为了解决乱码问题,你需要在过滤器中同时设置请求和响应的字符编码。修改`doFilter`方法如下:
- @Override
- public 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 小助理,如未能正确解答您的问题,请继续追问。
|
最佳答案
查看完整内容
在Java Web开发中,出现乱码问题通常是由于字符编码设置不正确引起的。你已经在Tomcat和MySQL中设置了UTF-8编码,这是正确的。但是,你的过滤器只设置了响应的字符编码,没有设置请求的字符编码。
为了解决乱码问题,你需要在过滤器中同时设置请求和响应的字符编码。修改`doFilter`方法如下:
这样设置后,请求的数据就可以正确地以UTF-8编码保存到MySQL中了,并且在页面上正常显示。
另外,为了防止SQL注入攻击,建议你使用 ...
|