Servlet 进阶 getMethod 反射 及 request response 转发与重定向 完整综合版

被继承的抽象类 BaseServlet.java

package cn.day1901.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;

public abstract class BaseServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*
         * 客户端必须传method方法
         * 获取参数,用来识别处理方法,判断是哪一个方法,是哪一个就调用哪一个
         * 得到方法名,通过反射来调用方法, 得到当前类的Class对象,然后调用安的方法进行查询,得到Method
         * 我们要得到当前类的方法,所以需要得到当前类的Class
         * getDeclaredMethod 可以获取任意方法 像,protected修饰的
         * getMethod 只可以获取 修饰符为 public 的方法
         */
        
        String methodName = request.getParameter("method");
        if(methodName == null || methodName.trim().isEmpty()) {
            throw new RuntimeException("您没有传递method参数,无法确定您想要调用的方法!");
        }
        Method me =null;
        try {
            me = this.getClass().getDeclaredMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);        
        } catch (Exception e) {            
            throw new RuntimeException(e+"你要调用的方法:"+methodName+"不存在");
        }         
        Object req = null;
        Object resp = null;
        try {
            String result = (String) me.invoke(this, request,response);
            /*
             * 获取请求处理方法执行返回的字符串,它表示转发或重定向的路径,帮它完成转发或重定向
             * 查看返回的字符串是否包含冒号,如果没有,就表示转发,如果有使用冒号分割字符串,得到前缀和后前缀,如果是f则转,r重定向
             */
            System.out.println(">"+result);
            
            if(result == null || result.trim().isEmpty()) {return;}
            if(result.contains(":")) {
                int index=result.indexOf(":");//获取冒号的位置
                String s = result.substring(0, 1);//截取前缀
                String path = result.substring(index+1);//截取后缀
                if(s.equalsIgnoreCase("r")) {
                    response.sendRedirect(request.getContextPath()+path);
                }else if(s.equalsIgnoreCase("f")) {
                    request.getRequestDispatcher(path).forward(request, response);
                }else {
                    throw new RuntimeException("你的指定操作"+s+",当前版本不支持!");
                }
            }else {
                System.out.println("没有冒号");
                request.getRequestDispatcher(result).forward(request, response);
            }
            
        } catch (Exception e) {            
            throw new RuntimeException(e+"你调用方法内部"+methodName+"冒出的异常");
        }
    }
}
 

继承它,使用安!

 

package cn.day1901.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Bservlet extends BaseServlet {
    private static final long serialVersionUID = 1L;
    
    public String defaultForword(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        
        System.out.println("addUser");
        return "/index.jsp";
    }
    
    public String addUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        
        System.out.println("addUser");
        return "f:/index.jsp";
    }
    
    public String editUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        
        System.out.println("editUser");
        return "r:/index.jsp";
    }
    
    public String deleteUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {            
        System.out.println("deleteUser");
        return "f:/index.jsp";
    }
    public String findAllUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        
        System.out.println("findAllUser");
        return "r:/index.jsp";
    }
    public String nullAllUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        
        System.out.println("nullAllUser");
        return null;
    }

}
 

不会用的,可以加我博客上面的QQ群 为你解答 我也是新手,学习当中把东西分享出来,结交朋友,共同进步,高手不要喷我哦!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值