Задать вопрос
@drox73
Начинаю только во всем разбираться, web-разработка

Как отобразить данные из бд на страничку jsp?

Есть проект "Гостевая книга", с jsp странички принимает несколько значений заносит их в бд(Postgresql). Нужно вывести на ту же страничку jsp данные из бд. Вычитал в инете, что это можно реализовать через model and view (spring), но как это сделать хз. Рассчитываю на вас дамы и господа)
  • Вопрос задан
  • 4498 просмотров
Подписаться 2 Оценить 2 комментария
Решения вопроса 1
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.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
compilator
@compilator
Senior Data Engineer
Что мешает при загрузке страницы сначала сделать выборку из базы и напечатать ее на странице ?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы