1.BaseServlet类能够使后端的提交路径更加统一,逻辑结构更加清晰:
--BaseServlet类继承HttpServlet,重写HttpServlet的service()方法
--给每次的请求和响应统一设置编码
--获取每次请求携带的需要请求的方法名
--this.getClass()获取当前servlet类的class类对象
--this.getClass.getMethod()获取当前类的某个方法对象,参数有(方法名, HttpServletRequest.class,HttpServletResponse.class)
-- .invoke()是一个调用方法的方法,参数(Object obj,Object...args),obj代表调用方法所在的对象,args是一个可变参数表示调用方法的参数列表。
public class BaseServlet extends HttpServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.设编
request.setCharacterEncoding("UTF-8");
response.setContentType("json/application;charset=utf-8");
//2.获取方法参数
String method = request.getParameter("method");
//2.反射
try {
Method method1 = this.getClass().getMethod(method, HttpServletRequest.class, HttpServletResponse.class);
method1.invoke(this, request, response);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
2.当要实现多个业务功能时可以在一个类中实现,例如要实现删除和查询学生两个业务:
@WebServlet("/student.do")
public class StudentServlet extends BaseServlet{
StudentService studentService = new StudentServiceImpl();
/**
* 查询学生
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void queryStudentList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Student> students = studentService.queryStudent();
response.getWriter().print(JSONObject.toJSON(students));
}
/**
*删除学生
**/
public void delStudent(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int stu_id = Integer.parseInt(request.getParameter("stu_id"));
studentService.delStudent(stu_id);
response.getWriter().print(true);
}
3.实现逻辑
通过@WebServlet()表名该类是一个Servlet类,当前端提交给该Servlet时要去找它的service方法,因为StudentServlet继承了BaseServlet,所以执行父类的的service()方法,在service方法中获取到前端要找的方法名,通过invoke()方法调用前端所需求的方法,以至于实现相应的业务。