servlet的简单映射

来源:互联网 发布:it课程体系 编辑:程序博客网 时间:2024/05/21 21:46
  • BaseServlet.java(实现封装的servlet类,提供给不同的子类servlet继承)
package web;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;import annotation.MethodAnnotation;/** * 封装servlet的顶层操作,根据注解映射,找到对应的方法,并执行操作 * @author facebook * */public class BaseServlet extends HttpServlet {    private static final long serialVersionUID = 1L;    @Override    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        response.setContentType("text/html;charset=utf-8");        invoke(request,response);    }    /**     * 执行指定的方法     * @param request     * @param response     * @throws IOException     */    protected void invoke(HttpServletRequest request, HttpServletResponse response) throws IOException{        Class<?> clz =  this.getClass();        int count=0;        boolean flag = true;        String method = request.getParameter("method");        Method[] methods = clz.getDeclaredMethods();        for(Method m : methods){            if(m.isAnnotationPresent(MethodAnnotation.class)){                MethodAnnotation methodAnnotation = m.getAnnotation(MethodAnnotation.class);                if(methodAnnotation.method().equals(method)){                    try {                        m.invoke(this, request,response);                    } catch (Exception e) {                        e.printStackTrace();                    }                    flag = true;                    break;                }else{                    flag = false;                }            }else{                count++;            }        }        if(!flag){            response.getWriter().write("<script>alert('没有找到相应的操作,请查看method中的参数是否配置出错!')</script>");            return;        }        if(count==methods.length){            response.getWriter().write("<script>alert('没有添加任何方法映射!')</script>");            return;        }    }}
  • UserServlet.java(用于测试的servlet)
package web;import java.io.IOException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import annotation.MethodAnnotation;@WebServlet("/UserServlet")public class UserServlet extends BaseServlet {    private static final long serialVersionUID = 1L;    @MethodAnnotation(method="queryList")    public void queryList(HttpServletRequest request, HttpServletResponse response){        try {            response.getWriter().write("<script>alert('你调用了查询方法!......queryList')</script>");        } catch (IOException e) {            e.printStackTrace();        }    }    @MethodAnnotation(method="saveObject")    public void saveObject(HttpServletRequest request, HttpServletResponse response){        try {            response.getWriter().write("<script>alert('你调用了保存方法!......saveObject')</script>");        } catch (IOException e) {            e.printStackTrace();        }    }    @MethodAnnotation(method="delObject")    public void delObject(HttpServletRequest request, HttpServletResponse response){        try {            response.getWriter().write("<script>alert('你调用了删除方法!......delObject')</script>");        } catch (IOException e) {            e.printStackTrace();        }    }    @MethodAnnotation(method="findObject")    public void findObject(HttpServletRequest request, HttpServletResponse response){        try {            response.getWriter().write("<script>alert('你调用了单个对象的查询方法!.....findObject')</script>");        } catch (IOException e) {            e.printStackTrace();        }    }}

-MethodReflact.java(注解类,实现方法的映射配置类)

package annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * 方法注解映射,映射调用的方法 * @author facebook * */@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD})public @interface MethodAnnotation {    String method() default "";}
0 0
原创粉丝点击