API Overview API Index Package Overview Direct link to this page
JavaOnTracks 0.1.2
  net.jot.web.server.impl. JOTMiniServer View Javadoc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package net.jot.web.server.impl;

import java.net.ServerSocket;
import java.net.Socket;
import java.util.Hashtable;
import java.util.Vector;
import net.jot.logger.JOTLogger;
import net.jot.logger.JOTLoggerLocation;
import net.jot.web.server.JOTServerRequestHandler;
import net.jot.web.server.JOTSessionManager;

/**
 * Mini generic web server (regular- not j2ee)
 * Use together with JOTWebRequestHandlerBase for easy request processing
 * 
 * Ex: server=new JOTMiniWebServer();
 * server.start(8033,MYJOTConfiguratorHandler.class);
 * @author thibautc
 */
public class JOTMiniServer {
    // Vector is synchronized.
    private Vector threads = new Vector();
    volatile boolean stop = false;
    ServerSocket socket = null;
    JOTLoggerLocation logger=new JOTLoggerLocation(JOTLogger.CAT_SERVER,getClass());

    public JOTMiniServer()
    {
        JOTLogger.initIfNecessary("server.log", JOTLogger.ALL_LEVELS, null);
    }

    /**
     * Start the server on the given port
     * RequestHandler is the implem. to handle the requests
     * for simplicity, just provide a subclass impl. of JOTWebRequestHandlerBase
     * @param port
     * @param handler
     * @param params: Optionnals params that will be passed to the requestImpl
     * @throws java.lang.Exception
     */
    public void start(int port, Class jOTServerRequestHandlerImplClass, Hashtable params) throws Exception
    {
        socket = new ServerSocket(port);
        while (socket != null && !stop)
        {
            Socket client = socket.accept();
            logger.trace("New Connection from: " + client.getRemoteSocketAddress());
            JOTServerRequestHandler handler=(JOTServerRequestHandler)jOTServerRequestHandlerImplClass.newInstance();
            handler.init(params);
            RequestThread c = new RequestThread(client, handler);
            threads.add(c);
            c.run();
        }

    }

    public void finalyze() throws Throwable
    {
        stop();
        super.finalize();
    }

    public void stop()
    {
        logger.debug("Stopping server.");
        stop = true;
        for (int i = 0; i != threads.size(); i++)
        {
            RequestThread c = (RequestThread) threads.get(i);
            if (c != null)
            {
                c.stop();
            }
        }
        JOTSessionManager.shutdown();
    }


    /**
     * Individual request thread
     */
    class RequestThread implements Runnable
    {

        private Socket socket;
        private JOTServerRequestHandler handler;

        public RequestThread(Socket socket, JOTServerRequestHandler handler)
        {
            this.socket = socket;
            this.handler = handler;
        }

        public void run()
        {
            try
            {
                handler.handle(socket);
            } catch (Exception e)
            {
                logger.exception("Unhandled request processing error", e);
            } finally
            {
                try
                {
                    socket.close();
                } catch (Exception e2)
                {
                }
                threads.remove(this);
            }
        }

        public void stop()
        {
            try
            {
                if (socket != null && !socket.isClosed())
                {
                    socket.getInputStream().close();
                    socket.close();
                }
                super.finalize();
            } catch (Throwable t)
            {
                // not important
            }
        }
    }
}

Generated By: JavaOnTracks Doclet 0.1.5     ©Thibaut Colar