Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Отличия C# и Java


Автор: nns2009 27.4.2010, 12:31
Недавно закончил изучение основ ActionScript 3.0 для Flash и теперь решил заняться серверным программированием, но встал вопрос, какой язык программирования выбрать? Всего у меня 4 варианта: C++, C#, Java и PHP. PHP я, скорее всего буду изучать в дальнейшем(так как, всё-таки самый популярный серверный язык программирования и поддерживается всеми хостингами), но на нём вроде как нельзя запрограммировать онлайн игру в реальном времени + он медленный. C++ слишком сложный и менее удобный. А вот Java и C# - то что надо!
Принципиальных отличий в коде мало, а меня интересует результат: что на чём запускается(Windows, Linux, компьютер, мобильник, сервер...), скорость, вес приложения. Также интересует: возможно ли встраивание Java кода в HTML, как в ASP.NET, возможно ли с помощью Java, C# запрограммировать онлайн игру в реальном времени?

Автор: jk1 27.4.2010, 13:08
Цитата

что на чём запускается

Для Java-приложений многое зависит от задач и выбора интрументов: если будете писать сервер руками на сокетах, то сможете поднять везде, где есть java-машина и дадут сокет. Если используете фреймворки, то потребуются контейнеры/сервера с их поддержкой. Однако большинство из них вполне кроссплатформенны (маленький камешек в огород ASP.NET ).
Цитата

скорость

Конкретные значения скорости работы для динамически компилируемых языков замерять очень проблематично, однако если критична real-time работа, в Java предусмотрены http://java.sun.com/developer/technicalArticles/Programming/rt_pt1/
Цитата

возможно ли с помощью Java, C# запрограммировать онлайн игру в реальном времени? 

конечно возможно, это же Тьюринг-полные языки.

Автор: iluvatar 27.4.2010, 13:12
запрограммировать можно все что угодно на чем угодно. вопрос времени
что значит игра в реал-тайме? html или flash?
какое значение имеет вес приложения если 80% будет занимать графика и еще 20% - БД ?

Цитата(nns2009 @  27.4.2010,  13:31 Найти цитируемый пост)
Windows, Linux, компьютер, мобильник, сервер

вот это выносит мне мозг, что вы имели в виду? кроссплатформенность?

Цитата(nns2009 @  27.4.2010,  13:31 Найти цитируемый пост)
возможно ли встраивание Java кода в HTML

возможно вы имели в виду jsp, jsf ?


опишите что вы хотите получить в результате.

Автор: nns2009 27.4.2010, 13:28
Цитата(jk1 @  27.4.2010,  13:08 Найти цитируемый пост)
Для Java-приложений многое зависит от задач и выбора интрументов: если будете писать сервер руками на сокетах, то сможете поднять везде, где есть java-машина и дадут сокет. Если используете фреймворки, то потребуются контейнеры/сервера с их поддержкой. Однако большинство из них вполне кроссплатформенны (маленький камешек в огород ASP.NET ).

Можете уточнить:
1) Есть ли в большинстве хостингах Java-машина и дают ли на них сокет?
2) Что за фреймворки? Это что-то типа ASP.NET?

Меня интересуют 3 основные возможности(можете показать их реализацию на Java, если это возможно):
1) На браузерный запрос пользователя http://example.com/default.html выслать ему страницу:
                 <html><body><тут содержимое файла content.txt></body></html>
2) На браузерный запрос пользователя, который ссылается на несуществующую страницу ответить:
                 <html><body>Нет такой страницы</body></html>
3) Возможность создания онлайн игр. Насколько я понимаю относительно Java всё делается так:
     1) На сервере запускается программа, которая отлавливает подключение/отключение клиентов.
     2) Клиенты, подключившись, 40 раз в секунду посылает на сервер информацию о произведённых пользователем действиях.
     3) Сервер 40 раз в секунду отсылает обновлённую информацию всем клиентам.
Это делается так или как-то по другому?

Добавлено через 5 минут и 11 секунд
Цитата(iluvatar @  27.4.2010,  13:12 Найти цитируемый пост)
что значит игра в реал-тайме? html или flash?

