SlideShare a Scribd company logo
Курс по Java, 2016
Servlet, JSP
Курс по Java, 2016
Servlet API
Курс по Java, 2016
javax.servlet.Servlet
import javax.servlet.GenericServlet;
public class MyServlet extends GenericServlet {
@Override
public void service(ServletRequest servletRequest,
ServletResponse servletResponse)
throws ServletException, IOException {
// do something
}
}
Курс по Java, 2016
javax.servlet.ServletRequest
String remoteAddress = servletRequest.getRemoteAddr();
String contentType = servletRequest.getContentType();
InputStream input = servletRequest.getInputStream();
String parameter = servletRequest.getParameter("name");
Object attribute = servletRequest.getAttribute("name");
servletRequest.setAttribute("name", attribute);
Курс по Java, 2016
javax.servlet.ServletResponse
servletResponse.setContentType("text/html");
servletResponse.setContentLength(256);
OutputStream output = servletResponse.getOutputStream();
Курс по Java, 2016
javax.servlet.http.HttpServlet
public class MyHttpServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// process GET request
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// process POST request
}
Курс по Java, 2016
javax.servlet.http.HttpServletRequest
String remoteAddress = request.getRemoteAddr();
String contentType = request.getContentType();
Reader reader = request.getReader();
String parameter = request.getParameter("name");
Object attribute = request.getAttribute("name");
request.setAttribute("name", attribute);
Cookie[] cookies = request.getCookies();
String proxiedClient = request.getHeader("X-Forwarded-For");
HttpSession session = request.getSession();
Курс по Java, 2016
javax.servlet.http.HttpSession
HttpSession session = request.getSession();
Object sessionAttribute = session.getAttribute("name");
session.setAttribute("name", sessionAttribute);
Курс по Java, 2016
javax.servlet.http.HttpServletResponse
response.setContentType("text/html");
response.setContentLength(256);
Writer writer = response.getWriter();
response.addCookie(new Cookie("name", "value"));
response.addHeader("X-My-Header", "value");
response.sendError(500, "Everything failed");
response.sendRedirect("/other-path");
Курс по Java, 2016
Servlet Container
Курс по Java, 2016
Apache Tomcat
Самый популярный Servlet/JSP контейнер
https://tomcat.apache.org/
Курс по Java, 2016
$CATALINA_HOME
├── bin
├── conf
├── lib
├── logs
├── webapps
│ ├── hello
│ │ ├── index.jsp
│ │ ├── META-INF
│ │ └── WEB-INF
│ │ ├── classes
│ │ │ └── it
│ │ │ └── sevenbits
│ │ │ └── example
│ │ │ └── hello
│ │ │ └── HelloWorldServlet.class
│ │ └── web.xml
│ ├── hello.war
│ └── ROOT
└── work
Курс по Java, 2016
WAR
Web Application aRchive
│ ├── hello.war
│ │ ├── index.jsp
│ │ ├── META-INF
│ │ └── WEB-INF
│ │ ├── classes
│ │ │ └── it
│ │ │ └── sevenbits
│ │ │ └── example
│ │ │ └── hello
│ │ │ └── HelloWorldServlet.class
│ │ └── web.xml
Курс по Java, 2016
War в Maven
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>it.sevenbits.example</groupId>
<artifactId>hello</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>hello Maven Webapp</name>
<url>http://maven.apache.org</url>
<build>
<finalName>hello</finalName>
</build>
</project>
Курс по Java, 2016
Webapp в Maven
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
Курс по Java, 2016
Webapp в Maven
Курс по Java, 2016
web.xml
<web-app>
<display-name>Sample Web Application</display-name>
<servlet>
<servlet-name>HelloWorldServlet</servlet-name>
<servlet-class>
it.sevenbits.example.hello.HelloWorldServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/world</url-pattern>
</servlet-mapping>
</web-app>
Курс по Java, 2016
Сборка веб приложения
mvn package
cp target/hello.war $CATALINA_HOME/webapps
Курс по Java, 2016
HelloWorldServlet
public class HelloWorldServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/plain");
PrintWriter out = response.getWriter();
out.println("Hello, world");
}
}
Курс по Java, 2016
JSP
Java Server Pages
Servlet наоборот
Курс по Java, 2016
hello_world.jsp
<!DOCTYPE html>
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>Hello, world!</h1>
</body>
</html>
Курс по Java, 2016
Model — View — Controller
MVC
Курс по Java, 2016
Model
● Атрибуты запроса
● Сессия
Курс по Java, 2016
View
JSP
<!DOCTYPE html>
<html>
<head>
<title>Hello <%=request.getAttribute("name")%></title>
</head>
<body>
<h1>Hello, <%=request.getAttribute("name")%>!</h1>
</body>
</html>
Курс по Java, 2016
Controller
Servlet
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// model manipulations
String name = request.getParameter("name");
request.setAttribute("name", name);
// forward to view
RequestDispatcher dispatcher =
request.getRequestDispatcher("hello_name.jsp");
dispatcher.forward(request, response);
}
Курс по Java, 2016
Forward RequestDispatcher.forward(request, response)
Курс по Java, 2016
Redirect HttpServlerResponse.sendRedirect(“path”)
Курс по Java, 2016
Курс по Java, 2016
J2EE
Курс по Java, 2016
Домашнее задание
Поставить Tomcat.
Сделать простое веб приложение с отправкой формы.
Посмотреть, в какой java код превращаются JSP страницы.
annie.tarasenko@7bits.it denis.nelubin@7bits.it

