• Как сейчас используются практики по доставке java приложения на серверы?

    EugeneP2
    @EugeneP2
    Java Dev
    Был опыт с heroku и openshift

    Оба предоставляют индивидуальный git-репозиторий, куда вы пушите свой maven проект. Система сама билдит мавеном проект, тянуться зависимости и диплоит на сервер.

    Openshift можно просто залить уже свой, собранный war архив.

    Документация у них норм, читайте и все будит понятно.
    Ответ написан
    Комментировать
  • Как в Jackson конвертировать строку в число?

    EugeneP2
    @EugeneP2
    Java Dev
    Вам нужно написать свой JsonDeserializer и указать его в аннотации @JsonDeserialize над тем сеттером поля с которым у вас проблемы

    import com.fasterxml.jackson.core.JsonParser;
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.DeserializationContext;
    import com.fasterxml.jackson.databind.JsonDeserializer;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
    
    import java.io.IOException;
    
    public class TestJackson {
    
    	Integer a;
    
    	public Integer getA() {
    		return a;
    	}
    
    	@JsonDeserialize(using = StringIntegerDeserializer.class)
    	public void setA(Integer a) {
    		this.a = a;
    	}
    
    	@Override
    	public String toString() {
    		return "TestJackson{a=" + a + "}";
    	}
    
    	public static void main(String[] args) throws IOException {
    
    		ObjectMapper mapper = new ObjectMapper();
    
    		String json = "{\"a\":\"5.666\"}";
    		System.out.println(mapper.readValue(json, TestJackson.class));
    
    		json = "{\"a\":5.666}";
    		System.out.println(mapper.readValue(json, TestJackson.class));
    
    		json = "{\"a\":5}";
    		System.out.println(mapper.readValue(json, TestJackson.class));
    
    	}
    
    
    	public static class StringIntegerDeserializer extends JsonDeserializer<Integer> {
    		@Override
    		public Integer deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
    			String valueAsString = jsonParser.getValueAsString();
    			int integer = (int) Double.parseDouble(valueAsString);
    			return integer;
    		}
    	}
    }
    Ответ написан
    1 комментарий
  • Как в classpath во время исполнения программы добавить библиотеку?

    EugeneP2
    @EugeneP2
    Java Dev
    Если программа уже запущена, добавление каких либо новых классов только через свой загрузчик. Почитайте о загрузчиках классов в джаве и все будит понятно
    Ответ написан
    Комментировать
  • Можно ли с jsp отправить List?

    EugeneP2
    @EugeneP2
    Java Dev
    Например есть такая форма
    <form ...>
    	<input name="lastName" value="Ivanov" />
    	<input name="firstName" value="Ivan" />
    
    	<input name="lastName" value="Petrov" />
    	<input name="firstName" value="Petr" />
    </form>


    В сервлете запрос от такой формы без фреймверков можно обработать вот так
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    	// тут будит lastNames = {"Ivanov", "Petrov"}
    	String[] lastNames = request.getParameterValues("lastName");
    
    	// тут будит firstNames = {"Ivan", "Petr"}
    	String[] firstNames = request.getParameterValues("firstName");
    
    	List<Author> author = new ArrayList<Author>();
    
    	for (int i = 0; i < lastNames.length && i < firstNames.length; i ++)  {
    	
    		author.add(new Author(firstNames[i], lastNames[i]));
    	}
    }


    как то так...
    Ответ написан
    Комментировать
  • Какие примеры правильного Java кода можно привести?

    EugeneP2
    @EugeneP2
    Java Dev
    Почему бы не начать с JDK? Качаем исходники и читаем на здоровье :)

    Вот кстати хороший список используемых паттернов ООП в JDK: Examples of GoF Design Patterns in Java's core lib...

    "директорий в путях (аля '\' или '/' )" - для этого есть константа separator в классе java.io.File

    Исходники: Spring Framework, Apache Commons, Guava и.д, в общем берете любую популярную либу и смотрите исходники:)

    Либы, исходники и документацию отлично качает maven с репозитория.
    Ответ написан
    Комментировать
  • Что почитать про JPA Hibernate?

    EugeneP2
    @EugeneP2
    Java Dev
    Про JPA на русском можно почитать в книги Изучаем Java EE 7. Там 3 главы, в принципе не плохо.

    На английском языке Pro JPA 2

    Хороший набор уроков, на английском Hibernate and Java Persistence API (JPA) Fundamentals


    + конечно документация hibernate
    Ответ написан
    2 комментария
  • Как jQuery принимает коллекцию из Java?

    EugeneP2
    @EugeneP2
    Java Dev
    Если вы хотите что то передать в JavaScript, лучше предварительно перевести это в json, в вашем случае это коллекция.

    Передать данные в JavaScript/ JQuery можно двумя способами:
    • Непосредственно в код javascript;
    • Сделать ajax запрос на сервер.
    Передать данные при загрузки странице

    Сервлет
    @WebServlet(urlPatterns = "/home") // javax.servlet-api 3.0
    public class HomeServlet extends HttpServlet {
    
    	private final Gson gson = new Gson();
    
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    		List<String> users = Arrays.asList("Vaya", "Petya", "Fedya");
    
    		String json = gson.toJson(users);
    		req.setAttribute("usersJson", json);
    
    		req.getRequestDispatcher("/home.jsp").forward(req,resp);
    	}
    }


    Страница
    <html>
    <head>
        <script src="js/jquery-1.9.1.js"></script>
    </head>
    <body>
    <script>
        var users = ${usersJson};
    
        $.each(users, function(i, val) {
    .....................
        });
    </script>
    </body>
    </html>


    Получение данных с помощью AJAX запроса

    Сервлет
    @WebServlet(urlPatterns = "/json")
    public class JsonServlet extends HttpServlet {
    
    	private final Gson gson = new Gson();
    
    
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    		List<String> users = Arrays.asList("Vaya", "Petya", "Fedya");
    
    		resp.addHeader("Content-Type", "application/json");
    
    		String json = gson.toJson(users);
    
    		resp.getWriter().print(json);
    
    		resp.flushBuffer();
    	}
    }


    Страница
    <html>
    <head>
        <script src="js/jquery-1.9.1.js"></script>
    </head>
    <body>
    <script>
        $.get('json', function(data) {
            $.each(data, function(i, val) {
                ..............................
            });
        });
    
    </script>
    </body>
    </html>
    Ответ написан
    Комментировать
  • Вызов jsp из Servlet/ JAVA?

    EugeneP2
    @EugeneP2
    Java Dev
    Это делается вот так

    Сервлет
    @WebServlet(urlPatterns = "/") // javax.servlet-api 3.0
    public class HomeServlet extends HttpServlet {
    
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    		List<String> users = Arrays.asList("Vaya", "Petya", "Fedya");
    
    		req.setAttribute("users", users); // с помощью атрибутов передаются данные между сервлетами
    
    		req.getRequestDispatcher("/home.jsp").forward(req,resp);
    	}
    }


    JSP /home.jsp
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <html>
    <body>
    <h2>Hello World!</h2>
    
    <c:forEach items="${users}" var="usr"> 
        <p>${usr}</p>
    </c:forEach>
    
    </body>
    </html>


    P.S.
    JSP - это тоже сервлет.
    Ответ написан
    Комментировать
  • Как построить дерево папок?

    EugeneP2
    @EugeneP2
    Java Dev
    Вам нужно написать контроллер, который принимает в качестве параметра путь в файловой системе, например:
    D:/
    D:/Music/
    D:/Music/Classic/
    и т.д.

    В контроллере вы по этому пути получаете список подкаталогов и файлов и возвращаете в виде json. Как в примерах zTree:

    [
    	{name: "pNode 01", children: [
    		{name: "child 01"},
    		{name: "child 02"}
    	]}
    ]


    По умолчанию на странице отображается только корневой узел D:/
    Кликнув по узлу, ajax-ом отправляете запрос к контроллеру в котором передаете D:/, контроллер возвращает список подкаталогов, вы передаете это в zTree и.д.
    Ответ написан
    Комментировать
  • Можно ли пропустить обучение Java EE если в будущем хочешь работать со Spring Framework?

    EugeneP2
    @EugeneP2
    Java Dev
    Servlet API, JMS и JPA понадобится
    Ответ написан
    Комментировать
  • Как записать консольный вывод в файл?

    EugeneP2
    @EugeneP2
    Java Dev
    Самый простой вариант, это в консоле, когда запускаете свою программу

    java Game>file.txt
    или
    java -jar Game.jar>file.txt

    Второй вариант, тоже простой, переопределить System.out

    static {
    		try {
    			System.setOut(new PrintStream(new File("file.txt")));
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		}
    	}
    
    	public static void main(String[] args) throws FileNotFoundException {
    
    		System.out.println("Hello World!"); // будет записано в файл
    	}
    Ответ написан
    Комментировать
  • Как ограничить функцию (по времени и памяти)?

    EugeneP2
    @EugeneP2
    Java Dev
    Могу подсказать насчет первого пункта.

    Запустить функцию отдельным потоком и при выполнение каждой операции проверять
    Thread t = new Thread.... {
    
    if (Thread.interrupted()) {
    // сохранить текущий результат и выйти из метода
    }
    });;
    
    t.start();
    
    t.join(10000); // ждем поток 10 сек
    
    t.interrupt(); // предлагаем потоку прервать выполнение
    Ответ написан
    Комментировать
  • Почему не стоит вызывать методы в конструкторе?

    EugeneP2
    @EugeneP2
    Java Dev
    Почему нельзя? очень даже можно, только этот метод должен быть private. Не рекомендуют вызывать public и protected методы. Если класс не финальный, открытые методы могут быть переопределены в подклассе, и тогда в вашем конструкторе будут вызываться не ваши методы, а переопределенные, что может сломать логику работы вашего класса и привести к ошибке.
    Ответ написан
    Комментировать
  • Java. Как перехватить аргумент при вызове метода?

    EugeneP2
    @EugeneP2
    Java Dev
    Если методы синглтона вызываете вы, то можно создать дублирующий класс, который будет повторять интерфейс синглтона и переадресовывать ему вызовы + логировать передаваемые параметры.

    Для переопределения методов, можно было бы воспользоваться библиотекой CGLIB, которая может создать прокси класса, но так как это синглтон, то скорее всего это финальный класс без публичного конструктор, джава не разрешит такое переопределение.

    В общем никак.
    Ответ написан
    Комментировать
  • Как разобраться с настройкой стиля программирования на Eclipse?

    EugeneP2
    @EugeneP2
    Java Dev
    Не совсем уверен насчет версии эклипс с++, но в случае версии для джавы, в настройках -> Java -> Code Style -> Formatter

    Создаете новый профайл и настраиваете форматирование как вам угодна, где какие переносы, где какие пробелы, табуляции. Там есть примеры того, как будет выглядеть код с теми или иными настройками.
    Ответ написан
  • Можно ли упростить данный код на Java (работа со строкой)?

    EugeneP2
    @EugeneP2
    Java Dev
    1. условия заменить на конструкции if/else;
    2. вынести этот код в отдельный метод;
    3. назвать метод так, чтоб можно было понять что он делает;


    И будит ОК
    Ответ написан
    Комментировать
  • Что такое GitHub и зачем он нужен?

    EugeneP2
    @EugeneP2
    Java Dev
    Для начала, почитайте что такое Version Control System

    GitHub - это VCS с социальной составляющей. В соц. сети вы выкладываете фоточки, а тут исходный код.
    Ответ написан
    8 комментариев
  • Как соединить массив с массивом (byte) в Java?

    EugeneP2
    @EugeneP2
    Java Dev
    В любом случае нужно создавать новый массив длиной byte_1.length + byte_2.length

    Опять же, рекомендую пользоваться готовыми решениями

    <dependency>
    	<groupId>org.apache.commons</groupId>
    	<artifactId>commons-lang3</artifactId>
    	<version>3.4</version>
    </dependency>


    Класс: org.apache.commons.lang3.ArrayUtils
    Метод: ArrayUtils.addAll(arr1, arr2)
    Ответ написан
    3 комментария
  • Как прочитать из файла нужную строку в Java 7?

    EugeneP2
    @EugeneP2
    Java Dev
    Динамически создавать переменные у вас не выйдет. Создайте ArrayList и добавляйте в него строки.

    Для чтения построчно, можно юзать java.util.Scanner, у него есть удобные методы для построчного чтения файла: hasNextLine и nextLine.

    И что это за строки? Случайно не конфигурация? Если да, то проще воспользоваться java.util.Properties, и хранить строки в файле в формате: <Имя параметры>=<Значение>

    package ru.toster.java.q261000;
    
    import java.io.*;
    import java.util.*;
    
    public class MainQ261000 {
    
    	public static void main(String[] args) {
    		
    		
    		String demoFile = "aaaaaaaaa\nbbbbbbbbbbbb\nccccccccccccccccc";
    		
    		Reader r = new StringReader(demoFile); 
    		// Reader r = new FileReader("FileWithTextLines.txt");
    
    		List<String> lines = new ArrayList<String>();
    		
    		Scanner s = new Scanner(r);
    		try {
    			
    			while(s.hasNextLine()) {
    				lines.add(s.nextLine());
    			}
    			
    		} finally {
    			s.close();
    		}
    		
    		for (String line : lines) {
    			System.out.println(line);
    		}
    		
    	}
    }
    Ответ написан
    7 комментариев
  • Как работает контроллер при большом количестве запросов?

    EugeneP2
    @EugeneP2
    Java Dev
    каждый запрос будет работать в отдельном потоке. В томкате например по умолчанию максимум 200 потоков, все остальные запросы будут вылетать по таймауту.

    вот этот метод должен быть готов в многопоточности
    service.getCalcSumm();
    Ответ написан
    1 комментарий