Не по ходам(как морской бой), а 40 раз в секунду(как Countre Strike(извиняюсь если неправильно написал)).


Цитата(iluvatar @  27.4.2010,  13:12 Найти цитируемый пост)
вот это выносит мне мозг, что вы имели в виду? кроссплатформенность?

Где запустится, если сделать все необходимые установки(например программа на C# запускается на Windows без дополнительных установок).
Кстати, можно ли запустить программу на C# на других ОС.

Цитата(iluvatar @  27.4.2010,  13:12 Найти цитируемый пост)
возможно вы имели в виду jsp, jsf ?

Я имел ввиду, можно ли на Java делать как на PHP и ASP.NET.

Автор: Vasay 27.4.2010, 13:44
Цитата

запрограммировать можно все что угодно на чем угодно. вопрос времени


Не думаю, что Вам удастся написать сервер для реал-тайм игры на PHP  smile 


nns2009, 

Имейте ввиду, что программирования сервера для реалтайм игры (клиет, я так понял, на flash) - не имеет ничего общего с web программированием.

Впринципе и Java и C# тут хороши. Единственное, будете писать на С# - старайтесь не выходить за рамки Mono, иначе стоимость серверов (с Windows)  будет сильно бить по карману.

Если говорить о web программировании, то тут ИМХО Java вне конкуренции. Во многом благодаря стараниям "альтернативной" команды Spring Source, альтернативной в кавычках, так как их Spring Framework фактически стандарт де-факто в web разработке с помощью Java, хотя, последняя версия спецификации EJB (типа, стандарт де юре) - стала поворачиваться "к лесу задом", но насколько повернулась к разработчикам передом - не скажу, не успел пока как следует ознакомиться. Да и Spring Source на месте не стоят - создали Spring Roo, продвигают Grails (я просто в восторге - еще б нормальную поддержку со стороны IDE , хотя бы родного SpringSource Tool Suite, правда, говорят, в коммерческой версии idea все прекрасно)


У .NET с качеством и разнообразием web фрэймворков на мой взгляд не так хорошо. Хотя, в MS тоже на месте не стоят да и к "альтернатившикам" прислушиваются (тот же ASP.NET MVC Framework, насколько я знаю, пришел в мэйнстрим из народа).


Автор: jk1 27.4.2010, 13:44
Цитата

Меня интересуют 3 основные возможности

1) Servlet API + JSP будет самым простым и понятным решением
2) Использовать фильтр сервлетов (см. пункт 1), например http://tuckey.org/urlrewrite/
3) Не могу сказть насчет того, как это делается в современных играх, однако возможно делать вызовы из сервера клиенту с помощью любой реализации спецификации Comet

Рекомендую вот этот обзорный цикл статей http://www.java-course.ru/. После него все должно встать на свои места, по крайней мере относительно Java.

Автор: nns2009 27.4.2010, 13:54
А что посоветуете скачать в качестве компилятора и среды разработки?

Автор: Vasay 27.4.2010, 14:07
Цитата

А что посоветуете скачать в качестве компилятора и среды разработки? 


NetBeans из бесплатных на мой вкус - лучший.

Еще есть eclipse - может в плане ресурсоемкости получше NetBeans, но много чего не хватает из коробки, нужно доставлять плагинами. 

Есть базирующиеся на eclipse  среды (  типа SpringSource Tool Suite  ). 

Есть JDeveloper - среда красивая, но ИМХО глючная, да и заточена под продукты Oracle.

Есть коммерческая idea. Многие считают ее лучшей. У нее, кстати, есть и бесплатная версия, но, слегка, урезанная в плане функциональности.


А компилятор - часть JDK. Так что все что нужно - это JDK .

Автор: nns2009 27.4.2010, 15:17
А перед установкой NetBeans(которую я сейчас скачиваю) нужно ли установить JDK?

Автор: Vasay 27.4.2010, 16:59
nns2009, 

Обычно нужно, но есть варианты с JDK в комплекте

Автор: nns2009 27.4.2010, 20:59
Всё установил, всё работает. Теперь некоторое время буду изучать Java после чего выскажу своё мнение о нём.