More Related Content

Viewers also liked

Курс Java-2016. Занятие 12. DBMS, JDBC
Курс Java-2016. Занятие 12. DBMS, JDBCКурс Java-2016. Занятие 12. DBMS, JDBC
Курс Java-2016. Занятие 12. DBMS, JDBC
7bits
 
Курс Java-2016. Занятие 08. Итераторы, многопоточность
Курс Java-2016. Занятие 08. Итераторы, многопоточностьКурс Java-2016. Занятие 08. Итераторы, многопоточность
Курс Java-2016. Занятие 08. Итераторы, многопоточность
7bits
 
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Стажировка-2015. Разработка. Занятие 13. Сборка фронтендаСтажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
7bits
 
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.
7bits
 
Стажировка-2015. Разработка. Занятие 14. Twitter Flight
Стажировка-2015. Разработка. Занятие 14. Twitter FlightСтажировка-2015. Разработка. Занятие 14. Twitter Flight
Стажировка-2015. Разработка. Занятие 14. Twitter Flight
7bits
 
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекцииКурс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
7bits
 
Спецкурс-2015. Занятие 05. Системы контроля версий
Спецкурс-2015. Занятие 05. Системы контроля версийСпецкурс-2015. Занятие 05. Системы контроля версий
Спецкурс-2015. Занятие 05. Системы контроля версий
7bits
 
курс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключениякурс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключения
7bits
 
Курс Java-2016. Занятие 01. Введение в Java как технологию
Курс Java-2016. Занятие 01. Введение в Java как технологиюКурс Java-2016. Занятие 01. Введение в Java как технологию
Курс Java-2016. Занятие 01. Введение в Java как технологию
7bits
 
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
7bits
 

Viewers also liked (10)

Курс Java-2016. Занятие 12. DBMS, JDBC
Курс Java-2016. Занятие 12. DBMS, JDBCКурс Java-2016. Занятие 12. DBMS, JDBC
Курс Java-2016. Занятие 12. DBMS, JDBC
 
Курс Java-2016. Занятие 08. Итераторы, многопоточность
Курс Java-2016. Занятие 08. Итераторы, многопоточностьКурс Java-2016. Занятие 08. Итераторы, многопоточность
Курс Java-2016. Занятие 08. Итераторы, многопоточность
 
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Стажировка-2015. Разработка. Занятие 13. Сборка фронтендаСтажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
 
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.
 
Стажировка-2015. Разработка. Занятие 14. Twitter Flight
Стажировка-2015. Разработка. Занятие 14. Twitter FlightСтажировка-2015. Разработка. Занятие 14. Twitter Flight
Стажировка-2015. Разработка. Занятие 14. Twitter Flight
 
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекцииКурс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
 
Спецкурс-2015. Занятие 05. Системы контроля версий
Спецкурс-2015. Занятие 05. Системы контроля версийСпецкурс-2015. Занятие 05. Системы контроля версий
Спецкурс-2015. Занятие 05. Системы контроля версий
 
курс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключениякурс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключения
 
Курс Java-2016. Занятие 01. Введение в Java как технологию
Курс Java-2016. Занятие 01. Введение в Java как технологиюКурс Java-2016. Занятие 01. Введение в Java как технологию
Курс Java-2016. Занятие 01. Введение в Java как технологию
 
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
 

More from 7bits

Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап? Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
7bits
 
Гудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофта
Гудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофтаГудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофта
Гудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофта
7bits
 
Гудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакать
Гудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакатьГудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакать
Гудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакать
7bits
 
Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи
Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи
Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи
7bits
 
Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE
Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE
Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE
7bits
 
