如题:Methodmethod=getClass().getDeclaredMethod,getClass()前面省略的“this.”是指的CustomerServlet吗?JSP页面源码:QueryDelete以下是CustomerServlet源码:@WebServlet(name="CustomerServlet",urlPatterns={"*.do"})publicclassCustomerServletextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doPost(request,response);}protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{StringservletPath=req.getServletPath();StringmethodName=servletPath.substring(1,servletPath.length()-3);System.out.println(methodName);try{Methodmethod=getClass().getDeclaredMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);method.invoke(this,req,resp);}catch(Exceptione){}}privatevoiddelete(HttpServletRequestrequest,HttpServletResponseresponse){System.out.println("delete");}privatevoidquery(HttpServletRequestrequest,HttpServletResponseresponse){System.out.println("query");}}
2 回答
胡子哥哥
TA贡献1825条经验 获得超6个赞
先看下Method的invoke(Objectobj,Object...args)方法的定义是一个obj参数和一个ags不定参数,JAVAAPI给出解释是obj是调用底层方法的对象,args是调用方法的参数Parameters:obj-theobjecttheunderlyingmethodisinvokedfromargs-theargumentsusedforthemethodcall而this指向的是当前对象的引用,也就是说CustomerServletcustomerServlet=newCustomerServlet();customerServlet.doPost(req,resp);//调用doPost时候this指的是customerServlet对象疑问???这个程序是不是死循环啊,一直调用自己的doPost方法
梦里花落0921
TA贡献1772条经验 获得超6个赞
this指的是当前对象的方法,你这么写就是为了通过不同的请求名,执行请求名对应的方法。不是死循环,如果你的请求是post,请求,那么servlet会先调用doPost方法,如果你的请求是get,那么会先调用doGet,在doGet里调用doPost只是把逻辑交给post而已,如果你的请求没有明确指出是get还是Post那么会直接调用doGet方法。
添加回答
举报
0/150
提交
取消