Вы не хотите смешивать скриптлетов с 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 .