Goodbye, IT-loft! Тараканов Алексей: Идеология в IT
Goodbye, IT-loft! Тараканов Алексей: Идеология в ITGoodbye, IT-loft! Тараканов Алексей: Идеология в IT
Goodbye, IT-loft! Тараканов Алексей: Идеология в IT
7bits
 
Курс Java-2016. Занятие 09. Web
Курс Java-2016. Занятие 09. WebКурс Java-2016. Занятие 09. Web
Курс Java-2016. Занятие 09. Web
7bits
 
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-выводКурс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
7bits
 
Курс Java-2016. Занятие 05. Тестирование и Java
Курс Java-2016. Занятие 05. Тестирование и JavaКурс Java-2016. Занятие 05. Тестирование и Java
Курс Java-2016. Занятие 05. Тестирование и Java
7bits
 
Курс Java-2016. Занятие 04 (часть 2). Git и GitHub
Курс Java-2016. Занятие 04 (часть 2). Git и GitHubКурс Java-2016. Занятие 04 (часть 2). Git и GitHub
Курс Java-2016. Занятие 04 (часть 2). Git и GitHub
7bits
 
Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из прил...
Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из прил...Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из прил...
Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из прил...
7bits
 
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложений
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложенийСтажировка-2015. Разработка. Занятие 11. Безопасность web-приложений
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложений
7bits
 
Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.
Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.
Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.
7bits
 
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотестыСтажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
7bits
 
Стажировка 2015. Разработка. Занятие 9. BEM
Стажировка 2015. Разработка. Занятие 9. BEMСтажировка 2015. Разработка. Занятие 9. BEM
Стажировка 2015. Разработка. Занятие 9. BEM
7bits
 

More from 7bits (15)

Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап? Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
 
Гудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофта
Гудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофтаГудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофта
Гудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофта
 
Гудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакать
Гудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакатьГудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакать
Гудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакать
 
Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи
Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи
Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи
 
Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE
Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE
Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE
 
Goodbye, IT-loft! Тараканов Алексей: Идеология в IT
Goodbye, IT-loft! Тараканов Алексей: Идеология в ITGoodbye, IT-loft! Тараканов Алексей: Идеология в IT
Goodbye, IT-loft! Тараканов Алексей: Идеология в IT
 
Курс Java-2016. Занятие 09. Web
Курс Java-2016. Занятие 09. WebКурс Java-2016. Занятие 09. Web
Курс Java-2016. Занятие 09. Web
 
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-выводКурс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
 
Курс Java-2016. Занятие 05. Тестирование и Java
Курс Java-2016. Занятие 05. Тестирование и JavaКурс Java-2016. Занятие 05. Тестирование и Java
Курс Java-2016. Занятие 05. Тестирование и Java
 
Курс Java-2016. Занятие 04 (часть 2). Git и GitHub
Курс Java-2016. Занятие 04 (часть 2). Git и GitHubКурс Java-2016. Занятие 04 (часть 2). Git и GitHub
Курс Java-2016. Занятие 04 (часть 2). Git и GitHub
 
Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из прил...
Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из прил...Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из прил...
Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из прил...
 
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложений
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложенийСтажировка-2015. Разработка. Занятие 11. Безопасность web-приложений
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложений
 
Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.
Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.
Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.
 
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотестыСтажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
 
Стажировка 2015. Разработка. Занятие 9. BEM
Стажировка 2015. Разработка. Занятие 9. BEMСтажировка 2015. Разработка. Занятие 9. BEM
Стажировка 2015. Разработка. Занятие 9. BEM
 

