2009-09-02 3 views
1

В настоящее время используется класс HTTPServletRequest и, в частности, метод .getQueryString для извлечения введенного URL-адреса.URL-адрес Java: передающие аргументы - сервлеты

URL, он будет анализировать это сказать сервер/пакет/сервлет? Args1/args2/arg3 ..

Я хотел бы, чтобы удалить знак вопроса (?) От URL, однако я понятия не имею, как ты выполнит это. Я просто хотел бы заменить его косой чертой (/), но каждый раз, когда я пытаюсь это сделать, я просто получаю ошибки. Кто-нибудь знает, как я могу изменить знак вопроса на косую черту?

ответ

3

Вы хотите, чтобы URL-адрес ввода был http: /example.com/servlet/arg1/arg2/arg3?

Если это так, то вы хотите добавить отображение сервлета по линиям /sevletname/* на ваш web.xml.

Так что в вашем web.xml вы хотите:

<servlet> 
    <servlet-name>ServletName</servlet-name> 
    <servlet-class>biggle.whatever.Servlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>ServletName</servlet-name> 
    <url-pattern>/webxml_random/*</url-pattern> 
    </servlet-mapping> 

(пример: http://michael-lloyd-lee.appspot.com/webxml_random/test/like/this)

+0

У меня уже есть это в моем web.xml, и это не позволяет мне вводить косую черту вместо вопросительного знака ... немного неудачно! Если, конечно, я делаю что-то неправильно! – Federer

+0

Как заполняется arg1/arg2/arg3? У вас есть форма или они введены вручную? –

+1

Примечание: вы должны использовать getPathInfo или getRequestURI для получения «аргументов», поскольку они больше не являются аргументами в способе URL-spec. –

0

Вам нужна комбинация HttpServletRequest.getRequestURI() и HttpServletRequest.getQueryString(), и присоединяйтесь к ним вместе с '/'.

Однако меня интересует, почему вы делаете это и что вы действительно пытаетесь достичь.

+0

В идеале я бы хотел, чтобы URL-адрес был разделен косой чертой. Однако на данный момент я должен поставить этот знак вопроса перед аргументами. Я предполагаю, что это то, что говорит Java, что это немного CGI ?? – Federer

+0

Это спецификация URL-адреса HTTP. Поэтому, возможно, вопрос в том, откуда это происходит, и может ли это быть изменено? –

+0

Мне бы очень хотелось узнать, можно ли его изменить! Из того, что я собираю, это невозможно. – Federer

0

Вопросительный знак в URL-адресе определяется HTTP specification. Он будет частью URL-адреса, когда любые данные отправляются через URL-адрес на сервер. Вы не можете переопределить базовую структуру URL-адреса, как определено спецификацией HTTP.

+0

Это было мое основное предположение .. – Federer

+0

Сервлеты имеют метод getRequestParameter() для извлечения данных из запроса, который соответствует спецификации HTTP. Поэтому, если вы не хотите избегать вызовов getRequestParameter(), вы не должны переопределять формат URL. Если вы намереваетесь сделать это, используйте HTTP POST и выполните собственный анализ тела запроса POST. –

0

звучит так, будто вы после какой-то перезаписи URL.

this должно быть в состоянии сделать это для tomcat и других серверов j2ee.

никогда не использовал его сам.

+0

Вы забыли вставить ссылку здесь? – Federer

+0

Думаю. обновил текст. –

0

От вашего ответа к Brian Agnew: «В идеале мне бы хотелось, чтобы URL-адрес был разделен косыми чертами. Однако на данный момент я должен поставить этот вопросительный знак перед аргументами.« Эр, да, вопрос метка является фундаментальной частью спецификации URL-адреса и отделяет запрашиваемый ресурс (например, страницу) от параметров для предоставления ресурса.

Похоже, вы пытаетесь что-то сделать RESTful. Если это так, вам нужно настроить записи сопоставления сервлета в конфигурации сервлета, чтобы сопоставить URL-адрес сервлета, который затем может извлекать его параметры из URL-адреса. Если вы ищете «+ java + RESTful», вы найдете несколько ресурсов, которые помогут вам в этом.

2

Если у вас есть что-то, что будет производить запрос в формате, который вы хотите, то вы можете указать сервлет в форме /foo/* и позвоните по номеру getRequestURI(), чтобы получить этот путь. Затем вы просто разбираете аргументы, возможно, звоните String.split("/").

Однако реальный вопрос заключается в том, как вы создаете такой URL-адрес. Как отмечали другие плакаты, знак вопроса является частью URL specification, а форма HTML GET будет создавать URL-адреса в этой форме - это не имеет значения, написан ли ваш сервер на Java, Python, PHP или что-то еще.

Смежные вопросы