当前位置:编程学习 > JAVA >>

servlet无请求也自动执行

各位老大,写了一个servlet,但我没有请求他也会不停的执行doget方法,请教中……
 代码:web.xml
 <servlet>
    <servlet-name>TestServer</servlet-name>
     <servlet-class>com.straw.frame.system.servlet.ReportValid</servlet-class>
    <load-on-startup>0</load-on-startup>
 </servlet>
 <servlet-mapping>
    <servlet-name>TestServer</servlet-name>
    <url-pattern>/TestServer</url-pattern>
 </servlet-mapping>
 servlet:
 public class ReportValid extends HttpServlet {
   public ReportValid() {
   super();
 }
   public void destroy() {
    super.destroy();
   }
   public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
   System.out.println("测试成功2");
   super.doGet(request, response);
 }

 public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
   System.out.println("测试成功3");
    super.doPost(request, response);
 }

 public void init() throws ServletException {
       super.init();
 }
 }
 异常点:tomcat一启动后后台就不停的打印"测试成功2"; servlet --------------------编程问答--------------------    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
   System.out.println("测试成功2");
   super.doGet(request, response);
 }

貌似这里就是无限循环。 --------------------编程问答-------------------- 你的doPost和doGet里面为什么要加super.doXXX呢?把其中一个改成this.doXXX就可以了吧 --------------------编程问答-------------------- 断点测试,看看到底是往哪里跳的。。
从init方法开始往下跳F6一步一步的跳看过程 --------------------编程问答--------------------
引用 1 楼 fortheother 的回复:
   public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
   System.out.println("测试成功2");
   super.doGet(request, response);
 }

貌似这里就是无限循环。


正解+1 --------------------编程问答-------------------- 感觉有种多态的感觉在里面  所以出现了无线循环    super.doGet(request, response);就是这一句的问题!!! --------------------编程问答-------------------- 其他地方应用这个TestServer了么?
--------------------编程问答-------------------- 为什么是super.doGet()? 用this.doGet(),试试. --------------------编程问答-------------------- 额,一般使用post请求的,所以在doGet方法里写
this.dopost(request,response);
--------------------编程问答--------------------
引用 1 楼 fortheother 的回复:
   public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
   System.out.println("测试成功2");
   super.doGet(request, response);
 }

貌似这里就是无限循环。


很明显  +1 --------------------编程问答-------------------- <load-on-startup>0</load-on-startup>
web.xml  中此标签的含义如下


1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。

2)它的值必须是一个整数,表示servlet应该被载入的顺序

2)当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;

3)当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。

4)正数的值越小,该servlet的优先级越高,应用启动时就越先加载。

5)当值相同时,容器就会自己选择顺序来加载。

所以,<load-on-startup>x</load-on-startup>,中x的取值1,2,3,4,5代表的是优先级,而非启动延迟时间。
补充:Java ,  Web 开发
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,