0
点赞
收藏
分享

微信扫一扫

Servlet + JDBC 简单应用 笔记

求阙者 2022-03-31 阅读 39
javajar

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());
    }
举报

相关推荐

0 条评论