Servlet中是哪个实例调用doGet()和doPost()方法
Servlet中doGet()和doPost()都是非静态的方法,正常来说应该写成对象名.doGet()来调用。但实际上经常会写成下面这样:publicvoiddoPos...
Servlet中doGet() 和doPost()都是非静态的方法,正常来说应该写成 对象名.doGet() 来调用。但实际上经常会写成下面这样:
public void doPost (HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{
doGet(request, response); /*为何这里不写成 对像名.doGet(request, response); ???*/
}
这里在调用 doGet() 方法时没有使用对像名,而是直接调用。经过测试,如果写成 this.doGet() 也是可以的。
想知道这里this实例究竟是哪个对像?开始一直以为是Servlet的实例,Servlet的实例初始化后调用service()方法,service()方法判断是请求类型是Get或Post,然后转向doGet()或doPost()方法。但把web.xml中Servlet实例名写进去,比如写成 DemoServlet.doGet() 是不对的。那么究竟对象是哪个呢?为何这里能省掉实例名或this而直接调用一个非静态的方法? 展开
public void doPost (HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{
doGet(request, response); /*为何这里不写成 对像名.doGet(request, response); ???*/
}
这里在调用 doGet() 方法时没有使用对像名,而是直接调用。经过测试,如果写成 this.doGet() 也是可以的。
想知道这里this实例究竟是哪个对像?开始一直以为是Servlet的实例,Servlet的实例初始化后调用service()方法,service()方法判断是请求类型是Get或Post,然后转向doGet()或doPost()方法。但把web.xml中Servlet实例名写进去,比如写成 DemoServlet.doGet() 是不对的。那么究竟对象是哪个呢?为何这里能省掉实例名或this而直接调用一个非静态的方法? 展开
展开全部
一般来说我们是用不到doGet方法的,doGet方法提交表单的时候会在url后边显示提交的内容,所以不安全。而且doGet方法只能提交256个字符。通常我们使用的都是doPost方法,你只要在servlet中让这两个方法互相调用就行了,例如在doGet方法中这样写
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
再把业务逻辑直接写在doPost方法中。servlet碰到doGet方法调用直接就会去调用doPost因为他们的参数都一样。而且doGet方法处理中文问题很困难,要写过滤器之类的。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
再把业务逻辑直接写在doPost方法中。servlet碰到doGet方法调用直接就会去调用doPost因为他们的参数都一样。而且doGet方法处理中文问题很困难,要写过滤器之类的。
展开全部
首先Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的的通用接口和类.在javax.servlet.http包中定义了采用HTTP通信协议的HttpServlet类.所以当你要使用Servlet框架时,必须创建一个继承了HttpServlet的实现类(即你在web.xml中设置的<servlet-class>接收http请求的处理类,如 DemoServlet);因为是HttpServlet抽象类,主要方法有 doGet, doPost, doPut, doDelete, doTrace等等请求处理的方法,同时也继承于GenericServlet,而GenericServlet 是implements了Servlet接口,所以他其中就有3个方法代表了Servlet的声明周期(init,service,destory);
综上所述:①:这些方法都不是静态方法,所以无论在那里都不能直接用该(类名)直接调用这些方法;②:而至于“this”,因为当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this。因此,this只能在类中的“非静态方法”中使用,静态方法和静态的代码块中绝对不能出现this;③:而直接写“doGet()“,就更简单了,因为这些都是HttpServlet中存在的方法,当然可以直接在本类中直接使用了啊!
综上所述:①:这些方法都不是静态方法,所以无论在那里都不能直接用该(类名)直接调用这些方法;②:而至于“this”,因为当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this。因此,this只能在类中的“非静态方法”中使用,静态方法和静态的代码块中绝对不能出现this;③:而直接写“doGet()“,就更简单了,因为这些都是HttpServlet中存在的方法,当然可以直接在本类中直接使用了啊!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
同一个类中,是可以调用类里的方法的,this是指这个类本身,DemoServlet.doGet(),doGet()不是静态方法,不能直接通过类.方法名调用,你需要实例化DemoServlet
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询