Google

28 февр. 2009 г.

Написание сервлетов в 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.

5 comments:

Отправить комментарий

Social