目录
第1关:显示所有用户列表
任务描述
本关任务:完成AllUsersServlet
类的编写,实现所有用户信息列表展示功能,将用户信息展示于页面上。其中用户信息保存在数据库中,可直接使用数据库操作类UserDao
进行数据查询获取等操作。
相关知识
为了完成本关任务,你需要掌握:1. 如何为HttpServletRequest
对象设置变量;2. 如何将数据填充到jsp
页面。
另外,我们已经封装了数据库操作类UserDao
,该类的getAllUsers()
方法可以从数据库中获取到全部用户纪录。在本关中,你无需重复实现该类以及相关方法。
为HttpServletRequest对象设置变量
setAttribute()
用来在同一个request
周期中保存变量使用。 比如servlet
调用后,引出JSP
页面,这是一个request
周期。如果在Jsp
页面需要servlet
中的一些处理结构,就使用request.getAttribute()
方法获取。
User u=new User("小明",18);
request.setAttribute("user", u);
将数据填充到jsp页面
request.getRequestDispatcher().forward(request,response)
是请求分发器也称转发。我们通过request.setAttribute(key, value)
设定request
的变量后,就可以使用RequestDispatcher
接口的forward()
方法将request
对象共享了。
req.getRequestDispatcher("xxx.jsp").forward(request, response);
此时,xxx.jsp
将接收到传入的request
对象,可以做进一步的适配数据了。
package com.yotam.servlet;
import com.yotam.bean.User;
import com.yotam.dao.UserDao;
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.Collection;
@WebServlet("/users")
public class AllUsersServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*********Begin*********/
UserDao user=new UserDao();
req.setAttribute("model", user.getAllUsers());
req.getRequestDispatcher("users.jsp").forward(req, resp);
/*********End*********/
}
}
第2关:显示具体用户信息
任务描述
本关任务:完成ShowUserServlet
类的编写,实现对某个用户具体用户信息的查询与显示。首先,需要从具体的http
请求中获取到指定的需要进行展示的用户ID
,然后,对该指定用户进行信息查询和页面展示。
相关知识
为了完成本关任务,你需要掌握:1.如何获取和处理url
中的挂参;2.如何获取用户信息数据并将数据填充至jsp
页面。
数据库操作类UserDao
提供了用户信息查询方法getUser(userId)
,在本关中,你可直接使用该方法进行数据库查询操作,无需重复实现数据库操作类以及相关方法。
从url中获取参数
url
中问号("?")后面可接需要传递的参数,如https://www.educoder.net?user=xxx
,即表示将参数user=xxx
传入。HttpServletRequest
类为我们提供了解析传入参数的方法getParameter(keyName)
,通过该方法,我们可以获取到传入参数的具体值。
String user = req.getParameter("user");
获取数据并填充jsp页面
我们已经提供了数据库访问类UserDao
,通过该类的getUser(userId)
方法,可以取得该用户ID
所对应的数据库记录。
获取用户具体数据后,我们需要将数据动态填充到jsp
页面中,该过程与上一关:“显示所有用户列表”相仿。我们通过request.setAttribute(key, value)
设定request
的变量后,就可以使用RequestDispatcher
接口的forward()
方法将该request
转发到对应的jsp
页面并获取到渲染结果了。
package com.yotam.servlet;
import com.yotam.bean.User;
import com.yotam.dao.UserDao;
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;
// This servlet must be called: /showuser?id=<username>
@WebServlet("/showuser")
public class ShowUserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*********Begin*********/
String user = req.getParameter("id");
UserDao p = new UserDao();
req.setAttribute("model", p.getUser(user));
req.getRequestDispatcher("showuser.jsp").forward(req, resp);
/*********End*********/
}
}
第3关:添加用户
任务描述
本关任务:完成AddUserServlet
类的编写,实现添加用户的功能。要求在页面完成新用户表单填写后,可将相关新用户信息持久化到数据库中,并要求在完成用户添加后重定向至用户详细信息显示页面。
相关知识
为了完成本关任务,你需要掌握:如何传递表单数据并实现数据持久化。
另外,你依然可以直接使用UserDao
类进行数据库相关操作。addUser(User user)
方法提供了将User
类对象持久化到数据库中的功能,你无需重复实现相关操作类以及方法。
传递表单数据
POST
操作和GET
操作都是最为常用的http
请求操作。在本课程的前面两个关卡中,我们重点关注了如何通过GET
操作来获取指定的页面,而在本关卡中,我们将学习通过POST
操作来传递表单数据。
完成jsp
页面的表单填写后,我们依然可以用HttpServletRequest
类的getParameter(keyName)
方法来获取需要传递的表单参数。获取到所填参数后,即可获取到一个对应的User
类对象,并通过UserDao
类所提供的addUser(user)
方法进行用户添加了。
package com.yotam.servlet;
import com.yotam.bean.User;
import com.yotam.dao.UserDao;
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.Arrays;
import java.util.List;
@WebServlet("/adduser")
public class AddUserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*********Begin*********/
String name=req.getParameter("name");
String phone=req.getParameter("phone");
String str=req.getParameter("friends");
List friends = Arrays.asList(str.split(","));
User user = new User(name,phone);
user.setFriends(friends);
UserDao us= new UserDao();
us.addUser(user);
req.setAttribute("model", user);
req.getRequestDispatcher("showuser.jsp").forward(req,resp);
/*********End*********/
}
}
第4关:删除指定用户
任务描述
本关任务:实现用户管理功能之用户删除,完成DelUserServlet
类的编写。
相关知识
为了完成本关任务,你需要掌握:如何正确地获取指定被删除用户的name
,并最终将用户列表的改动持久化到数据库中。
数据库操作类UserDao
提供了删除方法delUser(name)
,在本关中,你可直接使用该方法进行数据删除操作,无需重复实现数据库操作类以及相关方法。
从url中获取参数
url
中问号(?
)后面可接需要传递的参数,如https://www.educoder.net?user=xxx
,即表示将参数user=xxx
传入。HttpServletRequest
类为我们提供了解析传入参数的方法getParameter(keyName)
,通过该方法,我们可以获取到传入参数的具体值。
为了获取需要删除的用户,我们首先需要捕获删除请求url
中所携带的用户name
参数,然后便可以通过用户name
参数锁定具体的需要被删除的用户,完成用户删除。
package com.yotam.servlet;
import com.yotam.bean.User;
import com.yotam.dao.UserDao;
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.Collection;
@WebServlet("/deluser")
public class DelUserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*********Begin*********/
String name = req.getParameter("name");
UserDao userDao = new UserDao();
Boolean isDeleted = userDao.delUser(name);
if(!isDeleted){
resp.setStatus(404);
req.getRequestDispatcher("updatefail.jsp").forward(req,resp);
}
Collection<User> users = userDao.getAllUsers();
req.setAttribute("model",users);
req.getRequestDispatcher("users.jsp").forward(req,resp);
/*********End*********/
}
}