Автор: nns2009 28.4.2010, 21:45
Сейчас читаю http://www.java-course.ru/ . Дошёл до базы данных, а вот тут ничего не понятно(сам код SQL запроса понятен, т.к. я немного работал с БД на PHP, а не понятно куда его совать, куда совать JDBC и т.п.). Не подскажите? (с командной строкой я никогда в жизни не работал.)

Автор: Shtrun 29.4.2010, 10:04
Не обязательно работать с командной строкой. Ты MySQL установил? Все работает?
На каком этапе ты остановился и у тебя не получается?

Автор: nns2009 29.4.2010, 11:04
1) Скачал mysql тут: http://www.softportal.com/get-65-mysql.html, установил в C:\Program Files\MySQL\MySQL Server 5.1
2) Скачал connector/j 5.0.6 тут: http://soft.mydiv.net/mac/files-MySQL-Connector-J.html, распаковал в C:\Program Files\MySQL\mysql-connector-java-5.0.6

После этого на сайте http://www.java-course.ru/ написано:
Код

После установки MySQL вы можете запустить sql-скрипт, который предназначен для создания таблиц и заполнения их тестовыми данными. 
Сделать это просто - скопируйте приведенный код в файл students.sql, после этого зайдите в каталог <MySQL_DIR>/bin. 
И запустите команду. Само собой файл student.sql нужно положить туда же - на время. 
Хотя я часто прописываю путь в переменной PATH до MySQL - это удобно. Что и Вам советую.

mysql -u root -p < students.sql

Всё после слов "И запустите команду"(совершенно непонятно какую) я не понял и пропустил.

3) Создал проект TestJDBC(в NetBeans 6.8) и сохранил в C:\Users\Nns2009\Documents\Java\Тренировки\Первые приложения\TestJDBC.
4) В папке src создал файл TestJDBC следующего содержания(как на http://www.java-course.ru/ только красиво оформлено) :
Код

import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestJDBC
{
    public static void main(String args[])
    {
        try { System.setOut(new PrintStream("out.txt")); }
        catch (FileNotFoundException ex)
        {
            ex.printStackTrace();
            return;
        }

        System.out.println("Copyright 2009, Anton Saburov");
        Connection con = null;
        Statement stmt = null;
        ResultSet rs = null;
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/students";
            con = DriverManager.getConnection(url, "password", "password");
            stmt = con.createStatement();
            rs = stmt.executeQuery("SELECT * FROM students");
            while (rs.next())
            {
                String str = rs.getString(1) + ":" + rs.getString(2);
                printString(str);
            }
        }
        catch (Exception e) { e.printStackTrace(); }
        finally
        {
            // Эта часть позволяет нам закрыть все открытые ресуры
            // В противном случае возмжожны проблемы. Поэтому будьте
            // всегда аккуратны при работе с коннектами
            try
            {
                if (rs != null)
                    rs.close();
                if (stmt != null)
                    stmt.close();
                if (con != null)
                    con.close();
            }
            catch (SQLException ex)
            {
                ex.printStackTrace();
                System.err.println("Error: " + ex.getMessage());
            }
       }
    }

    // Снова используем этот метод для вывода из-за кодировки
    public static void printString(Object s)
    {
        try
        {
            System.out.println(new String(s.toString().getBytes("windows-1251"), "windows-1251"));
        }
        catch (UnsupportedEncodingException ex)
        {
            ex.printStackTrace();
        }
    }

}


4) В папку src скопировал файл mysql-connector-java-5.0.6-bin из папки C:\Program Files\MySQL\mysql-connector-java-5.0.6 .
5) Запустил проект в NetBeans.
6) Получил, что-то вроде:
Код

run:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at TestJDBC.main(TestJDBC.java:27)
BUILD SUCCESSFUL (total time: 0 seconds)


По идее пример не должен работать правильно(т.к. я не создавал таблицу), но ошибка тогда должна выскакивать совершенно другого рода.
В архиве я прилагаю снимки некоторых папок.

Автор: nns2009 29.4.2010, 20:11
Хорошие новости:
Скачал connector/j 3.0.16, скопировал файл mysql-connector-java-3.0.16-bin-ga.jar в папку TestJDBC распаковал его и снова запустил проект. Теперь окно с ним выглядит так, как на приложенной картинке, а ошибку выдаёт такую:
Код

