2.1 Клас HttpServletRequest

По-голямата част от работата, която вашият сървлет трябва да извърши въз основа на информацията, получена от заявката. Обектът е отговорен за него HttpServletRequest, който контейнерът ще предаде на вашия сървлет (на метода serviceor методите doGet()и doPost()т.н.)

Този обект има доста методи, тъй като той просто съхранява данните за заявката и чрез него можете да взаимодействате с контейнера.

Методите могат да бъдат разделени на 2 големи групи:

  • Методи, свързани с авторизацията на потребителя
  • Методи за работа с данни от заявки

Ще дам методите за оторизация на потребителя под формата на table, но няма да ги анализираме. Факт е, че те много рядко се използват за оторизиране на потребител. Всички популярни рамки използват свои собствени, много по-напреднали подходи за оторизация.

Трябва да ги изброя, но пак не съм видял някой да ги използва.

Метод Описание
1 authenticate(HttpServletResponse) Извършва удостоверяване на отговора
2 changeSessionId() Принудителна промяна на идентификатора на сесията
3 getAuthType() Връща вида на използваното удостоверяване: ASIC_AUTH, FORM_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH
4 getRemoteUser() Връща потребителско влизане
5 getRequestedSessionId() Връща SessionID на клиента
6 getSession() Връща обект HttpSession
7 getUserPrincipal() Връща обект java.security.Principal
8 login(username, password) Извършва влизане на потребители
9 logout() Излиза от потребителската сесия

2.2 Изискване на данни

Втората група методи е много по-интересна. Какви данни имаме в заявката?

  • http метод
  • URI
  • Настроики
  • Заглавия

Нека да видим Howви методи са налични за работа с тях:

Метод Описание
1 getMethod() Връща HTTP метод: GET, POST, DELETE, ...
2 getRequestURI() Връща URI на заявката: http://codegym.cc/my/data
3 getRequestURL() Връща URL address на заявката: http://codegym.cc/my/data
4 getQueryString() Връща заявка, т.е. всичко след ?
5 getParameterMap() Връща списък с параметри на заявката
6 getParameter(String name) Връща стойността на параметъра по неговото име
7 getContentType() Връща тялото на заявката MimeType
8 getReader() Четец за четене на тялото на заявката като текст
9 getInputStream() InputStream за четене на тялото на заявката като byte[]
10 getSession() Връща обект HttpSession
единадесет getCookies() Връща масив от обекти Cookie[].
12 getHeaderNames() Връща списък със заглавия, само имена
13 getHeader(String name) Връща стойността на заглавката по име
14 getServletPath() Връща частта от URL address, която препраща към сървлета
15 getContextPath() Връща частта от URI, която указва съдържанието на заявката

И това дори не са всички методи ...

Въпреки че след като проучихме HTTP протокола и научихме How да работим с HttpClient, тук всичко е повече or по-малко познато, нали?

Нека напишем сървлет, към който могат да бъдат предадени текст и цвят, и той ще върне HTML page с този текст, написан в определения цвят. Как ви харесва идеята?

Нека започнем с написването на нашия сервлет:

public class ColorTextServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
          //write your code here
    }
}

Сега трябва да получим текста и цвета, предадени от URI от потребителя:

public class ColorTextServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {

        // Getting the parameter “text” and “color” from request
        String text= request.getParameter("text");
        String color = request.getParameter("color");

    }
}

И накрая, трябва да изведете текста като HTML. Ще разгледаме това в следващата лекция, но тук ще дам малък намек:

public class ColorTextServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {

        // Get the "text" and "color" parameters from the request
        String text = request.getParameter("text");
        String color = request.getParameter("color");


        // Print the HTML as a response to the browser
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out =  response.getWriter();
        try {
            out.println("<html>");
            out.println("<head> <title> ColorTextServlet </title> </head>");
            out.println("<body>");
            out.println("<h1 style="color:"+color+">"+text+"</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}