利用反射简化(抽象)Servlet层

利用反射简化(抽象)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很方便呢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值