我有一个servlet(test.class)用来每秒钟向“test.txt”文件里写如一个“0”并换行。
我把它放在“D:\Tomcat5.0\webapps\ROOT\WEB-INF\classes\java\util”下
并在“D:\Tomcat5.0\webapps\ROOT\WEB-INF”下的web.xml文件里加入
<servlet>
        <servlet-name>test</servlet-name>
        <servlet-class>java.util.test</servlet-class>
    </servlet>
但是我启动Tomcat后,test.txt里并没有被写入数据。
是test.class的位置放的不对吗?servlet的源码如下
test.javapackage java.util;import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.*;public class test extends HttpServlet
        implements Runnable
{
FileWriter fw ;
PrintWriter pw ;
String data;

public void init (ServletConfig config)
        throws ServletException
{
    super.init(config);
    letItBegin(config);
}public synchronized void destroy()
{
    super.destroy();    
}protected void doGet(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException
{
    letItBegin(null);
}protected void letItBegin(ServletConfig config) throws ServletException
{
Thread me = new Thread(this);
        me.start();
}public void run()
{
    //fw = new FileWriter("C:\\test\\test.txt",true);
    try {
fw = new FileWriter("C:\\test\\test.txt",true);
    } catch (IOException e) 
    {
e.printStackTrace();
    }    pw = new PrintWriter(fw);
    data = "0";
    
    while (true)
    {
     pw.write(data);
     pw.println();
     pw.flush();
     try {
fw.close();
        } catch (IOException e) 
        {
e.printStackTrace();
        }
     //fw.close();
     pw.close();
try
        {
            Thread.sleep(1000);
        } 
        catch (InterruptedException ix)
        {
            ;
        }
    }
}

}

解决方案 »

  1.   

    <servlet>
    <servlet-name>hello</servlet-name>
    <display-name>hello</display-name>
    <description></description>
    <servlet-class>
    dwp.Hello</servlet-class>
    <load-on-startup>10</load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
    </servlet-mapping>:)
      

  2.   

    个人以为有两个问题:1. 你的servelt是这样命名就有问题了
       因为ClassLoader拒绝载入以java开头的类2. 还有servelt的初始化发生在第一次对它发出请求之前
       或者是在载入时间点解决方法发送请求给这个servlet ,
    然后看看log怎么输出就可以知道原因了
      

  3.   

    servlet启动或者第一次访问初始化调用init()。
    doGet这些是在访问的时候调用的。
      

  4.   

    我改了
    package java1.util1
    test.class放到D:\Tomcat5.0\webapps\ROOT\WEB-INF\classes\java1\util1

    修改“web.xml”
    <servlet>
            <servlet-name>test</servlet-name>
            <display-name>test</display-name>
    <description></description>
            <servlet-class>java1.util1.test</servlet-class>
            <load-on-startup>100</load-on-startup>
        </servlet>
    <servlet-mapping>
                    <servlet-name>test</servlet-name>
    <url-pattern>/test</url-pattern>
        </servlet-mapping>test.txt有数据了
    但是为什么test.txt里只写了一个“0”就不写了?
    我用的是线程啊?
    public void run()
    {
        .
        .
        .
        while (true)
        {
      

  5.   

    interpb(曾曾胡) 、24024846() 
    我其实是想在这个servlet里建立一个socket监听,接受client socket发的消息
      

  6.   

    你这样不是线程,还是new一个新的线程来做这件事吧
      

  7.   

    你这样不是线程,还是new一个新的线程来做这件事吧
      

  8.   

    Thread me = new Thread(this);
    me.start();
    不是起动了线程吗?
      

  9.   

    servelet
    本身就是多线程运行的,你这样可能有点问题servlet本来就封装了socket的操作
    你在servlet中要实现这个有点怪怪的 呵呵
      

  10.   

    呵呵,我明白,那么假设我要让这个servelet在Tomcat启动后,就不停的向文件里写数据呢?该如何做?
      

  11.   

    ok ,我写了一个程序 用Timer定时器来实现
    不过我只是在
    public void actionPerformed(ActionEvent e){
      //io operator
    }
    输出一个hello,能够不停打出hello,你把写文件的代码放在里面ok就ok了///////////////////
    package tdsoft;import java.awt.event.ActionListener;
    import java.io.File;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.io.PrintWriter;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;public class Timer extends HttpServlet {


    private javax.swing.Timer time = new javax.swing.Timer(100, new ActionListener() {
                                                                     public void actionPerformed(java.awt.event.ActionEvent e) {
                                                                      System.out.println("tdsoft,hello!!");
                                                                     }
                                                                     });
    /**
     * Constructor of the object.
     */
    public Timer() {
    super();
    time.start();
    } /**
     * Destruction of the servlet. <br>
     */
    public void destroy() {
    super.destroy(); // Just puts "destroy" string in log
    // Put your code here
    } /**
     * The doGet method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to get.
     * 
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException { response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out
    .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
    out.println("<HTML>");
    out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
    out.println("  <BODY>");
    out.print("    This is ");
    out.print(this.getClass());
    out.println(", using the GET method");
    out.println("  </BODY>");
    out.println("</HTML>");
    out.flush();
    out.close();
    } /**
     * The doPost method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to post.
     * 
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException { response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out
    .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
    out.println("<HTML>");
    out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
    out.println("  <BODY>");
    out.print("    This is ");
    out.print(this.getClass());
    out.println(", using the POST method");
    out.println("  </BODY>");
    out.println("</HTML>");
    out.flush();
    out.close();
    } /**
     * Initialization of the servlet. <br>
     *
     * @throws ServletException if an error occure
     */
    public void init() throws ServletException {
    // Put your code here
    }}
      

  12.   

    成功了
    谢谢interpb(曾曾胡)、infowain(infowain)、doway(john)等诸位