Servlet方法的抽取

简单的利用Java的反射进行对Servlet方法的抽取

first:首先我们要明白,什么是一个servlet?
Servlet是运行在Web服务器上的代码片段(组件),用于处理用户的http请求,是Sun公司定义的JavaEE的组件规范,然而Web服务器并不只有我们见过的tomcat,先列举一下常见的web容器-服务器
1.Tomcat Apache基金组织(开源,免费)支持JavaEE的部份规范
2. webLogic:oracle公司(收费)支持所有的JAVAEE规范
3. webSphere:IBM公司(收费)支持所有的JAVAEE规范
4. JBOSS:JBOSS公司的(文档服务等收费)支持所有的JAVAEE规范
JAVAEE规范就是我们常用的JDBC,XML,JSP,Servlet,EJB等十三个规范
我有讲过servlet的结构体系并说过他们各自的作用
Servlet(接口)->GenericServlet(抽象类)->HttpServlet
second:我们要明白每次访问Servlet他会总要执行服务(service())方法
然后GenericServlet这个抽象类就是将其他生命周期方法进行(可以理解为做空),只讲service()方法改写成抽象方法,所以我们可以在这里做文章

/**
*控制台,操纵并跳转对应的方法
*/
public class DispatcherServlet extends GenericServlet{
	private static final long serialVersionUID = 2931709688095184937L;
	@Override
	public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
		HttpServletRequest req = (HttpServletRequest)request;
		HttpServletResponse resp = (HttpServletResponse)response;
		String methodUri = req.getRequestURI();
		String methodName = methodUri.substring(methodUri.lastIndexOf("/")+1);//将你访问的uri截取
		Method method;
		try {
			method = this.getClass().getDeclaredMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);//简单用了一下Java的反射
			//这的this是谁,代表谁
			method.setAccessible(true);//可写可不写,因为看你的方法类的方法是否是公共私有的-他是一个开关
			method.invoke(this, req,resp);//调用methodName方法
		} catch (Exception  e) {
			e.printStackTrace();
		}
		
	}
	
}

third:并创建一个类来继承这个DispatcherServlet(servlet)并写对应的方法

/**
 * 
 * 拦截路径为  虚拟路径/login/*  
 * 虚拟路径一般之项目名
 *
 */
@WebServlet("/login/*")
public class LoginServlet extends DispatcherServlet{

	private static final long serialVersionUID = 8413304431967299782L;
	public void userLogin(HttpServletRequest req,HttpServletResponse resp)throws Exception{
		//方法体
	}
	
}

他拦截/login/*的请求,就会调用父类的service方法(这就无需解释了,基础问题)如果市虚拟路径/login/userLogin他就会访问这个userLogin方法
**last:**代码还有好多拓展性,优化,比如访问一个/login/userRegister
LoginServlet 这个servlet里面没有这个对应的方法会报错,所以会有很多优化的问题,并且在前端请求访问的路径必须加上/a/b的形式,a代表一个类别,比如login是跟登录一系列的有关系的,而 b代表a里面对应的登录的一系列的方法。

对于像为什么要强转request,response之类的,可以自己根据自己的风格来做,我是在Dispatcher做的强转,对于Java的反射也只是会一些皮毛,如果要是想问LoginServlet里面的方法为什么抛异常,这个问题,你可以先去编一编,就会知道了,动一动手的啊!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值