通过反射减少 if else
####前端代码 <form action="UserServlet?method=login" method="post">
后端通过UserServlet映射 获取当前的method
后端部分代码
try {
String method = req.getParameter("method");
//参数的类型
//参数类型如何定义 是因为login或者regist调用,那么他们的参数又是 <HttpServletRequest HttpServletResponse>
Method method1 = this.getClass().getDeclaredMethod(method, HttpServletRequest.class, HttpServletResponse.class);
//参数的 this就是指当前对象 谁调用就是哪一个
// method1是什么就会执行什么方法 比如 method1是login,就会执行login的方法
method1.invoke(this, req, resp);
} catch (Exception e) {
e.printStackTrace();
}
减少了以下代码的频繁 if else
if ("login".equals(method)) {
// login(req, resp);
// } else if ("regist".equals(method)) {
// Regist(req, resp);
// }
method1.是指哪个对象,是指前端中的method的数据,判断是login还是regist,然后调用方法 此次是加入获取到参数
method是login,那么就是直接调用login的方法
下图为 login方法的例子
protected void login(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
//1、获取用户输入的参数
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println("获取到信息");
//2、响应方法 对接数据库
User user = userService.getUser(new User(null, username, password, null));
// User user = userService.getBean(username, password);
//3、判断业务进行跳转
System.out.println(req.getContextPath());
if (user != null) {
//重定向 登录成功
resp.sendRedirect(req.getContextPath() + "/pages/user/login_success.jsp");
System.out.println("======================");
} else {
//登录失败
req.setAttribute("msg", "用户名密码错误,请重新输入");
req.getRequestDispatcher("/pages/user/login.jsp").forward(req, resp);
}
}