jsp - 如何使用jsp测试request.getHeader中的值?

标签 jsp jstl el user-agent

我设置了一个变量:

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

如何使用 userAgent 测试不同的场景
<c:choose></c:choose>

我不知道如何设置?

最佳答案

您不想将 scriptlet 与 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>

无关 问题:以这种方式检查用户代理 header 是一种代码异味。用户代理头完全由客户端控制,很容易被伪装成一个完全不同的值(这就是我在上面的代码示例中使用术语“伪装”的原因)。如何正确解决真正的功能需求,你想详细说明一下真正的功能需求。

例如,在 JavaScript 中你应该更喜欢 feature detection通过浏览器检测。

或者当你想根据媒体类型加载特定的样式表时,你应该使用 media attribute .例如。
<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" />

或者,当您想向最终用户呈现用户代理 header 中信息的用户友好摘要时,您想使用单独的服务,例如 http://user-agent-string.info/ .他们还提供 Java API example .

关于jsp - 如何使用jsp测试request.getHeader中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6792053/

相关文章:

java - Glassfish 2.1.1 - session Bean 重复调用 init() 和 destroy()

java - Apache httpd 无法提供 Tomcat 生成的文件

java - JSP中如何定向另一个页面?

java - Spring MVC JSP JSTL 退出每个带有 boolean 值的循环

java - fmt :message adding unintentional comma into number

java - 使用 JSTL 设置 HTML 下拉选择选项

java - 在 JSP EL 中通过常量获取变量不起作用

java - 丰富的 javascript 函数 findComponent

java - 不显示表达式语言的值

java - 如何在 JSP 页面中显示集合项