最近学习到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文件夹,将所需要的包导入其中。
接下来再在web文件夹下引入一系列提前准备好的前端页面模板。
文件夹如图,环境搭建完毕
第二步:实现第一个功能列表查询。点击一下查询,既可以查询到数据库所以用户信息
解释一下为什么这里是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> <a class="btn btn-default btn-sm" href="">删除</a></td>
</tr>
</c:forEach>
所遇问题,所遇jsp页面在最前必须声明一句
<%@page contentType="text/html;charset=UTF-8" language="java" %>
不然会乱码