不冷博客

Servlet获取请求参数,连接数据库-12月9日讲课内容

Servlet

获取请求参数【重点】

前端页面

<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>测试从前端获取请求参数</title>
</head>
<body>
    <form action="GetParameter" method="post">
        <span>账号: </span><input type="text" name="username"><br><br>
        <span>密码: </span><input type="password" name="password"><br><br>
        <input type="submit" value="提交">
    </form>

    <hr>

    <form action="GetParameter" method="get">
        <span>账号: </span><input type="text" name="username"><br><br>
        <span>密码: </span><input type="password" name="password"><br><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

案例代码

/**
 * 获取前端请求的参数
 */
@WebServlet("/GetParameter")
public class GetParameter extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 此方法用于获取从前端传递过来的参数,要求形参名必须和前端中的name一致
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        System.out.println(username + ":" + password);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

【注意】

1、在后台通过 HttpServletRequest 获取数据使用 getParameter 方法,返回值是 String 类型

2、要求前端提交数据的 name 属性和后台获取 getParameter 参数名一致

连接数据库【重点】

sql

create table user(id int primary key auto_increment, username varchar(20) unique not null, password varchar(16) not null);

html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>登录</title>
</head>
<body>
<form action="Register" method="post">
    <table>
        <tr>
            <td>账号</td>
            <td><input type="text" name="username"></td>
        </tr>
        <tr>
            <td>密码</td>
            <td><input type="password" name="password"></td>
        </tr>
        <tr>
            <td><input type="reset" value="重置"></td>
            <td><input type="submit" value="提交"></td>
        </tr>
    </table>
</form>
</body>
</html>

案例代码

/**
 * 测试Servlet连接数据库
 */
@WebServlet("/Register")
public class RegisterServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 设置请求和响应的编码集
        req.setCharacterEncoding("UTF8");
        resp.setContentType("text/html; charset=UTF-8");

        // 获取请求的参数
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        // 通过C3P0获取连接
        Connection connection = JdbcUtilsOnC3P0.getConnection();

        // 获取DbUtils中的核心QueryRunner类对象
        QueryRunner queryRunner = new QueryRunner();

        // 准备SQL语句
        String sql = "insert into user(username, password) values(?, ?)";

        // 准备参数
        Object[] params = {username, password};

        // 提取受影响的行数
        int affectedRows = 0;

        try {
            // 执行增删改方法,获取受影响的行数
            affectedRows = queryRunner.update(connection, sql, params);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            JdbcUtilsOnC3P0.close(connection);
        }

        // 判断是否添加成功,把结果返回给前端
        if (affectedRows != 0) {
            resp.getWriter().append("<font color='red' size='48px'>添加成功</font>");
        } else {
            resp.getWriter().append("<font color='green' size='48px'>添加失败</font>");
        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

【注意】这里使用了C3P3连接池,需要导入相关的 jar 包以及配置文件,如果使用 Druid 连接池需要修改 Druid.properties 文件的位置并修改代码, 不推荐!

重定向【重点】

浏览器发送HTTP请求 ==> 服务器
服务器接收到请求之后 发送302状态码 新的location => 浏览器
浏览器收到302状态码 + location 按照新的location发送新的请求 => 服务器

特点

  • 该操作是浏览器行为
  • 重定向最少存在两次的浏览器请求
  • 重定向情况下,浏览器的地址栏会发生改变
  • 重定向操作存在两个或者两个以上的请求,每一次新的请求,都会丢失之前的请求数据,也就是request对象【requeset作用域范围】
  • 重定向可以访问任何资源,不管是当前WEB服务器资源,还是网络端的资源都是可以访问

起始页

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>重定向起始页</title>
</head>
<body>
<form action="TestRedirectServlet" method="post">
    <table>
        <tr>
            <td>账号</td>
            <td><input type="text" name="username"></td>
        </tr>
        <tr>
            <td>密码</td>
            <td><input type="password" name="password"></td>
        </tr>
        <tr>
            <td><input type="submit" value="提交"></td>
        </tr>
    </table>
</form>
</body>
</html>

跳转页

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>重定向跳转过来的页面</title>
</head>
<body>
<table>
    <tr>
        <td><img src="真香.jpg"></td>
    </tr>
</table>
</body>
</html>

案例代码

/**
 * 测试重定向
 */
@WebServlet("/TestRedirectServlet")
public class TestReDirectServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
            IOException {
        request.setCharacterEncoding("utf8");
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        System.out.println(username + ":" + password);

        if ("Andy".equals(username) && "123456".equals(password)) {
            // 调用重定向方法
            response.sendRedirect("Demo2.html");
        } else {
            response.getWriter().append("账号密码错误!!!");
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
            IOException {
        doPost(request, response);
    }
}

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »