Day35-综合练习

总结

我是最棒的!基础不牢,地动山摇!

JavaWeb CRUD综合练习

步骤

  1. JDBCUtil工具类(创建连接池对象,获取连接对象)
  2. Dao(数据持久层)
  3. Controller(控制层 Servlet)
  4. JSP(前后端交互展示查询信息)

1.JDBCUtil工具类(创建连接池对象,获取连接对象)

package cn.itsource.util;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

public class JDBCUtil {
	/**连接池对象*/
	private static DataSource dataSource;
	
	static{
		try {
			//配置对象
			Properties p = new Properties();
			//获取输入流
			InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.properties");
			//读取配置文件
			p.load(is);
			//获取连接池对象
			dataSource = BasicDataSourceFactory.createDataSource(p);
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
	
	/**
	 * 获取连接对象
	 * @return
	 * @throws SQLException 
	 */
	public static Connection getConnection() throws SQLException{
		return dataSource.getConnection();
	}
	
	/**
	 * 释放资源的方法
	 * @param rs
	 * @param ps
	 * @param conn
	 */
	public static void close(ResultSet rs,PreparedStatement ps,Connection conn){
		try {
			if(rs != null){
				rs.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				if(ps != null){
					ps.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}finally {
				try {
					if(conn != null){
						conn.close();
					}
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
}

2.Dao(数据持久层)

User

package cn.itsource.domain;

public class User {
	private Long id;
	private String name;
	private Integer age;
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	
	@Override
	public String toString() {
		return "[" + id + ", " + name + ", " + age + "]";
	}
	
	
	
}

UserDao

package cn.itsource.dao;

import java.util.List;

import cn.itsource.domain.User;

public interface IUserDao{
	/**
	 * 保存一个user到数据库
	 * @param user
	 */
	void save(User user);
	
	/**
	 * 根据id删除一个用户
	 * @param id
	 */
	void removeById(Long id);
	
	/**
	 * 修改用户信息
	 * @param user
	 */
	void update(User user);
	
	/**
	 * 根据id查询用户
	 * @param id
	 */
	User queryById(Long id);
	
	/**
	 * 查询所有用户
	 */
	List<User> queryAll();
}

实现类

package cn.itsource.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import cn.itsource.dao.IUserDao;
import cn.itsource.domain.User;
import cn.itsource.util.JDBCUtil;

public class UserDaoImpl implements IUserDao{

	@Override
	public void save(User user) {
		Connection conn= null;
		PreparedStatement ps = null;
		
		try {
			//获取连接对象
			conn = JDBCUtil.getConnection();
			//获取预编译对象
			ps = conn.prepareStatement("insert into t_user (name,age) values (?,?)");
			//设置属性
			ps.setObject(1, user.getName());
			ps.setObject(2, user.getAge());
			//执行
			ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			JDBCUtil.close(null, ps, conn);
		}
	}

	@Override
	public void removeById(Long id) {
		Connection conn= null;
		PreparedStatement ps = null;
		
		try {
			//获取连接对象
			conn = JDBCUtil.getConnection();
			//获取预编译对象
			ps = conn.prepareStatement("delete from t_user where id = ?");
			//设置属性
			ps.setObject(1, id);
			//执行
			ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			JDBCUtil.close(null, ps, conn);
		}
	}

	@Override
	public void update(User user) {
		Connection conn= null;
		PreparedStatement ps = null;
		
		try {
			//获取连接对象
			conn = JDBCUtil.getConnection();
			//获取预编译对象
			ps = conn.prepareStatement("update t_user set name = ? , age = ? where id = ?");
			//设置属性
			ps.setObject(1, user.getName());
			ps.setObject(2, user.getAge());
			ps.setObject(3, user.getId());
			//执行
			ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			JDBCUtil.close(null, ps, conn);
		}
		
	}

	@Override
	public User queryById(Long id) {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		
		try {
			conn = JDBCUtil.getConnection();
			ps = conn.prepareStatement("select * from t_user where id = ?");
			ps.setObject(1, id);
			
			rs = ps.executeQuery();
			while (rs.next()) {
				User user = new User();
				user.setId(id);
				user.setName(rs.getString("name"));
				user.setAge(rs.getInt("age"));
				return user;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			JDBCUtil.close(rs, ps, conn);
		}
		return null;
	}

	@Override
	public List<User> queryAll() {
		List<User> users = new ArrayList<>();
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		
		try {
			conn = JDBCUtil.getConnection();
			ps = conn.prepareStatement("select * from t_user");
			
			rs = ps.executeQuery();
			while (rs.next()) {
				User user = new User();
				user.setId(rs.getLong("id"));
				user.setName(rs.getString("name"));
				user.setAge(rs.getInt("age"));
				users.add(user);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			JDBCUtil.close(rs, ps, conn);
		}
		return users;
	}
}

3.Controller

showServlet查询所有用户并展示界面

package cn.itsource.controller;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.itsource.dao.IUserDao;
import cn.itsource.dao.impl.UserDaoImpl;
import cn.itsource.domain.User;

@WebServlet(value = "/show",loadOnStartup = 1)
public class UserServlet extends HttpServlet{
	private IUserDao dao;
	@Override
	public void init() throws ServletException {
		dao = new UserDaoImpl();
	}
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		List<User> users = dao.queryAll();
		req.setAttribute("users", users);
		
		req.getRequestDispatcher("/WEB-INF/jsp/show.jsp").forward(req, resp);
	}
}

deleteServlet处理删除

package cn.itsource.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.itsource.dao.IUserDao;
import cn.itsource.dao.impl.UserDaoImpl;

@WebServlet(value="/delete",loadOnStartup = 1)
public class DeleteServlet extends HttpServlet{
	private IUserDao dao;
	
	@Override
	public void init() throws ServletException {
		dao = new UserDaoImpl();
	}
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String id = req.getParameter("id");
		dao.removeById(Long.valueOf(id));
		
		resp.sendRedirect("/show");
	}
}

InputServlet处理增加和修改跳转

package cn.itsource.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.itsource.dao.IUserDao;
import cn.itsource.dao.impl.UserDaoImpl;
import cn.itsource.domain.User;

@WebServlet(value="/input",loadOnStartup = 1)
public class InputServlet extends HttpServlet{
	private IUserDao dao;
	
	@Override
	public void init() throws ServletException {
		dao = new UserDaoImpl();
	}
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String id = req.getParameter("id");
		if(id != null && "".equals(id) == false){
			User user = dao.queryById(Long.valueOf(id));
			req.setAttribute("user", user);
		}
		req.getRequestDispatcher("/WEB-INF/jsp/input.jsp").forward(req, resp);
	}
}

UpdateServlet处理增加和修改

package cn.itsource.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.itsource.dao.IUserDao;
import cn.itsource.dao.impl.UserDaoImpl;
import cn.itsource.domain.User;

@WebServlet(value = "/update",loadOnStartup = 1)
public class UpdateServlet extends HttpServlet{
	private IUserDao dao;
	
	@Override
	public void init() throws ServletException {
		dao = new UserDaoImpl();
	}
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String id = req.getParameter("id");
		String name = req.getParameter("name");
		String age = req.getParameter("age");
		if(id != null && "".equals(id) == false){
			User user = new User();
			user.setId(Long.valueOf(id));
			user.setName(name);
			user.setAge(Integer.valueOf(age));
			dao.update(user);
			
		}else {
			User user = new User();
			user.setName(name);
			user.setAge(Integer.valueOf(age));
			dao.save(user);
		}
		
		resp.sendRedirect("/show");
	}
}

4.jsp文件

主界面show.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
	table{
		width:50%;
		border:1px solid deepskyblue;
		border-collapse:collapse;
		text-align: center;
	}
	table th,table td{
		border:1px solid deepskyblue;
	}
	
</style>
</head>
<body>
	<table>
		<tr>
			<th>编号</th>
			<th>姓名</th>
			<th>年龄</th>
			<th>操作</th>
		</tr>
		<c:forEach items="${users}" var="u" varStatus="s">
			<tr style="background: ${s.index%2==0 ? 'pink' : 'grey'}">
				<td>${u.id}</td>
				<td>${u.name}</td>
				<td>${u.age}</td>
				<td>
					<a href="/input?id=${u.id}">修改</a>
					<a href="/delete?id=${u.id}">删除</a>
				</td>
			</tr>
		</c:forEach>
	</table>

		<a href="/input" >新增</a>

	
</body>
</html>

增加和修改界面input.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="/update" method="post">
		<input type="hidden" name="id" value=${user.id}>
		姓名<input type="text" name="name" value=${user.name}><br/>
		年龄<input type="text" name="age" value=${user.age}><br/>
		<input type="submit" value="提交">
	</form>
</body>
</html>

最终展示效果

在这里插入图片描述

CRUD的注意事项

请求转发与重定向的选择

  1. 多个Servlet需要共享数据,使用请求转发(访问WEB-INF也需要使用请求转发)
  2. 增删改操作,都使用重定向

MVC架构

Model1

它的设计模式为 JSP+JavaBean

JSP的职责:

  1. 展示界面
  2. 接收参数
  3. 处理业务
  4. 控制页面跳转

JavaBean:

  1. 做dao相关的操作
  2. 做响应业务的操作

优点:开发速度快(针对于小型项目)

缺点:没有责任分离,维护性差,不适合团队开发

Model2

Model2就是MVC的一种实现,Servlet + JSP + JavaBean

对象 职责
Servlet 接收参数,处理业务,控制页面跳转
JSP 展示页面
JavaBean dao层相关操作

优点:Model2这种设计非常符合人类的使用标准,他强调的是一个责任分离,各自做各自擅长的事情,让代码不再冗余,更好维护

MVC

M(Model) 模型=====JavaBean(domain/dao/工具类…)

V(View) 视图=====JSP/HTML/FTL/VM…

C(Controller) 控制层=====Servlet…

优点:MVC强调的是一个责任分离,各自做自己擅长的事情

猜你喜欢

转载自blog.csdn.net/t384061961/article/details/101123626
今日推荐