Что такое сервлет и зачем нужен портлет?
И так, дорогие друзья, я планирую открыть блог, посвящённый портальным технологиям. Для разогрева, предлагаю вам коротенький рассказик, прочитав которую, вы узнаете что такое сервлет и зачем изобрели портлет. Места мало, обо всем напишу кратенько. Переписывать книжки, коих выпущено не одна сотня, я не собираюсь. Я буду писать о общих вещах, а так же о приёмах, которые существенно упрощают жизнь разработчику. Если вы хотите узнать больше, то лучшеhttp://java.sun.com/javaee/index.jsp вряд ли что-то может быть. Приготовьтесь, вы ощутите мощь Java EE.
ИнтроПишем мы портлеты на Джаве (Java). Что же такое портлет (portlet)? Портлет, это по своей сути -— сервлет (servlet).
Servlet Это класс, расширяющий HttpServlet, у которого есть два главных метода
void doGet(HttpServletRequest request, HttpServletResponse response){} void doPost(HttpServletRequest request, HttpServletResponse response){}
Не секрет, что браузер может инициировать два вида запроса к серверу: пост(POST) и гет (GET). Как вы уже догадались, первый метод сработает при запросе GET к сервлету, второй - при запросе POST. Можно переопределить третий главный метод
void processRequest(HttpServletRequest request, HttpServletResponse response){}
Он будет обрабатывать и геты и посты, приходящие к сервлету.
Параметры запроса мы вытаскиваем из request, результат записываем в response. Респонс уходит к браузеру клиента. Можно получить какой-то конкретный параметр,список всех имен, карту (Map).
Map -— это интерфейс, смысл его заключается в том, что он хранит ключ и значение, связанных с ключом. В случае с параметрами запроса, ключом является имя параметра, значением -— значение параметра (железная логика).
Например, пользователь заполнил форму регистрации и отправил её на сервер:
http://lolik.ru/registrationservlet?name…
Карта параметров будет выглядеть следующим образом:
name->lols
age->102
surname->lolobot
Если интересно, о картах и прочих вкусностях Java SE мы можем поговорить отдельно. Значениями параметров реквеста могут быть только строки (String), которые можно привести к нужному типу. Очевидно, значение age лучше превратить в целое число(int или Integer).
Посмотрим на метод:
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { out.println("<html>"); out.println("<head>"); out.println("<title>Servlet MyServlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Servlet MyServlet at " + request.getContextPath () + "</h1>"); out.println("<H6>lols!</H6>"); out.println("</body>"); out.println("</html>"); } finally { out.close(); } }
Берём респонс, пихаем в него html и отправляем пользователю.
Ремарка: Спасибо zer0access за то, что поправил меня. Пройдя по ссылкеhttp://java.sun.com/javaee/5/docs/api/ja… вы увидите, что есть ещё методы, кроме doGet и doPost. Метод processRequest генерируется рядом IDE, например NetBeans 6.1 Делается это следующим образом:
/** * Handles the HTTP <code>GET</code> method. * @param request servlet request * @param response servlet response */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); }
/** * Handles the HTTP <code>POST</code> method. * @param request servlet request * @param response servlet response */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response);
}
т.е. описав метод processRequest, ваши doPost и doGet отработают единообразно. Если есть разница при вызове doPost или doGet, то использовать processRequestврядли придётся. Метод service первым принимает запрос, после запрос переправляется нужномуdoXxx. В service можно сделать какие-то общие операции, например сделать запись в БД, что такой-то пользователь обратился к такому-то сервлету, затем запрос передается на обработку нужному методу сервлета.
zer0access, спасибо тебе.
Всем сервлеты хороши, но только один сервлет может быть на странице. Два сервлета не влезут — слишком важные персоны.
Как же быть, если очень хочется на одну страницу поместить сервлет-калькулятор и сервлет-переводчик?
Portlet Очень просто — написать два портлета, один будет считать, второй - переводить. Два, три, много портлетов можно поселить на одной странице. Классический портлет в редакции Sun имеет три режима: view, edit, help. Первый — основной, его видит пользователь. В случае калькулятора, в режиме view (просмотр) будут доступны кнопки. В режиме edit (настройки), например, можно задавать тип калькулятора: обычный или научный, с синусами, косинусами и прочими мудрёными вещами. В режиме help (справка)? как вы уже догадались, будет справка по калькулятору. Режимы view, edit, help отображаются при помощи jsp (java server pages). Они очень-очень похожи на php-страницы:
<html>
<% for(int i=1; i<=10; i++){ %> <%=i%> <br> <%}%>
</html> Вывод в столбик чисел от 1 до 10 включительно.
можно заменить <%%> на <_? ?_> (как тут пхпшный код-то писать?) и разницы не будет (за исключением того, что Джава требует определения типов переменных). С режимом view и help все понятно, а зачем нужен режим edit? Допустим, У нас на портале есть две группы пользователей: первая — бухгалтеры, вторая — мы с вами, программисты. Бухгалтерам достаточно обычного калькулятора, где есть +,-,*,/, а нам нужно складывать двоичные числа. В этом случае администратор портала для группы бухгалтеров настроит портлет, как обычный калькулятор, а для нашей группы, как научный.
Чувствуете какой кайф? Портлет, считай, как маленькое веб-приложение, которое можно поместить на страничку портала и настроить (если возможность реализована программистом) под конкретные нужды пользователя. Можно комбинировать разные портлеты на одной странице.
В следующем номере мы поговорим о портлетах более подробно. Я расскажу, как можно за 5 минут настроить сервер приложений, контейнер для портлетов и как отлаживаться на всем этом хозяйстве нажатием одной кнопки.
|
| Категория: Мои статьи | Добавил: magadan (25.12.2010)
|
| Просмотров: 3694
| Рейтинг: 5.0/1 |
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
|