基于Servlet和JSP的用户管理(一)

  最近学习到javaweb环节,跟着老师教学步骤实现一个用户管理系统。不多bb,直接开始。

第一步:数据库设计

该系统暂时只用到一个用户表,相当于任何一个登陆用户都可以对表进行增删查改。数据库设计如下:

create database day17; //创建数据库
use day17;
create table user(
    id int primary key auto_increment,
    name varchar(20) not null,
    gender varchar(5),
    age int,
    address varchar(32),
    qq varchar(20),
    email varchar(50),
    username varchar(20),
    password varchar(20)
);

后在IDEA中创建一个javaweb项目。接下来在web文件夹下创建一个WEB-INF,再在其下创建一个lib文件夹,将所需要的包导入其中。基于Servlet和JSP的用户管理(一)

接下来再在web文件夹下引入一系列提前准备好的前端页面模板。

基于Servlet和JSP的用户管理(一) 文件夹如图,环境搭建完毕

第二步:实现第一个功能列表查询。点击一下查询,既可以查询到数据库所以用户信息

基于Servlet和JSP的用户管理(一)

 解释一下为什么这里是UserService service = new UserServiceImpl();如果实现类出现问题,直接在实现类里改动即可,不用改动接口类的方法。

第三步,在domain包下创建User对象,并进行setter和getter,toString方法的添加。

public class User {
    private int id;
    private String name;
    private String gender;
    private int age;
    private String address;
    private String qq;
    private String email;
    private String username;
    private String password;
}

第四步:在index。jsp页面点击跳转处设置点击跳转路径

  <a
            href="${pageContext.request.contextPath}/userListServlet" style="text-decoration:none;font-size:33px">查询所有用户信息
    </a>

 这个地方是${pageContext.request.contextPath},动态获取虚拟路径,此时并没有userListServlet这个路径,但是没有关系,这个时候可以去创建。但是在你想用service查询数据的时候你发现这个方法也没有,也是刚刚创建好servlet之后再去service包下创建service的接口

第五步:在service包下创建UserService接口

public interface UserService {
    /**
     * 查询所有用户信息
     */
    public List<User> findAll();
}

 再创建其实现类

public class UserServiceImpl implements UserService {
    @Override
    public List<User> findAll() {
        //调用dao完成查询
        return null;
    }
}

里面的调用dao完成查询暂时没有,但是不要着急,马上自己去实现

第六步:

UserDao:
public interface UserDao {
    public List<User> findAll();
}
UserdaoImpl:
public class UserDaoImpl implements UserDao {
    @Override
    public List<User> findAll() {
        //使用JDBC操作数据库
        return null;
    }
}

这个时候去UserServiceImpl里面

public class UserServiceImpl implements UserService {
    private UserDao dao = new UserDaoImpl();
    @Override
    public List<User> findAll() {
        //调用dao完成查询
        return dao.findAll();
    }
}

有了UserService的findAll方法,这个时候可以去到Servlet里面去具体实现

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //调用UserService完成查询
        UserService service = new UserServiceImpl();
        List<User> users = service.findAll();
        //2.将list存入request域
        request.setAttribute("users",users);
        //3.转发到list.jsp
        request.getRequestDispatcher("/list.jsp").forward(request,response);
    }

第七步:接下来需要去编写jdbc

首先导入配置文件

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///day17
username=root
password=521029
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000

写工具类

package edu.swpu.util;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import javax.xml.crypto.Data;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

/**
 * JDBC工具类 使用Durid连接池
 */
public class JDBCUtils {

    private static DataSource ds ;

    static {

        try {
            //1.加载配置文件
            Properties pro = new Properties();
            //使用ClassLoader加载配置文件,获取字节输入流
            InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            pro.load(is);

            //2.初始化连接池对象
            ds = DruidDataSourceFactory.createDataSource(pro);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接池对象
     */
    public static DataSource getDataSource(){
        return ds;
    }


    /**
     * 获取连接Connection对象
     */
    public static Connection getConnection() throws SQLException {
        return  ds.getConnection();
    }
}

最后完善JDBC方法

public class UserDaoImpl implements UserDao {
    private JdbcTemplate template =new JdbcTemplate(JDBCUtils.getDataSource());
    
    @Override
    public List<User> findAll() {
        //使用JDBC操作数据库
        //1.定义sql
        String sql = "select * from user";
        List<User> users =template.query(sql,new BeanPropertyRowMapper<User>(User.class));
        return users;
    }
}

对于查询到的用户信息,应该用循环展示出来,这个时候需要用到jstl语句,需要在jsp首句加上

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

这个时候在页面上循环显示所查到的信息,前端代码

<c:forEach items="${users}" var="user" varStatus="s">
            <tr>
                <td>${s.count}</td>
                <td>${user.name}</td>
                <td>${user.gender}</td>
                <td>${user.age}</td>
                <td>${user.address}</td>
                <td>${user.qq}</td>
                <td>${user.email}</td>
                <td><a class="btn btn-default btn-sm" href="update.html">修改</a>&nbsp;<a class="btn btn-default btn-sm" href="">删除</a></td>
            </tr>
        </c:forEach>

所遇问题,所遇jsp页面在最前必须声明一句

<%@page contentType="text/html;charset=UTF-8" language="java" %>

不然会乱码

上一篇:Python中正则表达式的巧妙使用


下一篇:JqGrid添加时的下拉菜单实现