Создание веб-приложений на Java с использованием Spring Framework никогда не было проще. Если вы уже знакомы с Java и практически не имеете опыта создания веб-приложений, или если вы обеспокоены тем, что все крутые ребята отказались от Java в пользу Ruby и Node.js, вы хотите прочитать это.
Я намерен предоставить здесь практическое руководство, чтобы быстро приступить к созданию современных веб-приложений с использованием Java и Spring.
Мы будем использовать последние версии Java, Spring Framework (4.x), Spring Boot (v1.2.x), Spring Security, Spring Data JPA, Thymeleaf и Maven 3.
Зачем использовать Spring Framework
Spring — одна из наиболее широко распространенных сред Java с открытым исходным кодом.
- Spring — зрелая, но все еще инновационная среда с открытым исходным кодом
- У Spring очень активное сообщество
- Spring легкий — его можно запустить из командной строки, используя встроенный контейнер
- Spring и особенно Spring Boot повышают производительность — нет необходимости в настройке XML
Весна — это больше, чем рамки …
… Это платформа, которая может помочь вам охватить большинство технологий, необходимых для создания веб-приложений:
- Создание приложений MVC
- Обеспечение аутентификации и авторизации
- Подключение к базам данных RDBMS с использованием JDBC, Hibernate и JPA
- Подключение к базам данных NoSQL (MongoDB, Neo4J, Redis, Solr, Hadoop и т. Д.)
- Обработка сообщений (JMS, AMQP)
- Кэширование
- и т.п.
Время создать некоторый код
В этом руководстве мы создадим пример приложения для сокращения URL (исходный код доступен здесь ), и, хотя этот пост не охватывает все аспекты построения веб-приложения, надеюсь, вы найдете достаточно полезной информации, чтобы иметь возможность начать и хотеть узнать больше.
Приложение состоит из одной HTML-страницы, и оно может создать короткий URL-адрес из любого URL-адреса, и, как вы, вероятно, можете догадаться, оно также может перенаправить с короткого URL-адреса на исходный URL-адрес.
Для запуска выполните в командной строке следующую команду (при условии, что у вас уже установлен Maven v3 ):
1
|
$ mvn spring-boot:run |
Составные части
YourlApplication.java
Это основной класс приложения, который инициализирует контекст Spring, включая все компоненты Spring в этом проекте, и запускает веб-приложение внутри встроенного веб-контейнера Apache Tomcat ( http://tomcat.apache.org ).
1
2
3
4
5
6
7
|
@SpringBootApplication public class YourlApplication { public static void main(String[] args) { SpringApplication.run(YourlApplication. class , args); } } |
Это в основном метод @SpringBootApplication и метод SpringApplication.run (), который делает магию здесь.
UrlController.java
1
2
3
4
5
6
7
|
@Controller public class UrlController { @Autowired private IUrlStoreService urlStoreService; // ... } |
Следуя парадигме MVC, этот класс служит контроллером (обратите внимание на аннотацию @Controller), который обрабатывает HTTP-запросы. Каждый метод в этом классе с аннотацией @RequestMapping сопоставляется с конкретной конечной точкой HTTP:
- showForm (): отображает домашний экран, где пользователи могут вводить URL для сокращения
1234
@RequestMapping
(value=
"/"
, method=RequestMethod.GET)
public
String showForm(ShortenUrlRequest request) {
return
"shortener"
;
}
- redirectToUrl (): перенаправляет с сокращенного URL на исходный
01020304050607080910
@RequestMapping
(value =
"/{id}"
, method = RequestMethod.GET)
public
void
redirectToUrl(
@PathVariable
String id, HttpServletResponse resp)
throws
Exception {
final
String url = urlStoreService.findUrlById(id);
if
(url !=
null
) {
resp.addHeader(
"Location"
, url);
resp.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
}
else
{
resp.sendError(HttpServletResponse.SC_NOT_FOUND);
}
}
- shortenUrl (): как следует из названия, он создает сокращенную версию предоставленного URL-адреса и передает ее в файл shorttener.html для отображения.
01020304050607080910111213141516171819202122
@RequestMapping
(value=
"/"
, method = RequestMethod.POST)
public
ModelAndView shortenUrl(HttpServletRequest httpRequest,
@Valid
ShortenUrlRequest request,
BindingResult bindingResult) {
String url = request.getUrl();
if
(!isUrlValid(url)) {
bindingResult.addError(
new
ObjectError(
"url"
,
"Invalid url format: "
+ url));
}
ModelAndView modelAndView =
new
ModelAndView(
"shortener"
);
if
(!bindingResult.hasErrors()) {
final
String id = Hashing.murmur3_32()
.hashString(url, StandardCharsets.UTF_8).toString();
urlStoreService.storeUrl(id, url);
String requestUrl = httpRequest.getRequestURL().toString();
String prefix = requestUrl.substring(
0
, requestUrl.indexOf(httpRequest.getRequestURI(),
modelAndView.addObject(
"shortenedUrl"
, prefix +
"/"
+ id);
}
return
modelAndView;
}
Как видите, аннотация @RequestMapping заботится о сопоставлении одного URL-адреса с методом Java. Метод может иметь несколько параметров:
- @PathVariable (то есть: id), который происходит из динамической части URL (/ {id}), или
- @RequestParam или
- POJO (Простой старый Java-объект), где поля соответствуют параметрам запроса, или
- @RequestBody в случае запросов POST, или
- другие предопределенные компоненты, которые Spring делает доступными (например, HttpServletResponse)
ShortenUrlRequest.java
Spring укороченный запрос URL отображается в этот POJO (простой старый объект Java). Spring также заботится о проверке запроса, см. Аннотации в поле url.
01
02
03
04
05
06
07
08
09
10
11
12
13
|
public class ShortenUrlRequest { @NotNull @Size (min = 5 , max = 1024 ) private String url; public String getUrl() { return url; } public void setUrl(String url) { this .url = url; } } |
shortener.html
Это шаблон на основе Thymeleaf ( http://www.thymeleaf.org/ ), который использует Twitter Bootstrap ( http://getbootstrap.com/ ) для визуализации HTML-кода главного экрана. Он отображает данные (модель), предоставленные сопоставлениями запросов в классе UrlController.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
... < div class = "jumbotron" > < div class = "container" > < h1 >Shorten your url</ h1 > < p > < div class = "alert alert-success" role = "alert" th:if = "${shortenedUrl}" th:utext="'Link created: <a href=\'' + ${shortenedUrl} + '\'>' + ${shortenedUrl} + '</a>'"> </ div > < form class = "form-inline" th:action = "@{/}" th:object = "${shortenUrlRequest}" method = "POST" > < div class = "alert alert-danger" role = "alert" th:if = "${#fields.hasErrors('*')}" th:errors = "*{url}" >Input is incorrect</ div > < div class = "form-group" > < input type = "text" class = "form-control" id = "url" name = "url" th:field = "*{url}" th:class = "${#fields.hasErrors('url')}? fieldError" /> </ div > < button type = "submit" class = "btn btn-primary" >Shorten</ button > </ form > </ p > </ div > </ div > ... |
InMemoryUrlStoreService.java
В настоящее время приложение сохраняет только сокращенные URL-адреса в постоянном слое в памяти, реализованном в этом минималистском классе. Позже мы можем улучшить это, внедрив интерфейс IUrlStoreService для сохранения данных в базе данных.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
@Service public class InMemoryUrlStoreService implements IUrlStoreService{ private Map<String, String> urlByIdMap = new ConcurrentHashMap<>(); @Override public String findUrlById(String id) { return urlByIdMap.get(id); } @Override public void storeUrl(String id, String url) { urlByIdMap.put(id, url); } } |
Обратите внимание на метод @Service, который сообщает Spring, что это bean-компонент из уровня Service, который может быть внедрен в другие bean-компоненты, например UrlController.
Вывод
Это в двух словах. Мы рассмотрели все части этого веб-приложения. Я надеюсь, вы согласны с тем, что создание веб-приложений с использованием Java и Spring может быть увлекательным. Больше нет шаблонного кода и конфигураций XML, последняя версия Spring позаботится обо всем этом за нас.
Если вам интересно узнать больше о Spring Framework и Spring Boot, не забудьте подписаться на мою рассылку, чтобы получать последние обновления о Spring. Не стесняйтесь оставлять комментарии ниже, если у вас есть какие-либо вопросы или предложения.
Ссылка: | Создание современных веб-приложений с использованием Java и Spring от нашего партнера по JCG Дэвида Кисса из блога Создание масштабируемых корпоративных приложений |