• Как war файл вернуть в java приложение?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    Если архив (war-файл) упакован без исходников, то только пройти его обратно декомпилятором. Разархивировать его можно утилитой jar. Собственно он из себя представляет простой zip-архив.
    Декомпилировать можно через java-decompiler.github.io
    Ну и обзор по декомпиляторам https://javahungry.blogspot.com/2018/12/8-best-jav...
    Да, при декомпиляции скорее всего потеряются названия переменных. Но это лучше, чем ничего!
    И да, pom.xml придется нарисовать заново!
    Ответ написан
  • Post и Get запросы, какая между ними разница и что лучше и для каких целей?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    Общего между ними то что они работают одинаково. Разницы между ними технически никакой. А вот идеологические различия есть.

    Я расскажу о них в контексте PHP. Прошу заметить что протокол HTTP к PHP имеет косвенное отношение потому что он создавался для обмена html страницами а PHP просто расширяет возможности и того и другого.

    GET запрос используется чтобы получить данные а POST чтобы отправить. (Напоминаю что технически они работают одинаково).

    Поэтому в контексте PHP опираясь на эту идеологию сделали следующим образом:
    1. При каждом запуске PHP по умолчанию создаются суперглобальные массивы ($_GET, $_POST).
    2. Если в строке запроса есть вопросительный знак(?). То все что после него считается параметрами GET запроса они представлены в формате 'ключ'='значение' и в качестве разделителя используется знак амперсанда (&)
    Пример:
    GET /index.php?name=Андрей&surname=Галкин
    это строка запроса, тут 2 параметра. эти параметры попадут в массив $_GET.
    3. $_POST заполняется другим способом. содержимое этого массива заполняется из "заголовков запроса". То есть из места, скрытого от глаз в явном виде. Всю рутину по созданию таких заголовков берет на себя браузер. Хотя иногда и что-то редактируется в заголовках в ручную.

    Чаще всего пост запрос используется в формах (для отправки данных).

    Например у нас есть форма для входа 2 поля логин и пароль.

    Представим что мы используем GET метод. Тогда при отправке формы мы перейдем на следующий адрес /login.php?login=Андрей&password=123 согласитесь что так передавать такую информацию совсем не безопасно. Любой может открыть ваш браузер и начиная вводить адрес сайта он из истории может увидеть ваши пароли и логины.

    А вот если бы мы указали методом POST то мы бы получили следующий запрос:
    POST /login.php (login=Андрей&password=123) то что в скобочках было бы скрыто и никак не сохранено в браузере.

    Теперь другая ситуация например форма поиска. Мы вводим текст и получаем страницу с результатами. Вот тут уместнее GET форма. потому что нам было бы удобно сразу иметь ссылку на результат поиска, то есть добавить в строку запроса можно выразится "Публичные параметры", которыми можно поделиться. И как результат в строке браузера будет конкретная ссылка на текущую страницу. Мы можем ее скопировать, и разместить где-нибудь, или например скинуть другу. И получить при переходе одну и ту же страницу. А не просить других людей зайти на сайт и в поиск вбить определенную фразу чтобы получить необходимую страницу.

    В общем подводя итог:
    GET - это чтобы получить определенную страницу в определенном виде ( сортировка, текущая страница в блоге, строка поиска и т.п. ).
    POST - для оправки данных которые не влияют на отображение страницы, в том плане что эти данные влияют только на результат выполнения скрипта ( логины, пароли, номера кредиток, сообщения и т.п. ).

    И еще одна хорошая новость их можно комбинировать, например
    POST /index.php?page=login (login=Андрей&password=123) Думаю я уже достаточно объяснил что из этого получится и какие параметры в какой массив попадут.
    Ответ написан
  • Как правильно сделать авторизацию пользователя на servlet+jsp?

    @Evgeny_13
    1. Написать сервлет, который будет проверять на эдентичность userName и password, например из базы, и писать роль.
    2. Написать фильтр, который будет получать роль авторизировавшегося пользователя и запрещать переход на какие-либо страницы, делать какие-либо действия.
    3. Сделать jsp-страницу, которая будет использовать сервлет и отправлять данные!

    P.S. Не забудь зарегистрировать сервлет и фильтр в web.xml.

    1. b18b5f93b4eb4a0e988cd1e1190c139b.png
    2. a9a8d900d25348edbb04a6670f7dfbd2.png
    3. 2207cda414044a729399b22bef125fe1.png
    Ответ написан
  • Как запустить web приложение на weblogic?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    Вот, здесь все очень подробно написано - https://dev64.wordpress.com/2012/03/23/simple-serv...
    В самом конце статьи Вы получаете war-файл - это и есть упакованное web-приложение (веб сервис).
    Разворачиваете ваш файл в weblogic по этой инструкции - https://www.oracle.com/webfolder/technetwork/tutor...
    Ответ написан
  • Как правильно построить обобщенное иерархическое выражение?

    @ProTreo
    DROP TABLE IF EXISTS #SalaryData
    CREATE TABLE #SalaryData (
      Id INT NOT NULL PRIMARY KEY IDENTITY,
      EmployeeId INT NOT NULL,
      SalaryDate DATETIME CONSTRAINT DF__SalaryData__SalaryDate DEFAULT (GETUTCDATE()),
      Salary DECIMAL(19,4) NOT NULL CONSTRAINT DF__SalaryData__Salary DEFAULT (0.0)
    )
    
    INSERT #SalaryData(EmployeeId, Salary)
    VALUES
    (2, 30000.0),
    (1, 40000.0),
    (5, 40000.0),
    (3, 30000.0),
    (4, 19000.0)
    
    -- Просто выборка по зарплате
    SELECT *
    FROM #SalaryData sd
    ORDER BY sd.Salary DESC
    
    -- Выборка зарплат и сотрудников, у которых зарплата больше чем у целевого сотрудника
    ;WITH CTE AS
    (
      SELECT
        RootEmployeeId = sd.EmployeeId,
        sd.EmployeeId,
        sd.Salary,
        Depth = 0
      FROM #SalaryData sd
    
      UNION ALL
    
      SELECT
        RootEmployeeId = cte.EmployeeId,
        sd.EmployeeId,
        sd.Salary,
        Depth = cte.Depth + 1
      FROM CTE cte
        INNER JOIN #SalaryData sd ON sd.Salary > cte.Salary
    )
    SELECT
      cte.RootEmployeeId,
      STRING_AGG(CONCAT(cte.Salary, ' (', cte.EmployeeId, ')'), ', ') WITHIN GROUP (ORDER BY cte.Salary ASC)
    FROM CTE cte
    WHERE cte.Depth < 2
    GROUP BY cte.RootEmployeeId
    Ответ написан
  • Почему localhost запрашивает логин и пароль?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    У вас spring boot starter security не настроен! Он по умолчанию на все пароль требует ( по описанию)
    Ответ написан
  • Как изменить запрос ms sql чтобы работал на postgresql?

    а вы доку пробовали смотреть, как добавить default value, constraint, foreign key ?

    ALTER TABLE salary ALTER COLUMN salary_date SET DEFAULT current_date;
    
    ALTER TABLE salary
    ADD CONSTRAINT FK_Salary_Employee_ID FOREIGN KEY(employee_id)
    REFERENCES EMPLOYEE(employee_id)
    ON UPDATE CASCADE
    ON DELETE CASCADE


    Таблица EMPLOYEE разумеется должна существовать, а поле employee_id должно быть уникальным.

    https://dbfiddle.uk/?rdbms=postgres_10&fiddle=238a...
    Ответ написан
  • Как подключиться к ms sql sever?

    tsklab
    @tsklab Куратор тега SQL Server
    Здесь отвечаю на вопросы.
    Проверьте включён ли и активирован ли (две настройки) у вас TCP/IP.
    Включить

    5df602e716df2593868212.png

    Активировать

    5df60313da527699377716.png


    а где это можно посмотреть?

    Найти where SQLServerManager*.msc и запустить.

    Команда where SQLServerManager*.msc это и есть поиск. Файл по-умолчанию должен быть в C:\Windows\System32. Должен быть во всех редакциях, отключить установку невозможно.
    Документация.
    И здесь нет?

    5df65d6a2e645065735710.png
    Ответ написан
  • Как подключиться к ms sql sever?

    firedragon
    @firedragon
    Senior .NET developer
    Тип учетной записи mssql какой? Windows или SQL ?

    jdbc:sqlserver://localhost;instanceName=SQLEXPRESS;DatabaseName=test;integratedSecurity=true
    Ответ написан
  • Где найти properties от ms sql для конфига?

    firedragon
    @firedragon
    Senior .NET developer
    Используйте встроенную аутентификацию, там пароль не нужен.
    https://github.com/bhochhi/howto-guide/wiki/How-to...

    <bean id="dataSource"	class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
        <property name="url" value="jdbc:sqlserver://host:port;DatabaseName=dbName;integratedSecurity=true" />
     </bean>
    Ответ написан
  • Как прикрутить UI для Web приложения?

    @UnformedVoid
    Разработчик ПО
    Да, вы правы, вам нужен JS. Советую воспользоваться Vue, так как он прост в использовании и достаточно мощный. В целом последовательность такова:
    Разобраться с JS
    Разобраться с Vue
    Немного разобраться с NodeJS
    Немного погрузиться в Webpack
    Выбрать какой-нибудь готовый набор элементов (например Material Design, можно и свои написать, тогда либо CSS, SCSS, либо TailwindCSS и т.д.)
    Написать SPA
    Объединить с Java бэкендом — тут я не мастер разъяснения давать, так как не специалист по Java. Примерно представляю, что есть два пути:
    1) У Spring есть способ самому отдавать js и css файлы
    2) Можно поднять NodeJS сервер (благо это очень просто) и нужные роуты перенаправлять к нему (возможно через обратный прокси, например Nginx)

    В целом, всё очень легко гуглится. Так что ссылки я сюда громоздкие пихать не буду.

    UPD.
    Разве что вот эту:
    https://www.w3schools.com
    Ответ написан
  • Как освобождать Connection в Hibernate?

    @lexas
    предположу, что проблема не в хибернате, а в транзакшн менеджере. транзакции открываются, но не закрываются. session от hibernate тут не при чем.

    я бы посоветовал:
    а) определить явные границы транзакций
    б) подебажить кто открывает и почему не поппдает в закрытии (коммит или роллбак) транзакции
    Ответ написан
  • Чем отличается Hibernate от spring Data и в принципе инструменты работы с БД?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    JDBC - это стандарт доступа к базам данных, JPA - это стандарт персистентности, Hibernate - это реализующий его ORM, Spring Data - это механизм организации репозиториев, а репозиторий - это абстракция, лежащая на уровень выше ORM. То есть Spring Data использует Hibernate, а Hibernate использует JDBC.
    Ответ написан
  • Как именно работает map?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    size всего лишь возвращает, сколько ключей реально лежит в папке.
    Все твои рассуждения про "завели бакет", "кладем в новый бакет" неверны. Ты ничего не заводишь, это детали реализации хеш-таблицы. Бакет это связный список, в котором лежат пары ключ-значение, у которых хеш ключа равен по модулю количества бакетов. Это и есть тот список, который ты мечтаешь получить, и это так не работает. То есть ты его не получишь, тк это детали реализации.
    И далее, ты эту реализацию сломал своими мутабельными ключами. В списке теперь лежит ключ, у которого хеш не соответствует списку. Естественно, мапа не найдет по этому ключу ничего, тк будет искать в другом списке(бакете). Вывод - никогда не мутируй ключи.

    //заводим бакет который который будет всегда первым
    map.put(null, null);
    //значение перетерлось так как hashCode одинаков и equals вернул true
    map.put(null, "afterNull");


    Нет, всё не так. Нулл обрабатывается просто отдельно, под него отдельный элемент, это не бакет.

    Когда ты ложить в мапу по одинаковому ключу разные значения, более позднее перетирает старое. Просто потому что в этом суть хеш-таблицы, и поэтому она так реализована. Бакеты не хранят одинаковые по хешу ключи, они хранят ключи с хешами, одинаковыми по модулю количества бакетов.

    Сколько в данный момент в мапе бакетов тебя вообще заботить не должно.

    Читай код. Видно, что ты где-то нахватался неправильно (или плохо) разжеванной теории, и пытаешься на этом выехать. Большинство твоих вопросов снимут сорсы хешмапы и, в крайнем случае, дебаггер.
    Ответ написан
  • Как отправлять email определяя необходимость отправки в runtime?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Spring Integration поможет и с отслеживанием изменений в БД и с отправкой email.
    Ответ написан
  • Как отправлять email определяя необходимость отправки в runtime?

    @azerphoenix
    Не уверен, но если я правильно понимаю задачу, то вам по идее должны помочь Spring Email, @Scheduled для запуска по крону например, и @Async для асинхронной отправки. Но возможно, что есть варианты попроще
    Ответ написан
  • Что дает Java Spring?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    Вся и идея spring и ему подобных в технологиях DI и IoC.
    Первая технология DI - Dependency Injection - внедрение зависимостей. Смысл следующий, пусть у нас есть класс, который зависит от другого класса, тогда контейнер автоматически найдет все зависимости и сам проинициализирует нужный класс. Пример: пусть у нас есть интерфейс "Фрукт", класс "Яблоко", интерфейс "Паразит", класс "Червяк". В класса "Яблоко" указываем в одном из методов или конструкторе зависимость от интерфейса "Паразит". Теперь положим в контейнер классы "Червяк" и "Яблоко", и попросим контейнер создать дать нам инстанс класса "Яблоко".
    Контейнер выполнит следующие действия:
    - посмотрит, что без класса, реализующего интерфейс "Паразит", он не может создать "Яблоко".
    - посмотрит на зарегистрированные классы, не реализует ли кто интерфейс "Паразит" и обнаружит класс "Червяк"
    - создаст инстанс класса "Червяк"
    - создаст инстанс класса "Яблоко" и передаст ему инстанс класса "Червяк"
    - отдаст созданный инстанс "Яблоко" нам.

    Теперь мы можем создать класс "Ева" с зависимостью от интерфейса "Фрукт", положить его в контейнер, и положить в контейнер класс "Адам" с зависимостью от "Ева" и попросить создать нам инстанс класса "Адам" :-)
    MutablePicoContainer pico = new DefaultPicoContainer();
    pico.addComponent(Fruit.class);
    pico.addComponent(Worm.class);
    pico.addComponent(Eve.class);
    pico.addComponent(Adam.class);
    .....
    Adam adam = pico.getComponent(Adam.class);


    Вторая технология IoC - Inversion of Control - контроль управления - это как раз и есть одна из реализаций принципа DI, когда внедрение зависимостей происходит через посредника - фреймворк.

    Легче всего разобраться с этим (а уж потом переходить к spring) - поработать с простыми контейнерами типа picocontainer , nanocontainer и guice.
    - picocontainer.com/introduction.html
    - https://github.com/google/guice
    Ответ написан
  • Как обработать значение в контроллере из выпадающего списка?

    @azerphoenix
    Здравствуйте!

    Напишу примерный код, вы уже адаптируйте под себя.
    В контроллере из дропдоун вы можете получить, как сам объект, так и id объекта, а потом в БД найти этот объект по ID.

    Вариант с поиском объекта по ID:
    Plant plant = plantRepository.findById(id);
    Можете использовать Optional, чтобы избежать NPE. Optional<Plant>
    Ответ написан