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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhouyan19901008 初级黑马   /  2018-10-15 19:18  /  1486 人查看  /  13 人回复  /   3 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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 个回复

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