基于MVC的JavaWeb案例
三层架构的思想实在是太完美了,这里写了一个小模板案例,仅供大家参考学习。
必要的步骤都有注释声明,稍微细节一点的部分也都加上了注释,所以非常适合新手入门使用
希望可以帮到正在努力的你。
这里我展示一下我的目录
dao包下的接口
import domain.User;
import java.util.List;
//dao层接口
public interface UserDao {
// 查找所有的信息
public List<User> findAll();
// 登陆验证
public User loginUser(User user);
// 增加
public void add(User user);
// 删除
public void del(String id);
// 修改
public void set(User user);
// 通过id检索对象
public User findById(int id);
}
dao包接口实现类
import dao.UserDao;
import domain.User;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import util.JdbcUtils;
import java.util.List;
//dao层的实现类
public class UserDaoImpl implements UserDao {
// 基操
private JdbcTemplate jdbcTemplate=new JdbcTemplate(JdbcUtils.getDataSource());
// 查找所有信息
@Override
public List<User> findAll() {
String sql="select *from user";
List<User> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class));
return query;
}
// 登陆验证
@Override
public User loginUser(User user) {
try {
String sql="select * from user where username=? and password=?";
User user1 = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), user.getUsername(), user.getPassword());
return user1;
} catch (DataAccessException e) {
e.printStackTrace();
}
return null;
}
//添加用户
@Override
public void add(User user) {
try{
String sql="insert into user values(null,?,?,?,?,?,?,?)";
int update = jdbcTemplate.update(sql, null, null, user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail());
}catch (Exception e){
e.printStackTrace();
}
}
//删除用户
@Override
public void del(String id) {
try {
String sql="delete from user where id=?";
jdbcTemplate.update(sql,Integer.parseInt(id));
} catch (DataAccessException e) {
e.printStackTrace();
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
//修改用户信息
@Override
public void set(User user) {
try {
String sql="update user set gender=?,age=?,address=?,qq=?,email=? where id=?";
jdbcTemplate.update(sql,user.getGender(),user.getAge(),user.getAddress(),user.getQq(),user.getEmail(),user.getId());
} catch (Exception e) {
e.printStackTrace();
}
}
//通过id检索user对象
@Override
public User findById(int id) {
try {
String sql="select * from user where id=?";
User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), id);
return user;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
service包下的接口
import domain.User;
import java.util.List;
//service层接口
public interface UserService {
// 查询所有列表
public List<User> findAll();
//登录
public User login(User user);
// 增加
public void add(User user);
// 删除
public void del(String id);
// 更改
public void set(User user);
// 通过id检索
public User findById(String id);
}
service包接口实现类
import dao.UserDao;
import dao.impl.UserDaoImpl;
import domain.User;
import service.UserService;
import java.util.List;
//service层接口的实现类,用来操作dao层
public class UserServiceImpl implements UserService {
// 设置私有dao层实现类
private UserDao userDao = new UserDaoImpl();
// 查找所有信息
@Override
public List<User> findAll() {
// 调用dao层的方法,并将结果返回给servlet
return userDao.findAll();
}
//登录验证
@Override
public User login(User user) {
return userDao.loginUser(user);
}
//添加user
@Override
public void add(User user) {
userDao.add(user);
}
//删除user
@Override
public void del(String id) {
userDao.del(id);
}
//修改user
@Override
public void set(User user) {
userDao.set(user);
}
//通过id检索user
@Override
public User findById(String id) {
return userDao.findById(Integer.parseInt(id));
}
}
seb.servlet包下的AddServlet
import domain.User;
import org.apache.commons.beanutils.BeanUtils;
import service.UserService;
import service.impl.UserServiceImpl;
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 java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
//添加操作servlet
@WebServlet("/AddServlet")
public class AddServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
// 1.封装user
User user=new User();
Map<String, String[]> parameterMap = request.getParameterMap();
try {
BeanUtils.populate(user,parameterMap);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
// 2.对封装后的对象添加到数据库
UserService userService=new UserServiceImpl();
userService.add(user);
// 3.添加后,跳转到主页(登陆页面) request.getRequestDispatcher("/UserServlet").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
seb.servlet包下的DelServlet
import service.UserService;
import service.impl.UserServiceImpl;
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 java.io.IOException;
@WebServlet("/DelServlet")
public class DelServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
// 1.获取页面id信息
UserService userService = new UserServiceImpl();
String id = request.getParameter("id");
// 2.从数据库删除该id的所有信息
userService.del(id);
// 3.跳转到主页
request.getRequestDispatcher("/UserServlet").forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
seb.servlet包下的LoginServlet
import com.mysql.cj.Session;
import dao.UserDao;
import dao.impl.UserDaoImpl;
import domain.User;
import org.apache.commons.beanutils.BeanUtils;
import service.UserService;
import service.impl.UserServiceImpl;
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 javax.servlet.http.HttpSession;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Enumeration;
import java.util.Map;
//主页
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
// 1.封装user对象
User user = new User();
Map<String, String[]> parameterMap = request.getParameterMap();
try {
BeanUtils.populate(user, parameterMap);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
// 2.执行登录验证逻辑
UserService userService = new UserServiceImpl();
User login = userService.login(user);
if (login != null) {
// 登陆成功直接跳转,不再进行账号密码数据的转存
request.getRequestDispatcher("/UserServlet").forward(request, response);
} else {
// 登陆失败,页面打印提示信息
response.getWriter().write("err the pin");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
seb.servlet包下的SelectAllServlet
import domain.User;
import org.apache.commons.beanutils.BeanUtils;
import service.UserService;
import service.impl.UserServiceImpl;
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 java.io.IOException;
@WebServlet("/SelectAllServlet")
public class SelectAllServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
// 1.获取页面发送过来的id
UserService userService = new UserServiceImpl();
String id = request.getParameter("id");
// 2.检索该id的信息并返回给user对象
User user = userService.findById(id);
// 3.将user发送给页面
request.setAttribute("user",user);
// 4.跳转到修改页面
request.getRequestDispatcher("/set.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
seb.servlet包下的SetServlet
import domain.User;
import org.apache.commons.beanutils.BeanUtils;
import service.UserService;
import service.impl.UserServiceImpl;
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 java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
@WebServlet("/SetServlet")
public class SetServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
// 1.获取页面信息封装给user
User user=new User();
UserService userService=new UserServiceImpl();
Map<String, String[]> parameterMap = request.getParameterMap();
try {
BeanUtils.populate(user,parameterMap);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
// 2.修改信息
userService.set(user);
// 3.跳转到主页
request.getRequestDispatcher("/UserServlet").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
seb.servlet包下的UserServlet
import dao.UserDao;
import dao.impl.UserDaoImpl;
import domain.User;
import service.UserService;
import service.impl.UserServiceImpl;
import javax.jws.soap.SOAPBinding;
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 java.io.IOException;
import java.util.List;
//servlet层,主要是操作service层。并获取其返回的信息
@WebServlet("/UserServlet")
public class UserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
UserService userService = new UserServiceImpl();
// 1.获取查询信息
List<User> all = userService.findAll();
// 2.将获取到的信息进行发送
request.setAttribute("user", all);
// 3.跳转到主页
request.getRequestDispatcher("/show.jsp").forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
添加页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>add</title>
</head>
<body>
<%--添加对象信息页面--%>
<form action="AddServlet" method="post">
<table align="center" style="float: top" border="1">
<tr>
<th>
male<input type="radio" name="sex">
female<input type="radio" name="sex">
</th>
</tr>
<tr>
<th>
age<input type="text"name="age" value="age">
</th>
</tr>
<tr>
<th>
address<input type="text" name="address" value="address">
</th>
</tr>
<tr>
<th>
qq<input type="text" name="qq" value="qq">
</th>
</tr>
<tr>
<th>
email<input type="text" name="email" value="email">
</th>
</tr>
<tr>
<th>
<input type="submit" name="submit">
</th>
</tr>
</table>
| email --%>
</form>
</body>
</html>
主页
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>index</title>
</head>
<body>
<form action="LoginServlet" method="post">
username<input type="text" name="username">
password<input type="password" name="password">
<input type="submit" name="submit">
</form>
</body>
</html>
修改页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>set</title>
</head>
<body>
<%--注意这里的细节:由于el的作用范围有限,我们不妨把通过el表达式获取到的id信息直接传给SetServlet--%>
<form action="SetServlet?id=${user.id}" method="post">
<table align="center" style="float: top" border="1">
<tr>
<th>
male<input type="radio" name="sex" value="${user.gender}">
female<input type="radio" name="sex"value="${user.gender}">
</th>
</tr>
<tr>
<th>
age<input type="text"name="age" value="${user.age}">
</th>
</tr>
<tr>
<th>
address<input type="text" name="address" value="${user.address}">
</th>
</tr>
<tr>
<th>
qq<input type="text" name="qq" value="${user.qq}">
</th>
</tr>
<tr>
<th>
email<input type="text" name="email" value="${user.email}">
</th>
</tr>
<tr>
<th>
<input type="submit" name="submit">
</th>
</tr>
</table>
</form>
</body>
</html>
信息展示页
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>show</title>
</head>
<body>
<div>
<div style="float: left">
<form class="form-inline">
<label for="exampleInputName1">姓名</label>
<input type="text" class="form-control" id="exampleInputName1">
<label for="exampleInputName2">籍贯</label>
<input type="text" class="form-control" id="exampleInputName2">
<label for="exampleInputEmail2">Email</label>
<input type="email" class="form-control" id="exampleInputEmail2">
<button type="submit" class="btn btn-default">查询</button>
</form>
</div>
<div style="float:right;">
<a href="add.jsp"><input type="button" name="add" value="添加联系人"></a>
<input type="button" name="del" value="删除选中">
</div>
<br>
<table align="center" border="1">
<tr bgcolor="yellow">
<th>
选择
</th>
<th>
编号
</th>
<th>
账号
</th>
<th>
密码
</th>
<th>
性别
</th>
<th>
年龄
</th>
<th>
地址
</th>
<th>
qq
</th>
<th>
email
</th>
<th>操作</th>
</tr>
<c:forEach items="${user}" var="s" varStatus="a">
<tr>
<th>
<input type="checkbox">
</th>
<th>
${a.count}
</th>
<th>
${s.username}
</th>
<th>
${s.password}
</th>
<th>
${s.gender}
</th>
<th>
${s.age}
</th>
<th>
${s.address}
</th>
<th>
${s.qq}
</th>
<th>
${s.email}
</th>
<th>
<%-- 注意这里,同样将id传递过去,以通过该id索引相应的信息--%>
<a href="SelectAllServlet?id=${s.id}">
<input type="submit" name="id" value="set">
</a>
<a href="DelServlet?id=${s.id}">
<input type="submit" name="id" value="del">
</a>
</th>
</tr>
</c:forEach>
</table>
<div style="">
<nav aria-label="Page navigation">
<ul class="pagination">
<a href="#" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
<a href="#">1</a>
<a href="#">2</a>
<a href="#">3</a>
<a href="#">4</a>
<a href="#">5</a>
<a href="#" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</ul>
</nav>
</div>
</div>
</body>
</html>