Ответы пользователя по тегу Java
  • Почему не возвращает jsp страницу?

    EugeneP2
    @EugeneP2
    Java Dev
    <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
    	
    	<!-- Enables the Spring MVC @Controller programming model -->
    	<annotation-driven />
    
    	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
    	<resources mapping="/resources/**" location="/resources/" />
    	<resources mapping="/images/**" location="/resources/images/" />
    	<resources mapping="/css/**" location="/resources/css/" />
    	<resources mapping="/js/**" location="/resources/js/" />
    
    	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
    	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    		<beans:property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    		<beans:property name="prefix" value="/WEB-INF/views/" />
    		<beans:property name="suffix" value=".jsp" />
    	</beans:bean>
    Ответ написан
    Комментировать
  • Ошибка в синхронизации потоков или в чем-то еще?

    EugeneP2
    @EugeneP2
    Java Dev
    Вы точно его доинициализируете в мэйне? Потому как на данном эта пе это массив нулов.

    public static boolean[][] flags = new boolean[l + 1][];

    И доинициализируете массив до старта потоков или после?
    Ответ написан
    1 комментарий
  • Как экранировать спец символы в строке перед вставкой в запрос?

    EugeneP2
    @EugeneP2
    Java Dev
    Вы наверно формируете запрос вставки конкатенацией строки?

    Используйте PreparedStatement
    Ответ написан
    Комментировать
  • Как получить данные из формы?

    EugeneP2
    @EugeneP2
    Java Dev
    1. Для этого enctype="multipart/form-data" используйте библиотеку Commons FileUpload. Там документация норм
    2. Вместо
      action="${pageContext.request.contextPath}/do/add-product"
      лучше использовать jstl core, тег <c:url/>. Например: <c:url value="/do/add-product"/>
    Ответ написан
    Комментировать
  • Почему выдает ошибку java в примере иерархии?

    EugeneP2
    @EugeneP2
    Java Dev
    1. Какие либо операции непосредственно в теле класса, кроме декларации полей, нужно помещать в блок из фигурных скобок.

    Dog tuzic = new Dog();
    	{
    		tuzic.age = 1;
    	}


    2. Ошибка, у вас произойдет рекурсия и программа вылетит с StackOverflowError
    class Dog extends Pet {
    	Dog tuzic = new Dog();
    }
    
    .....
    
    Dog tuzic = new Dog(); // и понеслась:)


    При первом создании объекта класса Dog он уйдет в рекурсию
    Ответ написан
    Комментировать
  • Как правильно реализовать смещение по файлу и выдернуть нужную часть байт в новый файл?

    EugeneP2
    @EugeneP2
    Java Dev
    Читайте файл и сразу пишите в файлы. Не нужно создавать каких то промежуточных массивов.

    Если вам нужен произвольный доступ в файл, рекомендую обратить внимание на класс RandomAccessFile
    Ответ написан
    3 комментария
  • Как эффективно удалить дубликаты из String[]?

    EugeneP2
    @EugeneP2
    Java Dev
    Эт почему нельзя использовать коллекции? о_О

    1. Для данного решение нужна коллекция java.util.HashSet. Методы equals и hashCode в классе String реализованы эффективно, так что HashSet без проблем отсечет все дубли.
    2. Зачем вы вообще строки грузили в массив? Сразу нужно было использовать HashSet.
    3. С чего вы взяли что это будит менее эффективней, чем заливать все в массив?
    4. Скорость доступа к элементам set-а такая же как и у массива: O(1).
    5. Если вы грузите миллионы строк в массив, то явно экономия памяти у вас не в приоритете.
    Ответ написан
    6 комментариев
  • BufferedReader или Scanner?

    EugeneP2
    @EugeneP2
    Java Dev
    Судя из исходников, Scanner-е есть буферизация + много удобных методов для чтения текста. Но вам никто не мешает сделать вот так

    InputStreamReader isr = new InputStreamReader(new FileInputStream(filePath), "UTF-8");
        BufferedReader br = new BufferedReader(isr);
    
    Scanner scanner = new Scanner(br);
    Ответ написан
    2 комментария
  • Удалить все пробелы, табуляцию, символы и т.д. из String Java?

    EugeneP2
    @EugeneP2
    Java Dev
    import java.io.*;
    
    public class CharCleaner {
    
    	public static void main(String[] args) throws IOException {
    
    
    		try (
    				Reader reader = new BufferedReader(new FileReader(new File("sourceFile.txt")));
    				Writer writer = new BufferedWriter(new FileWriter(new File("resultFile.txt")))
    		) {
    
    			int ch;
    
    			while ((ch = reader.read()) != -1) {
    				if (Character.isAlphabetic(ch)) {
    					writer.write(ch);
    				}
    			}
    
    
    			writer.flush();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    
    	}
    
    }


    Не грузит весь фал в память, при чтении и записи файла есть буферизация, в процессе работы не создает кучу String объектов методами replace*
    Ответ написан
    Комментировать
  • Можно ли использовать try с ресурсами для закрытия connection из пула?

    EugeneP2
    @EugeneP2
    Java Dev
    Да, можно. Все что наследует интерфейс AutoCloseable можно использовать в try-with-resources

    Нужно смотреть что это за "connectionPool"... Если это реализация DatSource, например получаемая из томката, или org.apache.commons.dbcp.BasicDataSource... То вызов метода close возвратит коннекшен обратно в пул. А если человек как то напрямую работает с пулом, то тут нужно бить по рукам
    Ответ написан
    Комментировать
  • Одинаковые куски кода в разных классах допустимо или нубство?

    EugeneP2
    @EugeneP2
    Java Dev
    По поводу "switch (data.length)": тут нужно задействовать полиморфизм. Создать интерфейс с методом который принимает массив int[]data, и под каждый вариант case сделать соответствующую реализацию.

    Например
    interface Worker {
      void doWork(int[] data);
    }
    
    class Worker96 implements Worker  {
       public void doWork(int[] data) {
           ....
       }
    }
    
    class Worker71 implements Worker  {
       public void doWork(int[] data) {
           ....
       }
    }
    
    // потом можно создать мапу 
    
    class Main {
    
    private Map<Integer, Worker> workers = ....;
    
    Main (){
        workers.put(96, new Worker96());
        workers.put(71, new Worker71());
    }
    public void dataProcessing(int[] data) {
       Worker w = workers.get(data.length);
       if (w == null)
           throw new RuntimeException("Unsupported data length!");
    
       w.doWork(data);
    }
    }
    // как то так...


    По поводу первого случая, если код не предполагает хранение состояния,
    то можно вынести код в отдельный утильный класса в статический метод.
    Ответ написан
    4 комментария
  • Как запустить web проект (war file) из под консоли?

    EugeneP2
    @EugeneP2
    Java Dev
    Spring-Boot вам в помощь. На выходи получаете исполнимый jar файл, в котором будит уже встроенный tomcat/jetty. И все чудесно работать.

    Можно заюзать чисто jetty и запуск будит выглядеть как то так
    java -jar jetty-runner.jar my.war
    Ответ написан
    Комментировать
  • Как сейчас используются практики по доставке 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>
    Ответ написан
    Комментировать