A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 zhouyan19901008 于 2018-10-15 19:46 编辑

综合练习_用户管理Servlet优化
1.需求分析
           用户查询、添加、删除、修改等功能需要很多Servlet来处理,但是处理都是和User相关的操作,因此我们希望使用一个servlet完成所有商品相关的操作,实现代码的简单优化
2.简单优化 -- 逻辑判断方式
实现步骤:   
1. 修改页面路径
              查询所有用户:  <a href="${pageContext.request.contextPath}/userServlet?method=findAll" ">查询所有用户信息</a>
              查询指定用户:  <a href="${pageContext.request.contextPath}/userServlet?method=findById&id=${user.id}">修改</a>
2.  编写UserServlet. 根据传递的参数method不同,调用Servlet中
相应的方法.
package cn.itcast.web.servlet;
import cn.itcast.domain.User;
import cn.itcast.service.UserService;
import cn.itcast.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.lang.reflect.Method;
import java.util.List;
/**
* 用户管理Servlet
*/
@WebServlet("/userServlet")
public class UserServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            //1. 获取method参数值
String methodStr = request.getParameter("method");
            //2. 根据参数值,调用对应的方法
if("findAll".equals(methodStr)){
                findAll(request,response);
            }else if("findById".equals(methodStr)){
                findById(request,response);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 根据id查询指定用户信息
*/
public void findById(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1. 获取查询用户的id
String id = request.getParameter("id");
        //2. 调用service查询,返回User对象
UserService service = new UserServiceImpl();
        User user =  service.findUserById(id);
        //3. 将查询的User添加到reqeust域中
request.setAttribute("user",user);
        //4. 请求转发到update页面
request.getRequestDispatcher("/update.jsp").forward(request,response);
    }

    /**
     * 查询所有用户信息
*/
public void findAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.调用UserService完成查询
UserService service = new UserServiceImpl();
        List<User> users = service.findAll();
        //2.list存入request
request.setAttribute("users",users);
        //3.转发到list.jsp
request.getRequestDispatcher("/list.jsp").forward(request,response);
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}
3.高级优化 -- 基于反射机制方式实现步骤1. 修改页面路径
              查询所有用户:  <a href="${pageContext.request.contextPath}/userServlet?method=findAll" ">查询所有用户信息</a>
              查询指定用户:  <a href="${pageContext.request.contextPath}/userServlet?method=findById&id=${user.id}">修改</a>
2. 编写UserServlet. 根据传递的参数method不同,使用反射机制,调用相应的方法
@WebServlet("/userServlet")
public class UserServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            //1. 获取method参数值
String methodStr = request.getParameter("method");
            //2. 根据参数值,调用对应的方法//反射
//2.1 获取类的Class字节码对象
Class clazz= this.getClass();
            //2.2 获取类的方法
Method method = clazz.getMethod(methodStr,HttpServletRequest.class,HttpServletResponse.class);
            //2.3 执行方法
method.invoke(this,request,response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

点评

发表于 2018-10-16 19:12

评分

参与人数 1黑马币 +5 收起 理由
空太 + 5 赞一个!

查看全部评分

13 个回复

正序浏览
getMax 中级黑马 2018-11-13 07:28:19
13#
大神啊,初出茅庐的小弟我对大哥的敬仰之情,犹如滔滔江水连绵不绝
回复 使用道具 举报
石开哥流弊 (破音)!
回复 使用道具 举报
厉害
回复 使用道具 举报
在此看见石开哥的文章实属荣幸呢
回复 使用道具 举报
大神大神
回复 使用道具 举报
天亮1 中级黑马 2018-10-18 19:04:59
8#
石开哥,总结详细, 易懂
回复 使用道具 举报
研个总结到位,分析的透彻!6666
回复 使用道具 举报
石开哥
回复 使用道具 举报
哇,学习了学习了,受教了受教了,大神请不要断更
回复 使用道具 举报
研个总结到位,分析的透彻小花送上。
回复 使用道具 举报
有才,有深度,有内涵。研哥果然是黑马大神。
回复 使用道具 举报
研哥牛逼
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马