未解决 Method method = getClass().getDeclaredMethod ,谁的getClass() ?

发布于 2022-09-11 19:38:31 字数 1460 浏览 12 评论 0

如题:
Method method = getClass().getDeclaredMethod ,getClass()前面省略的 “this. ” 是指的 CustomerServlet 吗?

JSP 页面源码:

<a href="Query.do">Query</a>
<br><br>
<a href="Delete.do">Delete</a>

以下是 CustomerServlet 源码:

@WebServlet(name="CustomerServlet",urlPatterns={"*.do"})
public class CustomerServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
    
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String servletPath = req.getServletPath();
        String methodName = servletPath.substring(1, servletPath.length()-3);
        System.out.println(methodName);
        
        try {
            Method method = getClass().getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
            method.invoke(this, req, resp);   
        } catch (Exception e) {
            
        }
    }
    
    private void delete(HttpServletRequest request, HttpServletResponse response) {
        System.out.println("delete");
        
    }

    private void query(HttpServletRequest request, HttpServletResponse response) {
        System.out.println("query");
        
    }

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

墨落画卷 2022-09-18 19:38:31

先看下Methodinvoke(Object obj, Object... args)方法的定义 是一个obj 参数和一个ags 不定参数,JAVA API给出解释是obj是调用底层方法的对象,args是调用方法的参数

Parameters:
obj - the object the underlying method is invoked from
args - the arguments used for the method call

this指向的是当前对象的引用,
也就是说

CustomerServlet customerServlet = new CustomerServlet();
customerServlet.doPost(req,resp); //调用doPost时候 this 指的是customerServlet 对象

疑问???
这个程序是不是死循环啊,一直调用自己的doPost方法

后知后觉 2022-09-18 19:38:31

this指的是当前对象的方法,你这么写就是为了通过不同的请求名,执行请求名对应的方法。
不是死循环,如果你的请求是post,请求,那么servlet会先调用doPost方法,如果你的请求是get,那么会先调用doGet,在doGet里调用doPost只是把逻辑交给post而已,如果你的请求没有明确指出是get还是Post那么会直接调用doGet方法。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文