DevBug blog

О Linux, Java, разработке ПО и не только

Написание сервлетов в Java при помощи NetBeans

Название статьи решил сделать общей: в данной статье речь пойдет больше не о самих сервлетах (о их написании можно прочитать в любой мало-мальски грамотной и не очень книге/статье). Здесь хотелось бы рассказать как написать сервлет (заставить его работать в NetBeans), т.к. во многих книгах описыватеся сам процесс написание сервлета и его запуск без IDE. Так вот, что бы не ломать голову и не равть на ней волосы строя докадки как это сделать просто и непринцжденно в NetBeans читаем статью дальше….

Итак всеже пару слов о сервлетах…
Сервлеты (servlets) - это маленькие программы, которые выполняются на серверной стороне Web-соединения (с) Герберт Шилдт-Язык Java. Т.е. другими словами сервлеты динамически расширяют функциональные возможности Web-сервера.
Более подробно читаем либо в вышеназванной книге, либо в любой другой.

Ну а теперь собственно про сам NetBeans:
Итак, запускаем наш любимый или неочень NetBeans. Выбираем в меню File–>New Project и выбираем WebApplication. Далее указываем имя проекта (для простоты восприятия я назвал свой первый проект Testing-от него дальше и будем плясать), местоположение проекта (где он будет храниться на нашем комьютере), а также необходимо будет выбрать сервер, который будет использован при обработке нашего приложения. (если помните в прошой статье я описывал процесс создания сервера). Выбираем созданый нами сервер TomCat 5.5.

Итак, слева в окне Projects у нас отображается вновь созданный проект (в моем случае-это Testing ). Далее нажимаем правой конопкой по имени проекта и появившемся меню выбираем New–>Java Package. В качестве имени пакета укажем com.Lex (почему именно такое имя, а просто мне хочется, соотвественно имя можно указать любое,какое вашей душе угодно). В графе Location (место положения) указываем Source Package и нажимаем Finish.
Теперь если раскрыть список Source Package, то мы увидим, созданный нами пакет. Далее нажимаем правой кнопкой по созданному нами пакету (com.Lex) и выбираем New–>Servlet. В качестве имени нового сервлета указываем ServEx (опять-таки, потому что мне так хочется. Вы можете указывает что Вам больше нравится). В графе Location указываем Source Package, а в качестве пакета (в графе Package) указываем наш созданный ранее пакет com.Lex . После этих манипуляций нами будет создан стандартный сервлет примерно такого содержания:


package com.Lex;
/
To change this template, choose Tools | Templates
* and open the template in the editor.
*/

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/

@author FixBug
*/

public class ServEx extends HttpServlet {
/

* Processes requests for both HTTP GET> and POST methods.
* @param request servlet request
* @param response servlet response
*/

protected void processRequest(
HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(“text/html;charset=UTF-8”);
PrintWriter out = response.getWriter();
try {
//TODO output your page here
out.println(””);
out.println(””);
out.println(””);
out.println(””);
out.println(””);
out.println(“Servlet ServEx at “ + request.getContextPath () + ””);
out.println(””);
out.println(“This is testing Servlet page for Electric Network 0.38kV”);
out.println(””);
} finally {
out.close();
}
}
// <editor-fold defaultstate=“collapsed” desc=“HttpServlet methods.
Click on the + sign on the left to edit the code.”>

/
* Handles the HTTP GET 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 POST method.
* @param request servlet request
* @param response servlet response
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/*
Returns a short description of the servlet.
*/

public String getServletInfo() {
return “Short description”;
}// </editor-fold>
}

web.xml, который можно найти если раскрыть слева в графе Projects пункт Web Pages, а затем WEB-INF. ПКМ (нажимаем правой кнопкой) на файле web.xml и заполняем его как приведено ниже:
<?xml version=“1.0” encoding=“UTF-8”?>
<web-app version=“2.4”
xmlns
=http://java.sun.com/xml/ns/j2ee"
xsi
=http://www.w3.org/2001/XMLSchema-instance"
schemalocation
=http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>Lex’s testing servlet page</display-name>
<servlet>
<servlet-name>ServEx</servlet-name>
<servlet-class>com.lex.ServEx </servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServEx</servlet-name>
<url-pattern>/main</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>main</welcome-file></welcome-file-list>
</web-app>
Upd: что качается файла web.xml: то, все, что находится между тегов
 
является ссылкой на загрузку сервлета. Т.е если в данном случае указано /main , то и вызываться сервлет будет по это имени: http://localhost:8080/имя_вашего_проекта/main.
А что делать, если скажем нам надо сделать стартовой страницей не сервелет а html страницу и подгрузить еще один сервлет. Все очень просто: открываем все тот же web.xml и в теги
и добавляем туда:
<welcome-file>/index.html</welcome-file>
Теперь у нас при запуске проекта будет грузится страничка index.html.
Допустим мы добавили в проект еще сервлет с именем Counter и нам необходимо к нему обращаться на страничке. Делаем следующее: в файле web.xml добавляем все теже параметры для данного сервлета, что и для ServEx, за исключением тегов url-pattern- данный сервлет мы будем вызывать по запросу Counter. Для данного сервлета часть файла web.xml будет выглядет следующим образом:
<servlet>
<servlet-name>Counter</servlet-name>
<servlet-class>com.lex.Counter</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Counter</servlet-name>
<url-pattern>/ounter</url-pattern>
</servlet-mapping>
Как уже было сказано данный сервлет будет вызываться по запросу Counter.
В итоге если собрать описания всех сервлетов вместе то файл web.xml будет иметь вид:
<?xml version=“1.0” encoding=“UTF-8”?>
<web-app id=“WebApp_ID” version=“2.5” xmlns=http://java.sun.com/xml/ns/javaee"
xmlns:web
=http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xmlns:xsi
=http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation
=http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<display-name>ServletsPr</display-name>
<servlet>
<servlet-name>ServEx</servlet-name>
<!– <servlet-name>Counetr</servlet-name> –>
<servlet-class>com.lex.ServEx </servlet-class>
<!– <servlet-class>com.lex.Counter</servlet-class> –>
</servlet>
<servlet>
<servlet-name>ServEx</servlet-name>
<servlet-class>com.lex.ServEx</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServEx</servlet-name>
<url-pattern>/main</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServEx</servlet-name>
<url-pattern>/main</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>/index.html</welcome-file>
</welcome-file-list>
<!– Описание сервлета Counter –>
<servlet>
<servlet-name>Counter</servlet-name>
<servlet-class>com.lex.Counter</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Counter</servlet-name>
<url-pattern>/counter</url-pattern>
</servlet-mapping>
</web-app>
Теперь добавляем в файл ссылки на наши сервлеты:
<a href=http://localhost:8080/Servlets/main">main</a> <br>
<a href=http://localhost:8080/Servlets/counter">Counter</a
Запускаем проект на выполнение, если все сделано правильно, то в браузере должна открыта страница, в которой будет отображен текст
Servlet ServEx at /Testing
Усли ничего это не произошло, тогда внимательно смотрим были ли ошибки и, если были, то смотрим что за они и устроняем их.
Удачи в покарении Java.

comments powered by Disqus