利用反射简化(抽象)Servlet层
前言:
servlet封装用户提交的数据使用service进行加工(如果业务需要)。然后在service中调用dao进行数据持久化。
但是,如果写一个增删改查就要使用五个servlet。
很不方便,所以在此利用反射给它抽象。
步骤:
step1:
先有一个比较全的servlet
StuServlet.java
package com.zzxtit.mvc.stu.action;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zzxtit.mvc.common.servlet.BaseServlet;
/*
增加学生信息:访问stu.do?handler=addStu 调用addStu(request,response);
*这样?写路径是个get请求
删除学生信息:访问stu.do?handler=delStu 调用delStu(request,response);
*这样传的值跟方法名相同。可以用反射调用这些方法
*
*/
@WebServlet("/stu.do")
public class StuServlet extends BaseServlet{
/**
*
*/
private static final long serialVersionUID = 7802644270105085147L;
public void addStu(HttpServletRequest request,HttpServletResponse response){
System.out.println(" 添加学生信息。。。。。。。。。。。。");
}
public void delStu(HttpServletRequest request,HttpServletResponse response){
System.out.println(" 删除学生信息。。。。。。。。。。。。");
}
public void selectStu(HttpServletRequest request,HttpServletResponse response){
System.out.println(" 查询学生信息。。。。。。。。。。。。");
}
public void changeStu(HttpServletRequest request,HttpServletResponse response){
System.out.println(" 修改学生信息。。。。。。。。。。。。");
}
public void printStu(HttpServletRequest request,HttpServletResponse response){
System.out.println(" 打印所有学生信息。。。。。。。。。。。。");
}
}
step2:
然后写一个base(基础、通用、抽象)servlet
BaseServlet.java
package com.zzxtit.mvc.common.servlet;
import java.lang.reflect.Method;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class BaseServlet extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response){
doPost(request,response);
}
public void doPost(HttpServletRequest request,HttpServletResponse response){
String handler=request.getParameter("handler");//handler就是方法名
//要通过handler去获取方法
//这里this代表stuServlet。因为stu里面没有去声明doGet和doPost直接去继承父类了。
try {//获取传递来的方法名
Method method=this.getClass().getDeclaredMethod(handler, HttpServletRequest.class,HttpServletResponse.class);
method.invoke(this, request, response);//实现这个方法
} catch (NoSuchMethodException e) {
throw new RuntimeException("无此方法:"+handler+"\n Exception"+e);
} catch (Exception e) {
throw new RuntimeException("此方法:"+this.getClass()+"."+handler+"\n 产生异常:Exception"+e);
}
}
}
测试的时候jsp里写 stu.do? handler=addStu。就可以传递数据。
484很方便呢