private void handleHttpRequest(ChannelHandlerContext ctx, HttpRequest req) throws Exception {
        if (req.method() != HttpMethod.GET) {
            sendHttpResponse(ctx, req, new DefaultFullHttpResponse(HttpVersion.HTTP_1_0, HttpResponseStatus.FORBIDDEN));
            ctx.close();
            return;
        } else {
            
            ByteBuf content = null;
            SentimentAndCensor twitterAnalysis = new SentimentAndCensor();
            int req_length = req.uri().length();
            String params = req.uri().substring(1, req_length);
            // Response to health check
            if (params.equals("heartbeat")) {
                content = Unpooled.wrappedBuffer("Health Check".getBytes());
            } else if (params.contains("key") && params.contains("message")) {
                TimeZone timeZone = TimeZone.getTimeZone("GMT-4:00");
                Calendar calendar = Calendar.getInstance(timeZone);
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
                simpleDateFormat.setTimeZone(timeZone);
                String data_string = simpleDateFormat.format(calendar.getTime()); // Retrive
                // the
                // time
                // of
                // local
                // timezone.
                
                QueryStringDecoder queryStringDecoder = new QueryStringDecoder(req.uri());
                String key = queryStringDecoder.parameters().get("key").get(0);
                String message = queryStringDecoder.parameters().get("message").get(0);
                Decoder decoder = new Decoder();
                String execute_data = decoder.Response(key, message);
                String line1 = teamId + "," + AWS_Account_Id + "\n";
                String result_line = line1 + data_string + "\n" + execute_data + "\n";
                content = Unpooled.wrappedBuffer(result_line.getBytes());
            } else if (params.contains("userid") && params.contains("tweet_time")) {
                // store two parameters into key(userid) and value(tweet_time)
                QueryStringDecoder queryStringDecoder = new QueryStringDecoder(req.uri());
                String key = queryStringDecoder.parameters().get("userid").get(0);
                String message = queryStringDecoder.parameters().get("tweet_time").get(0);
                
                // String decoder_result = twitterAnalysis.Response(key,
                // message);
                // result store the response string
                ArrayList<String> resultSet = selectFromSQLq2(key, message);
                
                String result = teamId + "," + AWS_Account_Id;
                for (int i = 0; i < resultSet.size(); i++) {
                    result = result + "\n" + resultSet.get(i);
                }
                result = result.trim() + "\n";
                content = Unpooled.wrappedBuffer(result.getBytes());
                
            } else if (params.contains("start_date") && params.contains("end_date") && params.contains("userid")
                       && params.contains("n")) {
                
                QueryStringDecoder queryStringDecoder = new QueryStringDecoder(req.uri());
                String start_date = queryStringDecoder.parameters().get("start_date").get(0);
                String end_date = queryStringDecoder.parameters().get("end_date").get(0);
                String userid = queryStringDecoder.parameters().get("userid").get(0);
                String n = queryStringDecoder.parameters().get("n").get(0);
                
                ArrayList<String> resultPositve = selectFromSQLq3_p(start_date, end_date, userid, n);
                ArrayList<String> resultNegetive = selectFromSQLq3_n(start_date, end_date, userid, n);
                
                String result = teamId + "," + AWS_Account_Id;
                
                result = result + "\n" + "Positive Tweets";
                for (int i = 0; i < resultPositve.size(); i++) {
                    result = result + "\n" + resultPositve.get(i);
                }
                
                result = result + "\n\n" + "Negative Tweets";
                for (int i = 0; i < resultNegetive.size(); i++) {
                    result = result + "\n" + resultNegetive.get(i);
                }
                
                result = result.trim() + "\n";
                
                //System.out.println(result);
                
                content = Unpooled.wrappedBuffer(result.getBytes());
                
            } else if (params.contains("hashtag") && params.contains("n")) {
                QueryStringDecoder queryStringDecoder = new QueryStringDecoder(req.uri());
                String hashtag = queryStringDecoder.parameters().get("hashtag").get(0);
                String n = queryStringDecoder.parameters().get("n").get(0);
                
                ArrayList<String> resultSet = selectFromSQLq4(hashtag, n);
                
                String result = teamId + "," + AWS_Account_Id;
                for (int i = 0; i < resultSet.size(); i++) {
                    result = result + "\n" + resultSet.get(i);
                }
                result = result.trim() + "\n";
                content = Unpooled.wrappedBuffer(result.getBytes());
                
            }else if(params.contains("userid_min") && params.contains("userid_max")){
                QueryStringDecoder queryStringDecoder = new QueryStringDecoder(req.uri());
                String min  = queryStringDecoder.parameters().get("userid_min").get(0);
                String max = queryStringDecoder.parameters().get("userid_max").get(0);
                
                // ArrayList<Integer> resultSet = selectFromSQLq5(max, min);
                int count = selectFromSQLq5(min, max);
                
                String result = teamId + "," + AWS_Account_Id + "\n";
                // int count = 0;
                // for (int i = 0; i < resultSet.size(); i++) {
                //     count += resultSet.get(i);
                // }

                result += count;

                result = result.trim() + "\n";
                content = Unpooled.wrappedBuffer(result.getBytes());
                
            } else {
                sendHttpResponse(ctx, req,
                                 new DefaultFullHttpResponse(HttpVersion.HTTP_1_0, HttpResponseStatus.FORBIDDEN));
                ctx.close();
                return;
            }
            FullHttpResponse res = new DefaultFullHttpResponse(HttpVersion.HTTP_1_0, HttpResponseStatus.OK, content);
            res.headers().set(HttpHeaderNames.CONTENT_TYPE, "text/html; charset=UTF-8");
            sendHttpResponse(ctx, req, res);
        }
        
    }