Java 如何检查用户是否使用Android浏览器?

Java 如何检查用户是否使用Android浏览器?,java,jquery,jsp,struts2,Java,Jquery,Jsp,Struts2,My Util.java包含以下方法: public static boolean isAndroid(HttpServletRequest request) { boolean retVal = false; String browser = request.getHeader("User-Agent"); if (browser != null && !browser.trim().equals("") && browser.

My Util.java包含以下方法:

public static boolean isAndroid(HttpServletRequest request) {
    boolean retVal = false;     
    String browser = request.getHeader("User-Agent");
    if (browser != null && !browser.trim().equals("") && browser.contains("Android")) {
        retVal = true;
    }       
    return retVal;
}
下面是BaseAction.java中的代码(它还有HttpServletRequest类型的请求变量),它扩展了ActionSupport并实现了ServletRequestAware和ServletResponseAware

public boolean isAndroid(){
  return Util.isAndroid(request);
}
现在,我想在JSP中检查设备是否是android&是否执行某些操作,因此我使用以下代码:

<s:if test="%{#android=='false'}">
   <a href="/myUrl"></a>
</s:if>
<s:else>
  ....
</s:else>

....
但是上面的代码似乎不起作用。有人能提出为什么它不工作吗&是否有其他方法可以检查JSP以查看用户是否正在使用Android浏览器


谢谢

我认为下面的javascript代码会对您有所帮助

var ua = navigator.userAgent.toLowerCase();
var isAndroid = ua.indexOf("android") > -1; //&& ua.indexOf("mobile");
if(isAndroid) {
// Do some action you want to!
}
看看吧


谢谢。

我认为下面的javascript代码将对您有所帮助

var ua = navigator.userAgent.toLowerCase();
var isAndroid = ua.indexOf("android") > -1; //&& ua.indexOf("mobile");
if(isAndroid) {
// Do some action you want to!
}
看看吧

谢谢。

在jsp中

<c:set var="browser" value="${header['User-Agent']}" scope="session"/>

在jsp中

<c:set var="browser" value="${header['User-Agent']}" scope="session"/>

您在这里使用的是EL吗?我记得$是我们在EL中使用的字符,而不是代码中的%字符。我认为在与android属性进行比较时,不需要使用带有“false”的单引号。所以我认为这应该行得通。但首先检查是否可以访问页面中的“android”变量。检查以下代码是否正常工作

<s:if test="${android eq false}">
   <a href="/myUrl"></a>
</s:if>


您在这里使用的是EL吗?我记得$是我们在EL中使用的字符,而不是代码中的%字符。我认为在与android属性进行比较时,不需要使用带有“false”的单引号。所以我认为这应该行得通。但首先检查是否可以访问页面中的“android”变量。检查以下代码是否正常工作

<s:if test="${android eq false}">
   <a href="/myUrl"></a>
</s:if>


您正在与字符串
“false”
进行比较,但应检查实际的布尔值,并可根据需要使用

此外,在属性名称前面加上一个
#
,这对于推送到堆栈中的值是不必要的--
#
字符仅用于堆栈上下文中的命名值


所有这些都说明了,为什么要这样做呢?

您正在对照字符串“false”进行比较,但应该对照实际的布尔值进行检查,并且可以根据需要使用

此外,在属性名称前面加上一个
#
,这对于推送到堆栈中的值是不必要的--
#
字符仅用于堆栈上下文中的命名值


所有这些都说明了,为什么要这样做呢?

这个
%{}
是Struts2的OGNL escape;它不是JSPEL,
%{}
是Struts2的OGNL转义;这不是一个好主意。