gpt4 book ai didi

java - 如何在jsp中的用户代理字符串上使用正则表达式函数?

转载 作者:行者123 更新时间:2023-12-01 09:56:01 26 4
gpt4 key购买 nike

我对 Java、JSP 和 Taglib 世界还很陌生,有一个简单的问题困扰着我。我只想检查用户的浏览器代理字符串是否包含“Opera Mini”或旧的 Android 版本,以检查它是否与我的应用程序兼容。

我在 Eclipse 中测试了我的函数,如下所示:

package test.Regexp;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class UserAgentRegexTest {
public static void main(String args[]){
System.out.println(isCompatible());
}

static boolean isCompatible(){
//String content = "Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30";
//String content = "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.23 Mobile Safari/537.36";
//String content = "Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.16823Mod.by.Handler/22.387; U; en) Presto/2.5.25 Version/10.54";
String content = "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.23 Mobile Safari/537.36";

String patternString = "Android (\\d.\\d)|Opera Mini";
Pattern pattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(content);
if(matcher.find()) {
if(matcher.group(1) != null){
double version = Double.parseDouble(matcher.group(1).toString());
if(version > 4.4){
return true;
}
}
return false;
}
return true;
}
}

现在我想使用这个嵌入为 jar taglib 的函数并在我的 jsp 文件中使用它。我找到了很多自定义标签库的示例,但没有找到仅具有返回 boolean 值的函数的标签库示例。甚至可以使用这样的 taglib jar 吗?我尝试创建一个 jar taglib,但无法使其工作。

根据本页底部的示例:https://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html#wp77078似乎有可能。但我想当你为 lib 创建 jar 文件时,-Tag 是必需的。我无法重新创建该示例。这些是 jar 中我的 taglib 描述符的一部分:

...
<uri>http://www.imaginary.url/my_taglib_name</uri>
<function>
<name>hello</name>
<function-class>my.package.Functions</function-class>
<function-signature>java.lang.String hello(java.lang.String)</function-signature>
</function>
...

这是类(class):

package my.package;

public class Functions {
public static String hello(String name) {
return "Hiya, " + name + ".";
}
}

我在本地 xampp tomcat 上尝试过。我在 web.xml 中引用了 taglib,并在标签目录中创建了一个 tld 文件。在 jsp 中我引用它:

<%@ taglib prefix="test" uri="http://www.imaginary.url/my_taglib_name" %>
<test:hello("bla") />

这会引发以下异常:在使用前缀“test”导入的标签库中没有定义标签“hello(”

我错过了什么或者我做错了什么。我认为通过运行该示例,我将能够轻松地嵌入我的 user-agent-if-statement。或者有没有更干净/更简单的方法?

最佳答案

如果您不愿意,则不需要为此使用标签库。下面的代码可能有点难看,但它是做你想做的事情最快的方法,而且优雅的恕我直言:

<% if (test.Regexp.UserAgentRegexTest.isCompatible(request)) { %>
... rest of your JSP in case of true ...
<% } else { %>
... rest of your JSP in case of false ...
<% } %>

请注意,您需要将 request 传递给您的 isCompatible 方法,以便在您的方法中可以获取实际的 User-Agent header 。您还需要公开该方法。例如:

public static boolean isCompatible(HttpServletRequest request) {
String content = request.getHeader("User-Agent");
...

关于java - 如何在jsp中的用户代理字符串上使用正则表达式函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37208873/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com