java-web 抽取公共servlet类

124 篇文章 1 订阅
96 篇文章 0 订阅

javaweb项目中随着功能的增加servlet文件的数目也随着增加,如果每个功能都写一个servlet最后文件量是相当大的。

有效的解决方法是从前端链接传来方法名,在servlet中获得方法名并执行,但这样有一点繁琐的事需要在doget或dopost方法中做判断。

还有一种方法就是抽取公共的servlet继承HttpServlet重写service方法,利用反射技术执行继承了该公共类的子类中相应的方法。

每个子类返回一个字符串来表明需要转发的地址,重定向的直接在子类中执行就可以。如无需跳转返回null。

index方法类似一个通用方法,这里用来执行空参数跳转主页。

代码如下:
 

 

package com.store.web.servlet;

import java.io.IOException;
import java.lang.reflect.Method;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class BaseServlet extends HttpServlet {

	/**
	 * 通过页面传来的method值来判断方法名,执行继承此类对象的该方法。
	 */
	@Override
	public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		try {
			//获得页面传来的方法
			String methodName = request.getParameter("method");
                        //如果为空执行跳转到主页方法
			if(methodName==null) {
				methodName = "index";
			}
			//通过反射获得对象,并执行该方法
			Class clazz = this.getClass();//获得子类的对象
			//获得方法
			Method method = clazz.getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
			//执行方法
			String path = (String) method.invoke(this, request, response);
			if(path!=null) {
				//规定path是方法invoke方法返回需要转发的地址
				request.getRequestDispatcher(path).forward(request, response);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} 
		
		
		
	}
	
	/**
	 * servlet通用方法每个继承此类的子类可以重写这个方法
	 * @param request
	 * @param response
	 * @return
	 * @throws ServletException
	 * @throws IOException
	 */
	public String index(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		return null;
	}
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值