Ich bin ziemlich neu in der Java, JSP und Taglib Welt und ein einfaches Problem stört mich. Ich möchte nur überprüfen, ob die Browser-Agent-Zeichenfolge des Benutzers "Opera Mini" oder eine alte Android-Version enthält, um zu prüfen, ob sie mit meiner App kompatibel ist.Wie Regex-Funktion auf User-Agent-Zeichenfolge in Jsp verwenden?
ich meine Funktion in Eclipse getestet dies ist, wie es aussieht:
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;
}
}
Jetzt möchte ich diese Funktion nutzen als jar taglib eingebettet und verwenden Sie es in meiner jsp-Datei. Ich habe eine Menge Beispiele für benutzerdefinierte Tag-Bibliotheken gefunden, aber ich habe kein Beispiel für eine Taglib gefunden, die einfach eine Funktion hat, die einen booleschen Wert zurückgibt. Ist es überhaupt möglich, ein Taglib-Glas so zu verwenden? Ich habe versucht, eine jar taglib zu erstellen, und ich konnte es nicht funktionieren lassen.
Nach diesem Beispiel am Ende dieser Seite: https://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html#wp77078 scheint es möglich zu sein. Aber ich denke, wenn Sie eine JAR-Datei für die Lib erstellen, ist der -Tag erforderlich. Ich konnte das Beispiel nicht wiederherstellen. Dies ist ein Teil meiner taglib decriptor im Glas:
...
<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>
...
Dies ist die Klasse:
package my.package;
public class Functions {
public static String hello(String name) {
return "Hiya, " + name + ".";
}
}
Ich versuchte es auf meinem lokalen Xampp Kater. Ich habe die Taglib in der web.xml referenziert und eine Tld-Datei im Tag-Verzeichnis erstellt. Im jsp referenzierten ich es mit:
<%@ taglib prefix="test" uri="http://www.imaginary.url/my_taglib_name" %>
<test:hello("bla") />
Dies wirft die folgende Ausnahme: No tag "hello(" defined in tag library imported with prefix "test"
.
Was habe ich vermisst oder was habe ich falsch gemacht? Ich denke, dass ich in der Lage sein würde, mein User-Agent-If-Statement einfach zu emebdieren. Oder gibt es sogar einen saubereren/einfacheren Weg?
Vielen Dank! Konnte es noch nicht versuchen, sieht aber vielversprechend aus. Habe aber inzwischen meine eigene jar taglib Lösung gefunden. – user2718671