黑马程序员技术交流社区

标题: 综合练习_用户管理Servlet优化 [打印本页]

作者: zhouyan19901008    时间: 2018-10-15 19:18
标题: 综合练习_用户管理Servlet优化
本帖最后由 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();
        }
    }


作者: hguilin    时间: 2018-10-16 12:51
研哥牛逼
作者: 黑马啸西风    时间: 2018-10-18 18:00
有才,有深度,有内涵。研哥果然是黑马大神。
作者: TomGe    时间: 2018-10-18 18:38
研个总结到位,分析的透彻小花送上。
作者: 奥斯托洛夫斯基    时间: 2018-10-18 18:44
哇,学习了学习了,受教了受教了,大神请不要断更
作者: 天亮1    时间: 2018-10-18 18:58
石开哥
作者: 项老师    时间: 2018-10-18 18:59
研个总结到位,分析的透彻!6666
作者: 天亮1    时间: 2018-10-18 19:04
石开哥,总结详细, 易懂
作者: 鸟语花香    时间: 2018-10-19 13:37
大神大神
作者: hguilin    时间: 2018-10-19 19:59
在此看见石开哥的文章实属荣幸呢
作者: 我开心你随意    时间: 2018-10-25 16:08
厉害
作者: 斑马斑马四条腿    时间: 2018-11-11 14:07
石开哥流弊 (破音)!
作者: getMax    时间: 2018-11-13 07:28
大神啊,初出茅庐的小弟我对大哥的敬仰之情,犹如滔滔江水连绵不绝




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2