1.思维导图

2.代码部分
监听器的注解开发
@WebListener
public class MyServletContextLIstener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("ServletContext创建");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("ServletContext销毁");
}
}
综合案例:用户列表
@Override
public List<User> selectUserList() throws Exception {
return new QueryRunner(JDBCUtil.getDataSource())
.query("select * from tb_user",
new BeanListHandler<User>(User.class));
}
@WebServlet(name = "ShowIndexServlet" ,urlPatterns = "/showIndex")
public class ShowIndexServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
User existUser = (User) request.getSession().getAttribute("existUser");
StringBuffer responseBody = new StringBuffer();
if (null != existUser) {
//已经在登录状态
responseBody.append("欢迎回来~ " + existUser.getUsername());
responseBody.append(" <a href='/day60/logout'>注销</a><br>");
//获取用户列表
UserDao userDao = new UserDaoImpl();
try {
List<User> userList = userDao.selectUserList();
System.out.println(userList);
responseBody.append("<table border='1px' cellspaceing='0px' cellpadding='10px' width='500px' height='200px'>");
responseBody.append("<tr>");
responseBody.append("<td>ID</td>");
responseBody.append("<td>账户</td>");
responseBody.append("<td>密码</td>");
responseBody.append("</tr>");
for (User user : userList) {
//遍历一个User对象,对应就应该有一个tr
responseBody.append("<tr>");
responseBody.append("<td>"+user.getId()+"</td>");
responseBody.append("<td>"+user.getUsername()+"</td>");
responseBody.append("<td>"+user.getPassword()+"</td>");
responseBody.append("</tr>");
}
responseBody.append("</table>");
} catch (Exception e) {
e.printStackTrace();
}
} else {
//不在登录状态
responseBody.append("您还没有登录,<a href='/day60/login.html'>请登录</a><br>");
}
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(responseBody.toString());
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
综合案例:删除用户
@Override
public void deleteUserById(Integer id) throws Exception {
new QueryRunner(JDBCUtil.getDataSource())
.update("delete from tb_user where id = ?",
id);
}
responseBody.append("<table border='1px' cellspaceing='0px' cellpadding='10px' width='500px' height='200px'>");
responseBody.append("<tr>");
responseBody.append("<td>ID</td>");
responseBody.append("<td>账户</td>");
responseBody.append("<td>密码</td>");
responseBody.append("<td>操作</td>");
responseBody.append("</tr>");
for (User user : userList) {
if ( user.getId() != existUser.getId()) {
//遍历一个User对象,对应就应该有一个tr
responseBody.append("<tr>");
responseBody.append("<td>"+user.getId()+"</td>");
responseBody.append("<td>"+user.getUsername()+"</td>");
responseBody.append("<td>"+user.getPassword()+"</td>");
responseBody.append("<td><a href='/day60/deleteUser?id="+user.getId()+"'>删除</a></td>");
responseBody.append("</tr>");
}
}
responseBody.append("</table>");
@WebServlet(name = "DeleteUserServlet" ,urlPatterns = "/deleteUser")
public class DeleteUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String idStr = request.getParameter("id");
Integer id = Integer.parseInt(idStr);
UserDao userDao = new UserDaoImpl();
try {
userDao.deleteUserById(id);
} catch (Exception e) {
e.printStackTrace();
}
response.sendRedirect("/day60/showIndex");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
综合案例:批量删除
public void deleteUsersByIds(List<Integer> idList) throws Exception {
for (Integer id : idList) {
deleteUserById(id);
}
}
responseBody.append("<form action='/day60/deleteUsers' method='post'>");
responseBody.append("<table border='1px' cellspaceing='0px' cellpadding='10px' width='500px' height='200px'>");
responseBody.append("<tr>");
responseBody.append("<td></td>");
responseBody.append("<td>ID</td>");
responseBody.append("<td>账户</td>");
responseBody.append("<td>密码</td>");
responseBody.append("<td>操作</td>");
responseBody.append("</tr>");
for (User user : userList) {
if ( user.getId() != existUser.getId()) {
//遍历一个User对象,对应就应该有一个tr
responseBody.append("<tr>");
responseBody.append("<td><input name='ids' type='checkbox' value='"+user.getId()+"'></td>");
......
responseBody.append("</tr>");
}
}
responseBody.append("</table>");
responseBody.append("<button type='submit'>批量删除</button>");
responseBody.append("</form>");
综合案例:添加用户
public void addUser(User inputUser) throws Exception {
new QueryRunner(JDBCUtil.getDataSource())
.update("insert into tb_user(username ,password) values(?,?)",
inputUser.getUsername(),
inputUser.getPassword());
}
//已经在登录状态
responseBody.append("欢迎回来~ " + existUser.getUsername());
responseBody.append(" <a href='/day60/logout'>注销</a><br>");
responseBody.append("<a href='/day60/add.html'>添加用户</a><br>");
@WebServlet(name = "AddUserServlet" ,urlPatterns = "/addUser")
public class AddUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
User inputUser = new User();
inputUser.setUsername(username);
inputUser.setPassword(password);
//方式一:在添加之前,校验下用户名是否存在
//方式二:让username字段有唯一约束!
UserDao userDao = new UserDaoImpl();
try {
userDao.addUser(inputUser);
//添加成功,跳转到首页
response.sendRedirect("/day60/showIndex");
} catch (Exception e) {
e.printStackTrace();
//添加失败,跳转到添加用户页面
response.sendRedirect("/day60/add.html");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
综合案例:修改用户
@Override
public void updateUser(User user) throws Exception {
new QueryRunner(JDBCUtil.getDataSource())
.update("update tb_user set username = ? , password = ? where id = ?",
user.getUsername(),
user.getPassword(),
user.getId());
}
for (User user : userList) {
if ( user.getId() != existUser.getId()) {
//遍历一个User对象,对应就应该有一个tr
responseBody.append("<tr>");
responseBody.append("<td><input name='ids' type='checkbox' value='"+user.getId()+"'></td>");
responseBody.append("<td>"+user.getId()+"</td>");
responseBody.append("<td>"+user.getUsername()+"</td>");
responseBody.append("<td>"+user.getPassword()+"</td>");
responseBody.append("<td>" +
"<a href='/day60/deleteUser?id="+user.getId()+"'>删除</a> " +
"<a href='/day60/showUpdateUser?id="+user.getId()+"'>修改</a>"+
"</td>");
responseBody.append("</tr>");
}
}
@WebServlet(name = "ShowUpdateUserServlet" , urlPatterns = "/showUpdateUser")
public class ShowUpdateUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Integer id = Integer.parseInt(request.getParameter("id"));
//根据id查询用户
UserDao userDao = new UserDaoImpl();
StringBuffer responseBody = new StringBuffer();
try {
User user = userDao.selectUserById(id);
System.out.println(user);
responseBody.append("<form action='/day60/updateUser' method='post'>");
responseBody.append("<input type='hidden' name='id' value='"+user.getId()+"'/>");
responseBody.append("账户:<input type='text' name='username' value='"+user.getUsername()+"'/><br>");
responseBody.append("密码:<input type='text' name='password' value='"+user.getPassword()+"'/><br>");
responseBody.append("<button type='submit'>修改</button>");
responseBody.append("</form>");
} catch (Exception e) {
e.printStackTrace();
}
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(responseBody.toString());
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
@WebServlet(name = "UpdateUserServlet" ,urlPatterns = "/updateUser")
public class UpdateUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Integer id = Integer.parseInt(request.getParameter("id"));
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("username : " + username + ", password : " + password);
//要修改的内容:username、password
User user = new User(id,username,password);
UserDao userDao = new UserDaoImpl();
try {
userDao.updateUser(user);
//修改成功,跳转到首页
response.sendRedirect("/day60/showIndex");
} catch (Exception e) {
e.printStackTrace();
//修改失败,跳转到修改页面
response.sendRedirect("/day60/showUpdateUser?id="+id);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
BaseServlet应用
@WebServlet(name = "UserServlet",urlPatterns = "/user")
public class UserServlet extends BaseServlet {
public void login(HttpServletRequest request,HttpServletResponse response){
String username = request.getParameter("username");
String password = request.getParameter("password");
User inputUser = new User();
inputUser.setUsername(username);
inputUser.setPassword(password);
UserDao userDao = new UserDaoImpl();
try {
User existUser = userDao.login(inputUser);
if (null == existUser) {
//登录失败
request.getRequestDispatcher("/login.html").forward(request,response);
} else {
//登录成功
request.getSession().setAttribute("existUser",existUser);
response.sendRedirect("/day61/user?methodName=showIndex");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void showIndex(HttpServletRequest request , HttpServletResponse response) throws Exception {
System.out.println("showIndex");
User existUser = (User) request.getSession().getAttribute("existUser");
StringBuffer responseBody = new StringBuffer();
if (null != existUser) {
//在登录状态
responseBody.append("欢迎回来"+existUser.getUsername());
responseBody.append("<a href='/day61/user?methodName=logout'>注销登录</a>");
} else {
//不在登录状态
responseBody.append("您还没有登录;");
responseBody.append("<a href='/day61/login.html'>请登录</a>");
}
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(responseBody.toString());
}
public void logout(HttpServletRequest request , HttpServletResponse response) throws Exception {
request.getSession().invalidate();
response.sendRedirect("/day61/login.html");
}
}
BaseServlet优化
@WebServlet(name = "BaseServlet",urlPatterns = "/base")
public class BaseServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
String methodName = request.getParameter("methodName");
try {
Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
if (null != method) {
//处理返回值,为了资源跳转
String returnValue = (String) method.invoke(this,request,response);
System.out.println(returnValue);
//有的方法有返回值
//登录成功:重定向 redirect:/day61/user?methodName=showIndex
//登录失败: 请求转发 forward:/login.html
//有的方法没有返回值
//null,不用做任何处理
if (returnValue != null){
//有返回值,实现资源跳转,需要资源的路径
if (returnValue.lastIndexOf(":") != -1) {
String path = returnValue.split(":")[1];
System.out.println("path : "+path);
//有":"
//实现资源跳转:重定向、请求转发
if (returnValue.startsWith("redirect")) {
//重定向
response.sendRedirect(request.getContextPath()+path);
} else if(returnValue.startsWith("forward")){
//请求转发
request.getRequestDispatcher(path).forward(request,response);
}
} else {
//没有":",默认就是转发 /login.html
request.getRequestDispatcher(returnValue).forward(request,response);
}
} else {
//不做任何处理
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}