1.环境准备
1.1
druid-1.2.8.jar
commons-dbutils-1.7.jar
mysql-connectou-java-8.0.26.jar
servlet-api.jar
1.2 db.properties
driverClassName=com.mysql.jdbc.Driver
username=root
password=root
url=jdbc:mysql:///db?serverTimezone=Asia/Shanghai
maxWait=60000
initialSize=100
maxActive=200
minIdle=10
1.3 DBUtils 工具类
private static DataSource ds = null;
private static final Properties PROPERTIES = new Properties();
static {
try {
PROPERTIES.load(DBUtils.class.getResourceAsStream("/db.properties"));
ds = DruidDataSourceFactory.createDataSource(PROPERTIES);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static DataSource getDs(){
return ds;
}
1.4 数据库--字段
public class User {
private Integer id;
private String username;
private String address;
private String password;
private String favorites;
private Integer gender;
private String grade;
}
2.实现登录功能
2.1 登录界面
<!-- form 表单如果没有指定 method ,默认为 get -->
<form action="/myweb03/doLogin" method="post">
<table>
<tr>
<td>用户名:</td>
<!--name 属性就是将来传递的 key,input 标签必须要有 name 属性,否则该字段无法被提交到服务端-->
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<!-- 点击 submit 按钮时, 会自动提交所有带 name 属性的数据-->
<td><input type="submit" value="登录"></td>
</tr>
</table>
</form>
2.2 Servlet
@WebServlet(urlPatterns = "/doLogin")
public class LoginServlet extends HttpServlet {
private UserService userService = new UserService();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 设置请求参数的编码格式
req.setCharacterEncoding("utf-8");
// 获取用户从浏览器传来的 用户名 密码
String username = req.getParameter("username");
String password = req.getParameter("password");
int login = userService.login(username, password);
if (login == 1) {
System.out.println("登录成功");
// sendRedirect 为重定向方法,这个方法会给浏览器返回两个关键信息:1,响应状态码 302 2,在响应头中包含 Location 字段 它的值为要重定向的地址
resp.sendRedirect("/myweb03/userlist");
//sendRedirect("/myweb03/userlist") 相当于
//resp.setStatus(302);
//添加响应头
//resp.addHeader("Location","/myweb03/userlist");
}else {
System.out.println("登录失败");
}
}
}
2.3 UserService
/**
* @desc 处理登录的业务方法
* @Param [username, password]
* @return int
*/
public int login(String username,String password){
//根据用户名查询用户
User user = userDao.getUserByUsername(username);
// 用户不存在
if (user == null) {
return -1;
}else {
if (password.equals(user.getPassword())){
return 1;
}else {
return -1;
}
}
}
2.4 dao
private QueryRunner queryRunner = new QueryRunner(DBUtils.getDs());
public User getUserByUsername(String username){
try {
return queryRunner.query("select * from user where username=?", new BeanHandler<>(User.class),username);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
3.登录成功后重定向至用户列表
3.1 servlet
@WebServlet(urlPatterns = "/userlist")
public class UserListServlet extends HttpServlet {
private UserService userService = new UserService();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<User> list = userService.getAllUsers();
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.write("<table border=\"1\">");
out.write("<tr>");
out.write("<td>");
out.write("用户编号");
out.write("</td>");
out.write("<td>");
out.write("用户名");
out.write("</td>");
out.write("<td>");
out.write("用户密码");
out.write("</td>");
out.write("<td>");
out.write("用户地址");
out.write("</td>");
out.write("</tr>");
for (User user : list) {
out.write("<tr>");
out.write("<td>");
out.write(String.valueOf(user.getId()));
out.write("</td>");
out.write("<td>");
out.write(user.getUsername());
out.write("</td>");
out.write("<td>");
out.write(user.getPassword());
out.write("</td>");
out.write("<td>");
out.write(user.getAddress());
out.write("</td>");
out.write("</tr>");
}
out.write("</table>");
}
}
3.2 service
public List<User> getAllUsers() {
return userDao.getAllUsers();
}
3.3
public List<User> getAllUsers() {
try {
return queryRunner.query("select * from user", new BeanListHandler<>(User.class));
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
4. 添加用户功能
4.1 html
<form action="/myweb03/addUser" 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>用户地址:</td>
<td><input type="text" name="address"></td>
</tr>
<tr>
<td>兴趣爱好:</td>
<td>
<input type="checkbox" name="favorites" value="足球">足球
<input type="checkbox" name="favorites" value="篮球">篮球
<input type="checkbox" name="favorites" value="乒乓球">乒乓球
</td>
</tr>
<tr>
<td>性别:</td>
<td>
<!--
由于两个 radio 的 name 属性一致,所在在提交的时候就只会提交一个
-->
<input type="radio" name="gender" value="1">男
<input type="radio" name="gender" value="0">女
</td>
</tr>
<tr>
<td>学历:</td>
<td>
<!--
如果 select 多选,则服务端的处理方式类似于 checkbox
如果 select 单选,则服务端处理方式和普通字段一样
-->
<select name="grade">
<option value="大专">大专</option>
<option value="本科">本科</option>
<option value="硕士">硕士</option>
<option value="博士">博士</option>
</select>
</td>
</tr>
<tr>
<td><input type="submit" value="添加"></td>
</tr>
</table>
</form>
4.2 servlet
@WebServlet(urlPatterns = "/addUser")
public class AddUserServlet extends HttpServlet {
private UserService userService = new UserService();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
String address = req.getParameter("address");
// favorites 长度可变
String[] favorites = req.getParameterValues("favorites");
String gender = req.getParameter("gender");
String grade = req.getParameter("grade");
// 以 ; 分割 joinning() 无参方法返回一个 Collectors 实例,并且以空字符串 ( “” ) 来拼接收集到的所有元素
String s = Arrays.stream(favorites).map(f -> f + ";").collect(Collectors.joining());
User user = new User(null,username,address,password,s,Integer.parseInt(gender),grade);
Integer rs = userService.addUser(user);
if (rs == 1) {
resp.sendRedirect("/myweb03/userlist");
}else {
System.out.println("添加失败");
}
}
}
4.3 service
public Integer addUser(User user) {
try {
return userDao.addUser(user);
} catch (SQLException e) {
e.printStackTrace();
}
return -1;
}
4.4 dao
public Integer addUser(User user) throws SQLException {
return queryRunner.update("insert into user(username,password,address,favorites,gender,grade) values(?,?,?,?,?,?)", user.getUsername(),user.getPassword(),user.getAddress(),user.getFavorites(),user.getGender(),user.getGrade());
}