run:
java.sql.SQLException: Unable to connect to any hosts due to exception: java.net.SocketException: java.net.ConnectException: Connection refused: connect

** BEGIN NESTED EXCEPTION ** 

java.net.SocketException
MESSAGE: java.net.ConnectException: Connection refused: connect

STACKTRACE:

java.net.SocketException: java.net.ConnectException: Connection refused: connect
        at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:143)
        at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:225)
        at com.mysql.jdbc.Connection.createNewIO(Connection.java:1805)
        at com.mysql.jdbc.Connection.<init>(Connection.java:452)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:185)
        at TestJDBC.main(TestJDBC.java:29)


** END NESTED EXCEPTION **


        at com.mysql.jdbc.Connection.createNewIO(Connection.java:1875)
        at com.mysql.jdbc.Connection.<init>(Connection.java:452)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:185)
        at TestJDBC.main(TestJDBC.java:29)
BUILD SUCCESSFUL (total time: 2 seconds)

Это уже в тему(как раз из-за не созданной таблицы, наверное). Теперь вопрос: как её(таблицу) создать?
И неужели для каждого проекта потребуется распаковывать файл mysql-connector-java-3.0.16-bin-ga.jar в папку src?
Хотелось бы поместить этот файл в какую-нибудь папку, прописать как-нибудь к нему путь и забыть про него.

Автор: nns2009 1.5.2010, 15:00
Установил программу для редактирования БД: теперь всё вышеперечисленное работает. И я продолжил изучение http://www.java-course.ru/ .
Сейчас я на Части 7(что такое Servlet) и тут возникла проблема: сервер Apache Tomcat не работает: сделал всё, как было описано, но при запуске <TOMCAT_HOME>\bin\startup.bat открывается 2 DOS-окна и сразу закрываются, а при введении в браузер http://localhost:8080/ выдаётся:
Код

Соединение было сброшено

Во время загрузки страницы соединение с сервером было сброшено.

    *   Возможно, сайт временно недоступен или перегружен запросами. Подождите некоторое время и попробуйте снова.

    *   Если вы не можете загрузить ни одну страницу – проверьте настройки соединения с Интернетом.

    *   Если ваш компьютер или сеть защищены межсетевым экраном или прокси-сервером – убедитесь, что Firefox разрешён выход в Интернет.

Что я неправильно сделал?
Использую Windows 7 Home Premium и Firefox 3.6 и apache-tomcat-6.0.26-src .

Автор: Vasay 1.5.2010, 15:22
nns2009, 

Если ты скачал версию NetBeans  с поддержкой Java EE то там в комплекте TomCat и GlassFish. 

Управлять ими можно прямо из NetBeans, так же как и базами данных. 

Автор: nns2009 1.5.2010, 16:42
Честно говоря не знаю какая у меня версия. Скачивал вроде отсюда http://softidle.ru/93-netbeans-ide-polnaya-versiya.html .

Добавлено через 7 минут и 25 секунд
В разделе Tools -> Servers есть GlassFish. Попробую потыкать там.

Добавлено через 14 минут и 28 секунд
Я понятия не имею что там нажимать: нет ни кнопок запустить сервер/остановить сервер и т.п. Подскажите.

Автор: nns2009 1.5.2010, 17:36
Благодаря видео на YouTube я смог запустить TomCat и всё заработало(умники на официальном сайте вместо того, чтобы поместить один рабочий архив, поместили много нерабочих и я не тот скачал).
Но опять проблема: сервер работает только пока файл startup.bat открыт, неужели для работы сервера постоянно придётся держать это окно открытым.

Автор: nns2009 1.5.2010, 20:35
Ещё возникла проблема: при написании сервлета
Код

package students.web;

import java.io.IOException;
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 HelloWorldServlet extends HttpServlet {

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");

        PrintWriter pw = resp.getWriter();
        pw.println("<H1>Hello, world! или Привет мир</H1>");

    }
}

