BaseServlet的作用:

  我们先写一个工具类:BaseServlet。

  我们知道,写一个项目可能会出现N多个Servlet,而且一般一个Servlet只有一个方法(doGet或doPost),如果项目大一些,那么Servlet的数量就会很惊人。为了避免Servlet的“膨胀”,我们写一个BaseServlet。它的作用是让一个Servlet可以处理多种不同的请求。不同的请求调用Servlet的不同方法。我们写好了BaseServlet后,让其他Servlet继承...

  

package com.itheima.web.servlet;

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

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

/**
 * 通用的serlvet
 */
public class BaseServlet extends HttpServlet {

    @Override
    public void service(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
 
        // 设置编码表
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        // 接收参数
        String methodName = request.getParameter("method");
        //System.out.println(methodName);
        // 如果method传递的参数为空或者为空字符串,做出提示
        if (methodName == null || "".equals(methodName)) {
            methodName = "index";//不传方法名称,直接访问主页
            response.getWriter().print("method参数为null");    
        }
        // 获得子类的class对象
        /**
         * 反射 反射 反射
         * 
         * this.class代表加载继承了BaseServlet的class对象
         * 比如UserServlet继承BaseServlet,那么this.getClass()就是获取它的字节码对象
         */
        Class<? extends BaseServlet> clazz = this.getClass();
        //System.out.println(clazz);
        // 通过字节码获得子类的方法
        try {
            //通过方法名称获取方法的反射对象
            Method method = clazz.getMethod(methodName,
                    HttpServletRequest.class, HttpServletResponse.class);
            // 执行方法,获取子类return回来的字符串
            String path = (String) method.invoke(this, request, response);
            // 转发
            if (path != null) {
                request.getRequestDispatcher(path).forward(request, response);
            }
        } catch (Exception e) {

            e.printStackTrace();
        }

    }
    //所有的servlet的index方法,子类可以重写
    public String index(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        return null;
    }
}

 

posted on 2018-07-02 21:31  清风丶流音  阅读(165)  评论(0)    收藏  举报