Курс Java-2016. Занятие 11. Servlets, JSP

  • 1. Курс по Java, 2016 Servlet, JSP
  • 2. Курс по Java, 2016 Servlet API
  • 3. Курс по Java, 2016 javax.servlet.Servlet import javax.servlet.GenericServlet; public class MyServlet extends GenericServlet { @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { // do something } }
  • 4. Курс по Java, 2016 javax.servlet.ServletRequest String remoteAddress = servletRequest.getRemoteAddr(); String contentType = servletRequest.getContentType(); InputStream input = servletRequest.getInputStream(); String parameter = servletRequest.getParameter("name"); Object attribute = servletRequest.getAttribute("name"); servletRequest.setAttribute("name", attribute);
  • 5. Курс по Java, 2016 javax.servlet.ServletResponse servletResponse.setContentType("text/html"); servletResponse.setContentLength(256); OutputStream output = servletResponse.getOutputStream();
  • 6. Курс по Java, 2016 javax.servlet.http.HttpServlet public class MyHttpServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // process GET request } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // process POST request }
  • 7. Курс по Java, 2016 javax.servlet.http.HttpServletRequest String remoteAddress = request.getRemoteAddr(); String contentType = request.getContentType(); Reader reader = request.getReader(); String parameter = request.getParameter("name"); Object attribute = request.getAttribute("name"); request.setAttribute("name", attribute); Cookie[] cookies = request.getCookies(); String proxiedClient = request.getHeader("X-Forwarded-For"); HttpSession session = request.getSession();
  • 8. Курс по Java, 2016 javax.servlet.http.HttpSession HttpSession session = request.getSession(); Object sessionAttribute = session.getAttribute("name"); session.setAttribute("name", sessionAttribute);
  • 9. Курс по Java, 2016 javax.servlet.http.HttpServletResponse response.setContentType("text/html"); response.setContentLength(256); Writer writer = response.getWriter(); response.addCookie(new Cookie("name", "value")); response.addHeader("X-My-Header", "value"); response.sendError(500, "Everything failed"); response.sendRedirect("/other-path");
  • 10. Курс по Java, 2016 Servlet Container
  • 11. Курс по Java, 2016 Apache Tomcat Самый популярный Servlet/JSP контейнер https://tomcat.apache.org/
  • 12. Курс по Java, 2016 $CATALINA_HOME ├── bin ├── conf ├── lib ├── logs ├── webapps │ ├── hello │ │ ├── index.jsp │ │ ├── META-INF │ │ └── WEB-INF │ │ ├── classes │ │ │ └── it │ │ │ └── sevenbits │ │ │ └── example │ │ │ └── hello │ │ │ └── HelloWorldServlet.class │ │ └── web.xml │ ├── hello.war │ └── ROOT └── work
  • 13. Курс по Java, 2016 WAR Web Application aRchive │ ├── hello.war │ │ ├── index.jsp │ │ ├── META-INF │ │ └── WEB-INF │ │ ├── classes │ │ │ └── it │ │ │ └── sevenbits │ │ │ └── example │ │ │ └── hello │ │ │ └── HelloWorldServlet.class │ │ └── web.xml
  • 14. Курс по Java, 2016 War в Maven <project> <modelVersion>4.0.0</modelVersion> <groupId>it.sevenbits.example</groupId> <artifactId>hello</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>hello Maven Webapp</name> <url>http://maven.apache.org</url> <build> <finalName>hello</finalName> </build> </project>
  • 15. Курс по Java, 2016 Webapp в Maven <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> </dependencies>
  • 16. Курс по Java, 2016 Webapp в Maven
  • 17. Курс по Java, 2016 web.xml <web-app> <display-name>Sample Web Application</display-name> <servlet> <servlet-name>HelloWorldServlet</servlet-name> <servlet-class> it.sevenbits.example.hello.HelloWorldServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorldServlet</servlet-name> <url-pattern>/world</url-pattern> </servlet-mapping> </web-app>
  • 18. Курс по Java, 2016 Сборка веб приложения mvn package cp target/hello.war $CATALINA_HOME/webapps
  • 19. Курс по Java, 2016 HelloWorldServlet public class HelloWorldServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); PrintWriter out = response.getWriter(); out.println("Hello, world"); } }
  • 20. Курс по Java, 2016 JSP Java Server Pages Servlet наоборот
  • 21. Курс по Java, 2016 hello_world.jsp <!DOCTYPE html> <html> <head> <title>Hello</title> </head> <body> <h1>Hello, world!</h1> </body> </html>
  • 22. Курс по Java, 2016 Model — View — Controller MVC
  • 23. Курс по Java, 2016 Model ● Атрибуты запроса ● Сессия
  • 24. Курс по Java, 2016 View JSP <!DOCTYPE html> <html> <head> <title>Hello <%=request.getAttribute("name")%></title> </head> <body> <h1>Hello, <%=request.getAttribute("name")%>!</h1> </body> </html>
  • 25. Курс по Java, 2016 Controller Servlet protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // model manipulations String name = request.getParameter("name"); request.setAttribute("name", name); // forward to view RequestDispatcher dispatcher = request.getRequestDispatcher("hello_name.jsp"); dispatcher.forward(request, response); }
  • 26. Курс по Java, 2016 Forward RequestDispatcher.forward(request, response)
  • 27. Курс по Java, 2016 Redirect HttpServlerResponse.sendRedirect(“path”)
  • 29. Курс по Java, 2016 J2EE
  • 30. Курс по Java, 2016 Домашнее задание Поставить Tomcat. Сделать простое веб приложение с отправкой формы. Посмотреть, в какой java код превращаются JSP страницы. annie.tarasenko@7bits.it denis.nelubin@7bits.it