Профиль пользователя заблокирован сроком с 24 марта 2024 г. и навсегда по причине: систематические нарушения пункта 5.2 правил сервиса
Ответы пользователя по тегу Java
  • Как правильно написать обобщенный метод?

    @My1Name
    Используйте Tree model. Проверяйте поля по имени и стройте ту сущность, которой соответствует поле объекта. А потом уже обобщайте как хотите. Или создавайте свой обобщённый класс (Pojo), проверяйте каждое поле и стройте сразу обобщённый объект, в котором некоторые поля могут быть со значением null.

    См. Как игнорировать неизвестные поля JSON
    Ответ написан
    2 комментария
  • HTTP Status 500 Spring Thymeleaf, в чем причина ошибки?

    @My1Name
    В классе SpringConfig:
    @Bean
    public SpringResourceTemplateResolver templateResolver(){
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        templateResolver.setApplicationContext(servletContext);
        templateResolver.setPrefix("/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode(TemplateMode.HTML);
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setCacheable(false); // отключаем везде кэш на время разработки 
        return templateResolver;
    }
    @Bean
    public SpringTemplateEngine templateEngine(){
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver());
        templateEngine.setEnableSpringELCompiler(true);
        return templateEngine;
    }
    @Bean
    public ThymeleafViewResolver viewResolver(){
    	ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
    	viewResolver.setTemplateEngine(templateEngine());
    	viewResolver.setCharacterEncoding("UTF-8");
    	return viewResolver;
    }

    Вместо jakarta.servlet и thymeleaf-spring6 в poom.xml
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
    	<groupId>org.thymeleaf</groupId>
    	<artifactId>thymeleaf-spring5</artifactId>
    </dependency>
    <dependency>
    	<groupId>javax.servlet</groupId>
    	<artifactId>javax.servlet-api</artifactId>
    	<scope>provided</scope>
    </dependency>
    <dependency>
    	<groupId>javax.servlet</groupId>
    	<artifactId>jstl</artifactId>
    </dependency>

    Класс MySpringMvcDispatcherServletInitializer можно (и нужно) удалить.

    Под Spring6 - Spring Security (если я не ошибаюсь) - ещё не работает.
    Ответ написан
  • В чем ошибка Spring MVC 404?

    @My1Name
    Переложите файлы "hello.hml" и "goodbye.html" на уровень выше: src/main/webapp/hello.html
    В таком случае ваш конфиг будет выглядеть так:
    templateResolver.setPrefix("/");
    templateResolver.setSuffix(".html");
    templateResolver.setTemplateMode(TemplateMode.HTML);

    Контроллер:
    @Controller
    @RequestMapping("/") 
    public class FirstController {
    @GetMapping("/hello")
    public String helloPage() {
            return "hello";
        }
    }

    Страница доступна по адресу localhost:8080/hello где 8080 - это номер порта на котором работает ваш сервер.

    Узел WEB-INF не является частью общедоступного дерева документов приложения. Ни один файл, содержащийся в WEB-INF каталоге, не может быть передан контейнером непосредственно клиенту.
    https://stackoverflow.com/a/19786283/15454143
    Ответ написан
  • Как сказать «ничего не делаем» используя условные операторы?

    @My1Name Автор вопроса
    Только так:
    String imgName;
    for(byte i=0; i<arrayImages.size();i++) {
    imgName = arrayImages.get(i).getOriginalFilename().toLowerCase();
    if (imgName.isBlank())
        removeSlide(i);
    else if (imgName.indexOf("s-1.")!=-1 || imgName.indexOf("s-2.")!=-1 ||
             imgName.indexOf("s-3.")!=-1 || imgName.indexOf("s-4.")!=-1) {
    	 assert true; // file exists. Nothing to do.
    	}
    else {
     	imgName = setCorrectName(imgName, i);
    	if (imgName!=null) {
           // some code...
            }
    }

    Пробовал разные варианты из ответов... Хотел заменить indexOf() на регулярное выражение matches но оно ни в какую не хочет корректно работать.
    Ответ написан
    Комментировать
  • Как реализовать CORS в Reactor Netty?

    @My1Name
    возможно, вы знаете другие способы обработки запросов помощников CORS?

    Spring Security
    https://stackoverflow.com/a/57081659/15454143
    Посмотри настройки для старых версий.
    Ответ написан
    Комментировать
  • В каком контексте значение класса String является неизменяемым в отличии от StringBuilder?

    @My1Name
    Массив — структура данных хранящая набор значений, в простейшем случае фиксированой длины. Массивы не всегда удобно использовать, поэтому ряд языков программирования поддерживают динамические массивы и, Java один из таких языков. ⇨ Данные типа String - это массив char-ов в таких языках как Pascal, C, C++, Java и др.. В Java все строковые литералы помещаются в специальный объект (класс) под который выделяется память, а уже адрес этого объекта помещается в переменную, под которую тоже выделяется память. Java коллекции расширяют возможности работы с массивами и это пожалуй ответ на все ваши вопросы.
    https://javarush.com/quests/lectures/questsyntaxpr...

    Например, если вы заполните HashSet<String> то сможете проверить наличие определенного String-а в массиве строк, заменив s.equals(sb) на list.contains(sb) Такой код будет работать в оперативной памяти используя hashcode (32 битный идентификатор объекта). Это работает быстро и эффективно, так как числовые значения гораздо легче и быстрей сравнить. Однако, каждая строка будет представлять собой отдельный объект и занимать свою ячейку в памяти.

    При конкатенации происходит приблизительно то же самое: Создаётся массив, где каждая строка - это отдельный объект (массив) разного размера. В момент конкатенации создаётся новый объект типа String с размером == сумма двух String и + 2 объекта "склеивания". А если у нас таких операций (итераций) много, то велика вероятность получить outofmemoryerror прежде чем GC (сборщик мусора) успеет собрать все созданные объекты.

    В отличие от языков C/C++ в Java нет доступа к памяти. Программист не может удалить "cell memory" хранящую ссылку на объект и в этом нет необходимости. Эту работу выполняет Garbage collectors (GC) а вся работа с памятью происходит только через Java-машину (JVM).

    С целью экономии памяти, начиная с версии JDK 5 для работы со String-ами в Java имеется StringBuilder. Таким образом у нас всегда один объект, который пропорционально заполненяет StringBuffer, подобно HashSet<String> но с одной ("резиновой") ячейкой в памяти.
    https://docs.oracle.com/javase/8/docs/api/java/lan...
    Ответ написан
    1 комментарий
  • Есть сервера, которые стоит написать именно на Java, а не на Node?

    @My1Name
    Обычно в Node.js весь код на JavaScript выполняется в одном потоке. Для асинхронного выполнения задача помещается в очередь задач. Иными словами, при создании 1000+ сокет соединений, JS будет создавать очередь и тормозить. И это ограничение производительности распространяется буквально на всё, в том числе при работе с файлами, а не только на REST приложения.

    JavaScript — это высокоуровневый ЯП, а компьютер понимает только единицы и нули. Проще говоря, JS проходит через интерпретатор, который построчно преобразует исходный код в эквивалентный машинный код.

    Java в умелых руках работает с байт-кодом. Java проходит через компилятор и окончательный код, который выдает компилятор, оптимизирован и выполняется намного быстрее.

    Плюсы и минусы интерпретатора и компилятора

    Кроме того, невзирая на все нарекания фронтов, гораздо проще и удобней использовать jQuery в сочетании с Ajax и Java сервером, когда речь идёт о web разработке.
    Ответ написан
    8 комментариев
  • Как отправить http post запрос в теле которого будет sql запрос?

    @My1Name
    Как мне сделать так что бы соответствующий http post запрос доставлял на эту страницу sql запрос, далее который обрабатывался и выдавал ответ в качестве выгрузки html с бд.

    Что значит "на эту страницу sql запрос"? Вы хотите вывести тело метода запроса? То есть код (команду), по которой осуществляется та или иная операция с БД?

    Если я всё правильно понял, то ответ - никак. Вы можете только строить догадки, если у вас нет доступа к самой БД

    JDBC я не могу использовать, так как прямого где login и password у меня нет.

    То есть, вы даже не знаете как выглядит таблица. Какие там поля, есть ли индексы и т.д. и т.п. А значит вам нужно создать свой набор команд (свою интерпретацию), который будет доступен для работы с БД через ваш Apache HttpClient.
    Ответ написан
  • Как обратиться в методе контролера к объекту запроса?

    @My1Name
    Как мне теперь обратиться к этому объекту в параметре метода контролера?

    Я не знаю что это за @InitBinder но я также не увидел, чтоб вы где-то создали объект "Product". Если WebDataBinder считается объектом, то вы его преобразовали в строку String str = binder.getTarget().toString()+ Далее вы создали MutablePropertyValues, что эквивалентно Map <String, String> или <String, Object> Короче говоря: вы нигде не создали объект Product чтоб к нему обращаться.
    Ответ написан
    Комментировать
  • Как сбросить кэш Apache Tomcat 9?

    @My1Name
    Сброс кэша в браузере

    Нужно прописать cache-control в вашем приложении, и Tomcat тут ни причём... Если вы используете браузер, то как минимум работаете с Servlet-ом. А значит можете прописать в классе extends HttpServlet что-то подобное:
    response.setHeader("Cache-Control", "no-cache, no-store");
    response.setHeader("Pragma", "no-cache");
    response.setHeader("Expires", "0");

    Но и это не самое лучшее решение... Сегодня все используют Framework Spring. И тогда нужно добавить одну строчку в классе implements WebMvcConfigurer
    registry.setCachePeriod(0);
    В Spring Security:
    http.
    ....
    and()
    .deleteCookies("JSESSIONID")
    .http.build();
    Ответ написан
    Комментировать
  • Есть ли в java оператор аналогичный ?: в php?

    @My1Name
    Именно в java оператора "?" - нет. Есть в шаблонизаторе Thymeleaf для работы с (html) фреймворком Spring. Называют оператор Элвиса
    <td th:text="${teacher.additionalSkills} ?: 'UNKNOWN'" />

    В Java знак вопроса иногда ставится в качестве параметра для коллекций (массивов) с заранее неизвестным типом данных. Например: List <?> В Spring этот условный оператор мало чем отличается от if/else, и лично я ни разу его не использовал.
    Ответ написан
  • В чем причина ошибки в время компиляции?

    @My1Name
    Подскажите в чем может быть причина ошибки компиляции?

    Попробуйте включить базу данных...

    src\main\java\ru\geraskindenis\repository\impl\PersonalAccountRepositoryImpl.java:32: error: cannot find symbol
    preparedStatement.setLong(1, personalAccount.getOwnerId());

    Эта ошибка говорит о том, что у вас проблемы со связью (сущности) @Entity и БД preparedStatement Судя по "cannot find symbol" - ошибка ^ в SQL запросе (но это не точно).

    p.s. На всякий случай, можно ещё переустановить ОС xd
    Ответ написан
    Комментировать
  • Как установить в ответ http-код 412 и одновременно отменить выполнение запросов типа POST, PUT, DELETE?

    @My1Name
    Как установить в ответ http-код 412 и одновременно отменить выполнение запросов типа POST, PUT, DELETE?

    Написать класс - контролер для соответствующей страницы с двумя методами: Один с аннотацией @GetMapping Второй с аннотацией @RequestMapping("/") или @PostMapping для выше упомянутых случаев, и добавить в его параметры HttpServletResponse resp В теле метода:
    resp.setStatus(412); return "redirect:error_page.html";
    Можно сделать метод void или делать переадресацию.

    REST - это GET и POST запросы (обычный HTTP), а необходимые данные передаются в качестве параметров запроса. Так что PUT, DELETE и всё остальное, можно отнести к @PostMapping
    Ответ написан
    Комментировать
  • Как взаимодействуют компоненты в проекте Java + Spring?

    @My1Name
    Думаю ответ на все эти вопросы - Multithreading, где фреймворк Spring является главным потоком, который собирает все наши интерфейсы и выполняет методы классов в своём стриме. Разработчик не может влазить в Runtime фреймворка, и тот в свою очередь не видит наши классы. То есть, классов может быть много, но все они наследуют логику сервлета через интерфейс фреймворка. В этом по идее заключается вся суть IoC (Inversion of Control and Dependency Injection).

    p.s. Если я ошибаюсь, пусть меня поправят профессионалы.
    Ответ написан
    Комментировать
  • Как правильно создать БД в одном execute?

    @My1Name Автор вопроса
    Скачиваем JDBC драйвер и добавляем в проект через Build Puth. Тренируемся создавать запросы и проверяем:
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.Statement;
    
    public class Main {
    	public static void main(String[] args) {
    		String command = "C:\\ путь к файлу .exe для запуска MySQL сервера с приложения \\MySQL Server 8.0\\bin\\mysqld.exe";
    		try{
    	   Runtime.getRuntime().exec(command); //run MySql
                String url = "jdbc:mysql://localhost/";
                String username = "root";
                String password = "byDefault";
                Class.forName("com.mysql.cj.jdbc.Driver").getDeclaredConstructor().newInstance();
                try (Connection conn = DriverManager.getConnection(url, username, password)){
                	 Statement statement = conn.createStatement();
                	 statement.execute("CREATE DATABASE IF NOT EXISTS usersdb");
                	 statement.execute("USE usersdb");
                	 statement.execute("CREATE TABLE IF NOT EXISTS users"+
                	    		"(id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,"+
                	    		"email VARCHAR(256) NOT NULL,"+
                	    		"password VARCHAR(128),"+
                	    		"UNIQUE KEY(email));");
                		}
            }
    		catch(Exception e){
                e.printStackTrace();
            }
    }

    Всё работает. Зашивать JDBC коннектор в проект, запускать или создавать базу данных с приложения, решать только разработчику. https://www.mysqltutorial.org/mysql-unique/
    Ответ написан
  • Почему поиск FuzzyQuery (Apache Lucene) ничего не возвращает?

    @My1Name Автор вопроса
    FuzzyQuery ищет слово + offset символов в слове (по параметру maxEdits). Он не ищет словосочетания. Нужно унифицировать набор методов Query. FuzzyQuery - это один из множества фильтров (модификаторов) запроса. Фильтры нужно комбинировать для получения желаемого результата. Вот некоторые из них: TermQuery, PhraseQuery, BooleanQuery, WildcardQuery, PrefixQuery...

    Основной принцип работы Apache Lucene основан на подсчитывании очков (Scoring). Так создаётся релевантный список результатов поиска по индексам.
    Ответ написан
  • Spring boot websocket через postman всегда возвращает 403, как так?

    @My1Name
    Попробуйте добавить бин:
    @Configuration
    @EnableWebSocketSecurity  
    public class WebSocketSecurityConfig {
    
        @Bean
        AuthorizationManager<Message<?>> messageAuthorizationManager(MessageMatcherDelegatingAuthorizationManager.Builder messages) {
            return AuthorityAuthorizationManager.hasRole("USER");
        }
    }

    Возможно вы отправляете запросы без авторизации...
    Ответ написан
    Комментировать
  • Ошибка, в чем проблема?

    @My1Name
    Проблема в конструкции if / else Такой калькулятор нужно через switch писать. Массив выходит за пределы...
    java.lang.ArrayIndexOutOfBoundsException: Index 2 out of bounds for length 1
    Ответ написан
    Комментировать
  • Как исправить проблему импорта классов после добавления JPA зависимости?

    @My1Name Автор вопроса
    Нужно добавить ещё одну зависимость:
    <dependency>  
    		<groupId>org.springframework.data</groupId>  
    		<artifactId>spring-data-jpa</artifactId>    
    		</dependency>

    Видимо произошёл какой-то конфликт зависимостей, от того все классы стали недоступны... Spring Data JPA предоставляет три репозитория: CrudRepository, PagingAndSortingRepository и JpaRepository. А Spring Boot Starter Data JPA позволяет подключаться приложению к реляционной базе данных.
    Ответ написан
    1 комментарий
  • Почему окно закрылось, а приложение нет SWING?

    @My1Name
    У вас в этом участке кода какая-то путаница:
    if (Objects.equals(selectedOption, options[0])) {
                        menu.setVisible(true);
                        viewer.dispose();
                    } else {
                        viewer.setVisible(false);
    ....

    Если options[0]=="Exit" а options[1]=="Restart"; то для закрытия приложения нужно сделать System.exit(0);Изменение параметров видимости окна "setVisible" и закрытие программы, это не одно и тоже.

    Проблема с логикой: Судя по вашему коду, вы создаёте объект класса GraphicsViewer(model) и позиционируете его при нажатии "Exit" вместо завершения программы.
    Ответ написан
    Комментировать