т.к. пакета javax.servlet нет по умолчанию, я скопировал его в папку src проекта.
И несмотря на то, что все классы доступны, NetBeans 6.8 настойчиво выдаёт ошибки типа package doesn't exist.
Что делать?

Автор: Vasay 1.5.2010, 21:56
nns2009, 

Цитата

Честно говоря не знаю какая у меня версия. Скачивал вроде отсюда http://softidle.ru/93-netbeans-ide-polnaya-versiya.html .


 smile   Зачем качать с левого сайта? Хотите стать частью ботнета? 


Качать надо с официального ресурса: netbeans.org

Там же есть документация, в том числе и на русском.


Цитата

В разделе Tools -> Servers есть GlassFish. Попробую потыкать там.


Там настройка. Можно добавлять новые.

В окошечке,  где ваш проект - на верху есть три вкладки, Projects, File, Services 

Нажмите на Services - там можно управлять серверами, базами данных.


Вообще, создаете web aplication и при нажатии Run Netbeans сам стартанет GlassFish и задеплоет на нем приложение.


Судя по картинке - Вы создали десктопное приложение, потому и не подключены нужные либы.

Да и либы нужно добавлять в Libraries проекта.

Автор: nns2009 1.5.2010, 22:25
Цитата(Vasay @  1.5.2010,  21:56 Найти цитируемый пост)
Зачем качать с левого сайта? Хотите стать частью ботнета?

Привык искать через Яндекс, скачал с первого попавшегося сайта.

Цитата(Vasay @  1.5.2010,  21:56 Найти цитируемый пост)
Да и либы нужно добавлять в Libraries проекта.

Это какая папка?

Автор: Vasay 1.5.2010, 22:36
Цитата


Привык искать через Яндекс, скачал с первого попавшегося сайта.


Вы просто находка для ботнэтчика.

Цитата


Это какая папка? 


В проекте Libraries видете? Правой кнопокой мышки по ним нажмите, дальше, думаю, разберетесь.

Автор: nns2009 2.5.2010, 19:36
Цитата(Vasay @  1.5.2010,  22:36 Найти цитируемый пост)
В проекте Libraries видете? Правой кнопокой мышки по ним нажмите, дальше, думаю, разберетесь. 

Огромное спасибо, заработало. Но можно ли как-нибудь настроить NetBeans, чтобы в других проектах он подключал некоторые библиотеки автоматически?

Теперь перешёл к JSP, но вот проблема: как создать файл с расширением JSP: проводник не позволяет менять расширения: если я после имени текстового файла ставлю .jsp то имя файла становится hello.jsp.txt. Что делать?

Автор: Vasay 2.5.2010, 20:02
Цитата


Теперь перешёл к JSP, но вот проблема: как создать файл с расширением JSP: проводник не позволяет менять расширения: если я после имени текстового файла ставлю .jsp то имя файла становится hello.jsp.txt. Что делать?


Вы создайте web проект. Тогда при нажатии file -> new file NetBeans будет Вам предлагать создать в том числе .jsp, а то судя по скриншоту - Вы пытаетесь написать веб приложении в проекте под десктоп. 

Автор: nns2009 3.5.2010, 19:32
Цитата(Vasay @  2.5.2010,  20:02 Найти цитируемый пост)
Вы создайте web проект. Тогда при нажатии file -> new file NetBeans будет Вам предлагать создать в том числе .jsp, а то судя по скриншоту - Вы пытаетесь написать веб приложении в проекте под десктоп.  

В следующий раз учту: вначале не думал, что веб понадобится, а перекопировать все файлы не хочется, но проблему удалось решить, случайно обнаружив у себя на ноутбуке Adobe Dreamweaver.

Перешёл к части 9. После того, как я проделал все шаги сервер выдаёт следующее:
Код

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.NullPointerException
    students.logic.ManagementSystem.getGroups(ManagementSystem.java:103)
    students.web.MainFrameServlet.processRequest(MainFrameServlet.java:233)
    students.web.MainFrameServlet.doGet(MainFrameServlet.java:285)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.26 logs.
Apache Tomcat/6.0.26


Думал скачать исходники, которые обычно выкладываются в конце, но там их нет. Подскажите, пожалуйста.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)