Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622

Как получить запрошенный URL или URI?

16.05.2017, 10:44. Показов 5216. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Метод получения URI находится в классе SiteSettings
Java
1
2
3
4
5
6
7
8
...
    public String getUri( HttpServletRequest req )
    {
        String uriPage = req.getRequestURI();
        
        return uriPage;
    }    
 ...
Вызывается этот метод в другом классе MainClass в одном из его методов
Java
1
2
3
4
5
6
7
8
9
10
...
public static SiteSettings siteSettings = new SiteSettings();
...
 
    public static String templ() throws FileNotFoundException, IOException, URISyntaxException {
        
        HttpServletRequest request = null;
 
        String uriPg = siteSettings.getUri(request);
...
При запуске возникает исключение сервера
java.lang.NullPointerException

Не врубаюсь в чем проблема. В неправильной инициализации HttpServletRequest request = null;?
Подскажите пожалуйста как правильно получить URL URI и прочие атрибуты от сервера.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.05.2017, 10:44
Ответы с готовыми решениями:

Как правильно создать файл из Uri или Uri.getPath() для отправки на сервер?
Есть Uri, полученный после выбора файлов в галерее. Uri вроде правильный:...

Запрошенный URL не может быть получен
при попытке загрузить большинство сайтов выдает ошибку. в чем может быть проблема? скрин прилагается

Как с библиотекой xNet или без нее получить URL адрес страницы?
Сделал авторизацию вконтакте, хочу искусственно получить токен через приложение, суть в том, что после нажатия кнопки разрешить (на...

21
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
16.05.2017, 10:59
Цитата Сообщение от VlGuvin Посмотреть сообщение
Java
1
2
HttpServletRequest request = null;
String uriPg = siteSettings.getUri(request);
вы серьезно? а что вы ожидаете интересно?
0
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
16.05.2017, 11:24  [ТС]
Да null он везде ноль.

Если не сложно покажите как это правильно делается.
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
16.05.2017, 12:15
делается это вот так - http://stackoverflow.com/quest... mplete-url

только вам видимо это не поможет. Судя по приведенному коду и попытке взять юри от нула, советую покурить тему о сервлетах.
0
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
16.05.2017, 13:56  [ТС]
Спасибо за полезную ссылку. Но ни в одном из примеров нет пояснения как инициализируется HttpServletRequest request
Пример
Java
1
2
3
4
5
6
7
8
9
10
public static String getFullURL(HttpServletRequest request) {
    StringBuffer requestURL = request.getRequestURL();
    String queryString = request.getQueryString();
 
    if (queryString == null) {
        return requestURL.toString();
    } else {
        return requestURL.append('?').append(queryString).toString();
    }
}
Сам метод понятен. Но в него передается параметр HttpServletRequest request.
Самая непонятная проблема - где его взять или объявив, как правильно инициализировать?
Google не помог. Если можно, поясните пожалуйста коротко как все-же, получить URI в Java/
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
16.05.2017, 14:03
юрл чего надо получить? )
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
16.05.2017, 14:09
Цитата Сообщение от neske Посмотреть сообщение
советую покурить тему о сервлетах.
тут скорее даже надо покурить java core и "почему возникает NPE или почему нельзя ничего вызывать у null"
0
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
16.05.2017, 14:46  [ТС]
Не понятно где и каким образом получить request
Сделал так: В странице которая запрашивается вызвал
Java
1
<% out.println(mainClass.getHttpSr(request)); %>
в классе имеется метод
Java
1
2
3
4
5
6
7
8
   
...
static HttpServletRequest request = null;
...
 public static HttpServletRequest getHttpSr(HttpServletRequest rc) {
        request  = rc;
        return rc;
    }
Из него получаю собственно request, который уже далеко не ноль.
Далее полагаю можно добывать Uri, Url и т. п.
Насколько это правильно, сомневаюсь...
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
16.05.2017, 15:00
хоспади, нет, так код писать нельзя, вы сформулируйте то, что вам нужно. Любой реквест от кого-то приходит, более того, есть место, в котором он обрабатывается и к нему есть прямой доступ.
0
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
16.05.2017, 15:27  [ТС]
Вот тут точно не понятно. Почему нельзя? А как тогда получить request. Понятное дело, что при таком подходе нужно будет
прописывать
Java
1
<% out.println(mainClass.getHttpSr(request)); %>
в каждой jsp странице. У меня нет баз. Только страницы.
Ладно. Это мои кренделя.
Допустим при вызове каждой отдельной страницы вызывается всегда один и тот-же класс шаблонизатор, которому нужет только html файл шаблона и URI по которому в шаблон вставляются нужные тексты в нужные места. URI какраз и нужен, чтобы определить какой текст вставлять. Это своего рода ключ.
Не знаю как в Java но в PHP это работает на ура. Никаких баз. Все на файлах.
Если не сложно, расскажите кратко, как делается подобное в Java?
Как в классе шаблонизаторе, который вызывается при запросе каждой отдельной страницы сайта получать HttpServletRequest request, который даст возможнось получить все, что можно получить с помощью PHP, типа
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
list ($data,$dtime,$nowtime,$ip,$refer,$agent,$user,$uri,$accept,$language,$encoding,$connect)=array(
    date ("Y"),
    date('r'),
    date("d.m.Y H:i:s"),
    (!empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR']: 'None'),
    (!empty($_SERVER['HTTP_REFERER']) ? strtolower($_SERVER['HTTP_REFERER']): 'None'),
    (!empty($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT']: 'None'),
    (!empty($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER']: 'None'),
    (!empty($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI']: 'None'),
    (!empty($_SERVER['HTTP_ACCEPT']) ? $_SERVER['HTTP_ACCEPT']: 'None'),
    (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE']: 'None'),
    (!empty($_SERVER['HTTP_ACCEPT_ENCODING']) ? $_SERVER['HTTP_ACCEPT_ENCODING']: 'None'),
    (!empty($_SERVER['HTTP_CONNECTION']) ? $_SERVER['HTTP_CONNECTION']: 'None')
);
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
16.05.2017, 15:47
вы описываете серверную логику. Распарсить юри, еще какие-то параметры вам нужные, с этим отлично справится сервлет.
И далее рендерите уже конечный хтмл с помощью полученных параметров и jsp шаблона.
0
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
16.05.2017, 16:52  [ТС]
Спасибо. Смысл понятен.
Но как это выглядит в коде... Как от сервлета получить нужные параметры.
Общий смысл понятен. Но пошагово как это делается..
Если можно в нескольких словах.

Добавлено через 37 минут
Спасибо за подсказки. Врубился. Нужен класс сервлета типа
Java
1
2
3
4
5
6
7
8
9
10
public class HelloWorldServlet extends HttpServlet {
 
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
 
        PrintWriter pw = resp.getWriter();
        pw.println("<H1>Hello, world! или Привет мир</H1>");
 
    }
}
В xml указать путь к нему. Далее вроде представляю...
Тогда еще вопрос. Зачем в этом случае jsp страницы? Можно обойтись и без них?
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
16.05.2017, 17:44
можно, но зачем обходиться без них? как минимум, вы получаете удобство. Кидайте на jsp свои параметры и он вам отрендерит ваш хтмл.
А так делать совсем плохо -
Цитата Сообщение от VlGuvin Посмотреть сообщение
pw.println("<H1>Hello, world! или Привет мир</H1>");
0
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
16.05.2017, 20:03  [ТС]
Пытаюсь запустить простейший сервлет в NetBeans.
1. Создал проект в котором автоматом создался файл index.jsp
2. Создал сервлет где поставил галку создавать настройки в xml файле
3. Запускаю приложение (GlassFish) - все запускается нормально.
4. Удаляю файл index.jsp - сервер пишет The requested resource () is not available.
По идее должен запуститься сервлет и написать в браузере Hello World
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package students.web;
 
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 Vlad
 */
public class HelloWorldServlet extends HttpServlet {
 
    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    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. You may use following sample code. */
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet HelloWorldServlet</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet HelloWorldServlet at " + request.getContextPath() + "</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {            
            out.close();
        }
    }
 
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    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
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
 
    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
В чем тут хитрость?

Добавлено через 38 минут
A.. вместо страницы в xml прописывается сам сервлет.
Работает.
Остался вопрос по структуре.
1. По любому запросу от клиента (в простейшем случае) должен запускаться сервлет.
2. Сервлет дает возможность работать с request - получать URL URI и т. п.
3. request можно использовать в классе шаблонизаторе, который формирует страницы и их содержимое.

1. Как выводить страницы в браузер? Прямо из сервлета используя
Java
1
PrintWriter out = response.getWriter();
или есть другой путь?
2. Как заставить работать класс шаблонизатор? Создать объект внутри класса сервлета?
3. Если будут необходимы другие классы в приложении как их запускать в работу? Тоже создавать объекты внутри класса сервлета?
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
16.05.2017, 20:18
Цитата Сообщение от VlGuvin Посмотреть сообщение
1. Как выводить страницы в браузер? Прямо из сервлета используя
говорил же, используйте jsp
Цитата Сообщение от VlGuvin Посмотреть сообщение
2. Как заставить работать класс шаблонизатор? Создать объект внутри класса сервлета?
вы не знаете, как создать объект класса?
Цитата Сообщение от VlGuvin Посмотреть сообщение
. Если будут необходимы другие классы в приложении как их запускать в работу? Тоже создавать объекты внутри класса сервлета?
совет, поизучайте основы джавы)
1
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
17.05.2017, 11:06  [ТС]
Спасибо. В общем понятно.
Нет. С Java все впорядке. Kак создается объект и прочее - нет проблем. Писал для десктопа.
Пока не совсем понял про вывод в браузер. Если использовать jsp то каким образом. Подключать сервлет в jsp файле?
Если можно, поясните пожалуйста этот момент.

Добавлено через 12 часов 50 минут
Может, я и ошибаюсь, но работать непосредственно из сервлета тяжеловато. Для вывода страниц в браузер придется использовать метод doGet(), а в нем println(..). Не будет-ли проблем в этом случае с использованием в этом методе переменных и методов из других классов приложения?
Если не сложно можно коротко как правильно это делается. Запрашивать от клиента сам класс сервлета или jsp страницу. Если страницу то как подключать класс сервлета?

Добавлено через 1 час 35 минут
Да. Разобрался.
Подключить jsp можно так
Java
1
2
        RequestDispatcher dispatcher = request.getRequestDispatcher("pages/index.jsp");
        dispatcher.forward(request, response);
По ходу возникла странная проблема с созданием объектов других классов в классе сервлета
Java
1
2
3
public class ServletClass extends HttpServlet {
    
    MainClass mainClass = new MainClass();
Это сразу вызывает затык сервера с ответами типа
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
type Exception report
 
message
 
descriptionThe server encountered an internal error () that prevented it from fulfilling this request.
 
exception
 
javax.servlet.ServletException: PWC1392: Error instantiating servlet class servlet.ServletClass
root cause
 
com.sun.enterprise.container.common.spi.util.InjectionException: Error creating managed object for class: class servlet.ServletClass
root cause
 
java.lang.reflect.InvocationTargetException
root cause
 
java.lang.StackOverflowError
note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 3.1.2.2 logs.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
17.05.2017, 11:28
гуглом научись пользоваться
http://www.journaldev.com/2114... p-tutorial
0
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
17.05.2017, 11:59  [ТС]
Разобрался. Работает. Но опять один момент.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class ServletClass extends HttpServlet {
 
    MainClass mainClass = new MainClass();
    String varHtml = "";
 
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        
        String varTextA = "Hello World!";
        request.setAttribute("textA", varTextA);
        String varTextB = "It JSP.";
        request.setAttribute("textB", varTextB);
        try {
            varHtml = mainClass.templ(request);
        } catch (FileNotFoundException ex) {
            Logger.getLogger(ServletClass.class.getName()).log(Level.SEVERE, null, ex);
        } catch (URISyntaxException ex) {
            Logger.getLogger(ServletClass.class.getName()).log(Level.SEVERE, null, ex);
        }
        request.setAttribute("textHtml", varHtml);
...
Надеюсь параметр request попадет в метод templ(request); Тут немного неуверен...
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
17.05.2017, 12:07
Цитата Сообщение от VlGuvin Посмотреть сообщение
Надеюсь параметр request попадет в метод templ(request);
а как может быть иначе?)
0
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
17.05.2017, 14:38  [ТС]
С сервлетом в общих чертах понятно.
Остался еще один важный момент - переходы по страницам.
Если в настройках xml указать в качестве welcom file клас сервлета то вызываться он будет только при запросе собственно домена. При переходе на другую страницу класс сервлета уже не сработает, а за ним не будет работать и шаблонизатор и пр.
Как в этом случае поступать или как это правильно делается, так чтобы класс сервлета вызывался при каждом разном запросе?
Может я пропустил что-то в настройках xml?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.05.2017, 14:38
Помогаю со студенческими работами здесь

Как из asp получить полный URL и часть URL от вопросительного знака?
Господа подскажите как из asp получить полный URL и часть URL от вопросительного знака. На Javascript это сделать очень просто - ...

Как получить URI на который переходит webBrowser?
Я авторизуюсь на сайте методом заполнения формы и клика в автоматическом режиме, как мне получить запрос который передает webBrowser при...

Как получить часть url return url
как получить часть url return url Привет всем! Вопрос от человека далекого от javaScript. у меня есть URL типа http://aaa.ru/?066 ...

Динамический URI или как прослушать 4680 адресов по HTTP
Доброго дня всем читающим эти строки! Небольшое предисловие: два месяца как начал изучение платформы .NET и С#. До этого около года...

Получить путь к каталогу из uri
Приветствую, string patch =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru