Ответы пользователя по тегу Java
  • Вызов 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, которая может создать прокси класса, но так как это синглтон, то скорее всего это финальный класс без публичного конструктор, джава не разрешит такое переопределение.

    В общем никак.
    Ответ написан
    Комментировать
  • Можно ли упростить данный код на Java (работа со строкой)?

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


    И будит ОК
    Ответ написан
    Комментировать
  • Как соединить массив с массивом (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 комментарий
  • Как импортировать исходники JAVA в Eclipse?

    EugeneP2
    @EugeneP2
    Java Dev
    Для этого существуют Maven / Gradle

    update:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>org.mmocore</groupId>
      <artifactId>authserver</artifactId>
      <version>0.0.1</version>
    
      <name>authserver</name>
    </project>


    Потом правой кнопкой по проекту: Configure -> Convert to Maven Project
    Ответ написан
    Комментировать
  • Как библиотеку засунуть вместе с самой программой?

    EugeneP2
    @EugeneP2
    Java Dev
    Используйте maven

    Если хотите собрать исполнимы jar файл с включенным в него зависимостями, я использую maven-assembly-plugin:
    <packaging>jar</packaging>
       ....
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-assembly-plugin</artifactId>
    				<configuration>
    					<archive>
    						<manifest>
    							<mainClass>ru.toster.MainClass</mainClass>
    						</manifest>
    					</archive>
    					<descriptorRefs>
    						<descriptorRef>jar-with-dependencies</descriptorRef>
    					</descriptorRefs>
    				</configuration>
    				<executions>
    					<execution>
    						<id>make-assembly</id> <!-- this is used for inheritance merges -->
    						<phase>package</phase> <!-- bind to the packaging phase -->
    						<goals>
    							<goal>single</goal>
    						</goals>
    					</execution>
    				</executions>
    			</plugin>
     </build>
    ...


    потом в командной строке

    mvn assembly:single

    Для сборки war архива никаких доп. плагинов можно не прописывать, а запустить команду
    mvn package

    в pom файле указать только тип архива "war"
    <packaging>war</packaging>

    Если не пользуетесь mvn, в IDE обычно есть встроенные средства для сборки, например в Eclipse IDE:
    File -> Export -> Runnable Jar File -> Package required libraries into generated JAR


    Можно собрать исполнимый jar файл вручную и запаковать в него все нужные библиотеки jar, но сами библиотеки должны бить в распакованном виде, т.е. prog.jar/lib/MySql.jar - такой работать не будет, джава не может грузить джары из джаров:) Нужно будет все либы распаковать вручную, чтоб было: prog.jar/com.mysql.MySqlDriver.class (это пример).

    Например когда вы используете Eclipse для сборки, он встраивает свой загрузчик в архив, потому jar/jar работает. А выше указанный maven плагин как раз распаковать все архивы зависимостей.
    Ответ написан
    2 комментария
  • Как узнатьсколько строк вернул запрос?

    EugeneP2
    @EugeneP2
    Java Dev
    Никак не узнать.

    Или перед основным запросом выполнить SELECT count(*) FROM TABLE
    Ответ написан
    Комментировать
  • Как сделать вечный цикл с обработкой каждых 100 миллисекунд (Android)?

    EugeneP2
    @EugeneP2
    Java Dev
    Можно воспользоваться стандартным джава таймером

    import java.util.Date;
    import java.util.Timer;
    import java.util.TimerTask;
    
    public class App 
    {
        public static void main( String[] args )
        {
    
        	Timer timer = new Timer();
        	timer.schedule(new TimerTask() {
    			@Override
    			public void run() {
    				System.out.println("Hello");
    			}
    		}, new Date(), 100);
        }
    }
    Ответ написан
    Комментировать
  • Как реализовать в Java возврат к началу класса?

    EugeneP2
    @EugeneP2
    Java Dev
    Как то так обычно это делается
    package ru.toster.java.q241826;
    
    import java.util.Date;
    import java.util.Scanner;
    
    public class App {
    
    	public static void main(String[] args) {
    
    		Scanner scnr = new Scanner(System.in);
    
    		while (true) {
    
    			System.out.print("enter command>");
    			String command = scnr.nextLine();
    
    			if ("help".equals(command)) {
    				printListCommand();
    			} else if ("date".equals(command)) {
    				printDate();
    			} else if ("time".equals(command)) {
    				printTime();
    			} else if ("exit".equals(command)) {
    				System.out.println("Good Bye!");
    				break;
    			} else {
    				System.out.println("Unknown command! Please enter 'help'");
    			}
    
    		}		
    		scnr.close();
    	}
    	
    	private static void printTime() {
    		System.out.printf("%1tT\n", new Date());		
    	}
    
    	private static void printDate() {
    		System.out.printf("%1tY-%1$tm-%1$td\n", new Date());		
    	}
    
    	private static void printListCommand() {
    		System.out.println(
    				"'help'\tprint list commands;\n" + 
    				"'exit'\texit from programm;\n" + 
    				"'date'\tprint today's date;\n" + 
    				"'time'\tprint current time;");
    	}
    }
    Ответ написан
    3 комментария
  • Что учить, никак не определюсь?

    EugeneP2
    @EugeneP2
    Java Dev
    В первую очередь нужно смотреть на рынок труда, какие языки в топе. Имхо, что бы стать востребованным С++ программистом, нужно приложить больше усилий, чем для той же Java.
    Ответ написан
    2 комментария
  • Стоит ли изучать Swing?

    EugeneP2
    @EugeneP2
    Java Dev
    Не трать время. Учи web
    Ответ написан
    3 комментария