Educoder/头歌JAVA——JavaWeb:JSP基础之网站用户管理

本文介绍了一个用户管理系统中四个核心Servlet的实现方法,包括显示所有用户列表、显示具体用户信息、添加用户及删除指定用户等功能。文章详细展示了如何利用HttpServletRequest对象进行数据传递、如何通过UserDao类操作数据库以及如何在不同场景下使用JSP页面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

第1关:显示所有用户列表

任务描述

相关知识

为HttpServletRequest对象设置变量

将数据填充到jsp页面

 第2关:显示具体用户信息

任务描述

相关知识

从url中获取参数

获取数据并填充jsp页面

 第3关:添加用户

任务描述

相关知识

传递表单数据

 第4关:删除指定用户

任务描述

相关知识

从url中获取参数

第1关:显示所有用户列表

任务描述

本关任务:完成AllUsersServlet类的编写,实现所有用户信息列表展示功能,将用户信息展示于页面上。其中用户信息保存在数据库中,可直接使用数据库操作类UserDao进行数据查询获取等操作。

相关知识

为了完成本关任务,你需要掌握:1. 如何为HttpServletRequest对象设置变量;2. 如何将数据填充到jsp页面。

另外,我们已经封装了数据库操作类UserDao,该类的getAllUsers()方法可以从数据库中获取到全部用户纪录。在本关中,你无需重复实现该类以及相关方法。

为HttpServletRequest对象设置变量

setAttribute()用来在同一个request周期中保存变量使用。 比如servlet调用后,引出JSP页面,这是一个request周期。如果在Jsp页面需要servlet中的一些处理结构,就使用request.getAttribute()方法获取。

  1. User u=new User("小明",18);
  2. request.setAttribute("user", u);

将数据填充到jsp页面

request.getRequestDispatcher().forward(request,response)是请求分发器也称转发。我们通过request.setAttribute(key, value)设定request的变量后,就可以使用RequestDispatcher接口的forward()方法将request对象共享了。

  1. 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),通过该方法,我们可以获取到传入参数的具体值。

  1. 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*********/

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陆小玖

您的鼓励是我的不竭动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值