Как проверить значения в request.getHeader, используя jsp? - PullRequest
4 голосов
/ 22 июля 2011

Я настраиваю переменную:

<% String userAgent = request.getHeader("user-agent");%>

Как проверить различные сценарии для userAgent с использованием

<c:choose></c:choose>

Я не уверен, как его настроить?

1 Ответ

7 голосов
/ 22 июля 2011

Вы не хотите смешивать скриптлетов с taglibs / EL.Они не работают в одной области.

Все заголовки запроса в EL доступны для неявного отображенного объекта ${header}.Поскольку имя заголовка user-agent содержит специальный символ -, поэтому ${header.user-agent} не работает должным образом, вам необходимо использовать скобку [], которая заключает его в кавычки.

${header['user-agent']}

, это должно сделать:

<c:choose>
    <c:when test="${fn:contains(header['user-agent'], 'Gecko')}">
        You're pretending to use a Gecko based browser.
    </c:when>
    <c:when test="${fn:contains(header['user-agent'], 'MSIE')}">
        You're pretending to use a MSIE based browser.
    </c:when>
    <c:when test="${fn:contains(header['user-agent'], 'Webkit')}">
        You're pretending to use a Webkit based browser.
    </c:when>
    <c:otherwise>
        It's not clear which browser you're pretending to use.
    </c:otherwise>
</c:choose>

Не связано с проблемой: проверка заголовка пользовательского агента таким образом является запахом кода.Заголовок пользовательского агента полностью контролируется клиентом и может быть легко подделан в совершенно другое значение (вот почему я использовал термин «притворство» в приведенном выше примере кода).Как правильно решить реальное функциональное требование, вы хотели бы подробнее рассказать о реальном функциональном требовании.

Например, в JavaScript вы должны предпочесть обнаружение функции над обнаружением браузера.

Или, если вы хотите загрузить конкретные таблицы стилей в зависимости от типа носителя, вам лучше использовать атрибут media .Например,

<link rel="stylesheet" href="screen.css" media="screen,projection,tv" />
<link rel="stylesheet" href="smartphone.css" media="only screen and (max-device-width:480px)"/>
<link rel="stylesheet" href="handheld.css" media="handheld" />
<link rel="stylesheet" href="print.css" media="print" />

Или когда вы хотите представить конечному пользователю удобную для пользователя сводку информации, найденной в заголовке пользовательского агента, вы хотите использовать вместо этого отдельную службу, такую ​​как http://user -agent-string.info / .Они также предлагают пример Java API .

...