本帖最后由 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();
}
}
|