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);
}
}