zoukankan      html  css  js  c++  java
  • 自定义BaseServlet利用反射

    比较完美一点的BaseServlet

    package com.yangwei.mvc.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;
    
    /**
     * 这个BaseServlet类不需要在web.xml中进行配置
     */
    public class BaseServlet extends HttpServlet {
        
        private static final long serialVersionUID = 1L;
        /**
         * 所有的Servlet请求都会被service()方法拦截
         */
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("utf-8");
            //传递过来用户的操作名(add,list,update等)即可
            String mm=request.getParameter("operate");
            Method method=this.getClass().getMethod(mm, HttpServletRequest.class,HttpServletResponse.class);
            String rel=method.invoke(this, request,response);
            String redirStr="redirect:";
            if(rel.startsWith(redirStr)){
                //客户端跳转
                response.sendRedirect(rel.substring(redirStr.length()));
            }else{
                //将服务器端的跳转转移到这里统一执行
                request.getRequestDispatcher("/WEB-INF/"+rel).forward(request,response);
            }
            
        }
    
    }

    我们的具体Servlet继承BaseServlet即可

    package com.yangwei.mvc.servlet;
    
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    import com.yangwei.mvc.model.User;
    
    /**
     * 我们具体的Servlet继承BaseServlet
     * 各个方法的返回值说明我们要跳转到的页面
     */
    public class MyServlet extends BaseServlet {
        
        public String add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("add method");
            //对于客户端跳转,我们用redirect:标识
            return "redirect:my/add.jsp";
        }
        public String update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("update method");
            //服务器端的跳转
            return "my/update.jsp";
        }
        public String delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("delete method");
            //服务器端的跳转
            return "my/delete.jsp";
        }
    }

    如果在把方法名与返回值映射到配置文件中,就是一个简易的struts2了

    ----------- 赠人玫瑰,手有余香     如果本文对您有所帮助,动动手指扫一扫哟   么么哒 -----------


    未经作者 https://www.cnblogs.com/xin1006/ 梦相随1006 同意,不得擅自转载本文,否则后果自负
  • 相关阅读:
    贪心例题
    第十六周总结
    软件工程个人课程总结
    冲刺二十一天
    浅谈async/await
    浅谈设计模式的六大原则
    dotnetcore配置框架简介
    这一次,终于弄懂了协变和逆变
    科个普:进程、线程、并发、并行
    五分钟了解Semaphore
  • 原文地址:https://www.cnblogs.com/xin1006/p/3336835.html
Copyright © 2011-2022 走看看