Быстрый пример с 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.