Ответы пользователя по тегу Spring
  • Почему Tomcat отказывается запускать .war с кастомным репозиторием в зависимостях?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Смотри логи, смотри графы maven-зависимостей (возможно есть конфликт в зависимостях этого проекта и tokenizer), такая возможность есть в IDE.

    Ну и почисти pom.xml от лишних зависимостей. Раз уж ты используешь Spring Boot, то вместо прописывания всех Spring-зависимостей с нужной версией, достаточно прописать в свойства
    <spring.version>4.3.0.RELEASE</spring.version>
    И убери
    <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>3.1.0</version>
        </dependency>
        <dependency>
          <groupId>javax.servlet.jsp</groupId>
          <artifactId>jsp-api</artifactId>
          <version>2.0</version>
          <scope>provided</scope>
        </dependency>

    это всё есть у томката

    Зависимость spring-boot-starter-tomcat тоже не нужна.
    Ответ написан
    Комментировать
  • Как отобразить данные из бд на страничку jsp?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Быстрый пример с Spring Framework/Data/Boot

    Создаёшь новый Маven-проект, добавляешь зависимости и указываешь родительский артефакт:
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.5.RELEASE</version>
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>


    Создаёшь класс-сущность, которая будет представлять собой отзыв:
    @Entity
    public class Review implements Serializable {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;
    
        @Column(columnDefinition = "TEXT")
        private String reviewText;
        
        @Temporal(javax.persistence.TemporalType.TIMESTAMP)
        private Date createDate;
    
        // get/set-методы и т.д.
    }


    Создаёшь репозиторий для работы с БД:
    @Repository
    public interface ReviewRepository extends CrudRepository<Review, Integer> {
    }


    Создаёшь контроллер с двумя действиями: отображение списка отзывов и добавление нового отзыва:
    @Controller
    public class SiteController {
    
        @Autowired
        private ReviewRepository reviewRepository;
    
        @RequestMapping
        public ModelAndView index() {
            return new ModelAndView("site/index", Collections.singletonMap("reviews", reviewRepository.findAll()));
        }
    
        @RequestMapping(method = RequestMethod.POST)
        public String createReview(@RequestParam String reviewText) {
            reviewRepository.save(new Review(reviewText, new Date()));
    
            return "redirect:/";
        }
    }


    Создаёшь свою JSP-страницу:
    <?xml version="1.0" encoding="UTF-8"?>
    <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:c="http://java.sun.com/jsp/jstl/core" version="2.0">
    
        <jsp:directive.page contentType="text/html" pageEncoding="UTF-8"/>
        <jsp:output doctype-root-element="html" doctype-system="about:legacy-compat" omit-xml-declaration="true"/>
    
        <html>
            <head>
                <title>GuestBoot Example</title>
            </head>
            <body>
                <h1>Post new review</h1>
                <form method="POST">
                    <label>
                        <textarea name="reviewText" placeholder="Your review here"><jsp:text/></textarea>
                    </label>
                    <br/>
                    <button type="submit">Submit</button>
                </form>
                <hr/>
                <h1>Reviews</h1>
                <c:forEach items="${reviews}" var="review">
                    <div>
                        <c:out value="${review.reviewText}"/><br/>
                        <small><c:out value="${review.createDate}"/></small>
                    </div>
                    <br/>
                </c:forEach>
            </body>
        </html>
    </jsp:root>


    Добавляешь конфигурацию для отображения JSP-страниц:
    @Configuration
    public class WebConfig extends WebMvcConfigurerAdapter {
    
        @Override
        public void configureViewResolvers(ViewResolverRegistry registry) {
            registry.jsp("/WEB-INF/views/", ".jspx");
        }
    
    }


    Создаёшь стартовый класс приложения:
    @SpringBootApplication
    public class GuestBook extends SpringBootServletInitializer {
    
        public static void main(String[] args) {
            SpringApplication.run(GuestBook.class, args)
                    .registerShutdownHook();
        }
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
            return builder.sources(GuestBook.class);
        }
    }


    Запускаешь и наслаждаешься результатом.

    Смотришь репозиторий с рабочим кодом и читаешь документацию по Spring Framework и Spring Boot.
    Ответ написан
    Комментировать
  • Как настроить мапинг запросов на ресурсы web-приложения?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Всё правильно, так как адрес example/some.html попадает под оба правила.
    Правило /{version}/** в твоём случае перекрывает все варианты, так что самый простой способ избавиться от проблемы - сделать правило более строгим (например, /api/{version}/**).

    И да, в @RestController возвращать ModelAndView из методов, ИМХО, как-то некрасиво.

    UPD: методом тыка вышел на такой вариант:
    @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/**.html").addResourceLocations("/WEB-INF/");
        }


    Добавляешь это в SpringWebConfig, в результате чего все файлы, заканчивающиеся на .html будут искаться в /WEB-INF/. Из контроллера можешь убрать обработку .html-запросов
    Ответ написан
  • Ошибка в jboss.logging?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Всё потому, что у тебя в зависимостях фигурируют и jboss-common и jboss-logging. Оба артефакта содержат класс org.jboss.logging.Logger, но с разными описаниями.

    И советую удалить лишние зависимости.
    Ответ написан
    Комментировать
  • Как отправить в JSP отправить текст запроса c выбранной строкой из выпадающего списка?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Реализовать необходимую функциональность ссылками, а не select-ом
    Ответ написан
    Комментировать
  • Как решить проблему с подключением spring-Репозиториев?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    У тебя в классе-сущности идентификатор типа Long, но у репозитория в дженерике указан Integer. Возможно, проблема связана с этим. А вообще да, если у тебя Spring Data JPA, то логичнее просто в интерфейсе указать метод Room findByIndex(String index); без дополнительных аннотаций.
    Ответ написан
    8 комментариев