JSP判断移动设备

简介: 日期: 2014年3月6日 人员::铁锚 看到了一篇很好的文章, 《在天猫,前端做什么?》,里面有天猫php判断移动设备的正则(个人猜测),觉得很好用,于是就决定移植到JSP里面。 jsp文件名为 index.jsp,其实也可以使用过滤器来进行拦截,然后跳转到其他域名去。

日期: 2014年3月6日

人员::铁锚

看到了一篇很好的文章, 《在天猫,前端做什么?》,里面有天猫php判断移动设备的正则(个人猜测),觉得很好用,于是就决定移植到JSP里面。

jsp文件名为 index.jsp,其实也可以使用过滤器来进行拦截,然后跳转到其他域名去。

完整代码如下:

<%@page import="java.util.regex.Matcher"%>
<%@page import="java.util.regex.Pattern"%>
<%@ page language="java" pageEncoding="UTF-8"%>
<%!

// \b 是单词边界(连着的两个(字母字符 与 非字母字符) 之间的逻辑上的间隔),
// 字符串在编译时会被转码一次,所以是 "\\b"
// \B 是单词内部逻辑间隔(连着的两个字母字符之间的逻辑上的间隔)
String phoneReg = "\\b(ip(hone|od)|android|opera m(ob|in)i"
		+"|windows (phone|ce)|blackberry"
		+"|s(ymbian|eries60|amsung)|p(laybook|alm|rofile/midp"
		+"|laystation portable)|nokia|fennec|htc[-_]"
		+"|mobile|up.browser|[1-4][0-9]{2}x[1-4][0-9]{2})\\b";
String tableReg = "\\b(ipad|tablet|(Nexus 7)|up.browser"
		+"|[1-4][0-9]{2}x[1-4][0-9]{2})\\b";
Pattern phonePat = Pattern.compile(phoneReg, Pattern.CASE_INSENSITIVE);
Pattern tablePat = Pattern.compile(tableReg, Pattern.CASE_INSENSITIVE);

public boolean checkMobile(String userAgent){
	if(null == userAgent){
		userAgent = "";
	}
	// 匹配
	Matcher matcherPhone = phonePat.matcher(userAgent);
	Matcher matcherTable = tablePat.matcher(userAgent);
	if(matcherPhone.find() || matcherTable.find()){
		return true;
	} else {
		return false;
	}
}
%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

//
String userAgent = request.getHeader( "USER-AGENT" ).toLowerCase();

if(null == userAgent){
	userAgent = "";
}
if(checkMobile(userAgent)){
	response.sendRedirect(basePath+"download.html");
	//request.getRequestDispatcher("/download.html").forward(request,response);
} else {
	response.sendRedirect(basePath+"index.html");
	//request.getRequestDispatcher("/index.html").forward(request,response);
}
//
%>

<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <base href="<%=basePath%>">
    
    <title>测试移动设备跳转</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="测试,移动设备,跳转">
	<meta http-equiv="description" content="测试移动设备跳转">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
  
  <div id="pagecontent" style="min-height:500px;_height:500px;">
  
    正在运行!<br>
  </div>
    
  </body>
</html>


目录
相关文章
|
2月前
|
Java
JSP 教程 之 JSP 动作元素 10
`jsp:plugin`元素在JSP中用于基于浏览器类型插入OBJECT或EMBED标签以运行Java Applet或JavaBean。当插件缺失时,它会自动下载。属性如`codebase`, `code`, `width`, `height`用于配置组件,`jsp:param`传递参数。示例展示了一个包含错误处理fallback的applet使用案例。
31 4
|
2月前
|
Java
JSP 教程 之 JSP 动作元素 7
`jsp:getProperty`动作用于从已定义的Bean中获取属性值并以字符串形式输出。基本语法是在`jsp:useBean`后使用`jsp:getProperty`,指定`name`为Bean的ID和`property`为要获取的属性。例如,一个名为`TestBean`的Java类有`getMessage()`方法,Bean在JSP中定义并使用后,可通过`jsp:getProperty`获取`message`属性。编译`TestBean.java`生成`.class`文件,并放入JSP项目相应目录以使用。
31 5
|
2月前
|
XML Java 数据格式
JSP 教程 之 JSP 动作元素 11
JSP 动作元素 `&lt;jsp:element&gt;`, `&lt;jsp:attribute&gt;`, `&lt;jsp:body&gt;` 用于动态生成XML。这些元素在编译时动态创建,不是静态的。示例展示了如何使用它们定义一个XML元素,包含属性和主体。在浏览器中查看结果。
26 2
|
2月前
|
XML Java 数据格式
JSP 教程 之 JSP 动作元素 12
JSP `&lt;jsp:text&gt;`动作元素用于插入纯文本或EL表达式,不支持XML非法符号。在XHTML中声明DOCTYPE时必需。例子显示了在`&lt;books&gt;&lt;book&gt;`中使用`&lt;jsp:text&gt;`包裹的文本。比较使用和不使用该动作元素的效果差异。
22 2
|
2月前
|
Java
JSP 教程 之 JSP 动作元素 8
JSP `jsp:getProperty`动作用于从Bean获取属性值并以字符串形式输出。需指定Bean的`name`和要提取的`property`。给定一个名为`TestBean`的JavaBean示例,其中包含`message`属性。将编译后的`TestBean.class`放在正确目录下,JSP页面通过`jsp:getProperty`加载并显示Bean的`message`属性。访问`main.jsp`以查看结果。
32 2
|
2月前
|
Java
JSP 教程 之 JSP 动作元素 9
JSP教程介绍了jsp:forward动作元素,它用于将请求重定向至其他页面。该动作仅有一个属性:page,可指定相对URL,支持静态或动态计算,能指向JSP或Servlet。示例中,date.jsp显示当前日期,main.jsp使用jsp:forward将请求转发至date.jsp,当访问main.jsp时,会显示date.jsp的日期信息。
36 2
|
2月前
|
Java
JSP 教程 之 JSP 动作元素 5
`jsp:setProperty`用于设置Bean对象属性,可在外或内`jsp:useBean`中使用。在外时,无论Bean是否新创建,都会执行。在内时,只在创建新Bean实例时执行。示例展示了两种用法。
33 1
|
2月前
|
Java
JSP 教程 之 JSP 动作元素 6
`jsp:setProperty`用于设置Bean对象属性,可在外或内`jsp:useBean`中使用。在外时,无论Bean是否已存在都会执行;在内时,仅新建Bean时执行。属性包括:`name`(必需,指定Bean)、`property`(必需,指定属性,`*`匹配所有请求参数)、`value`(可选,直接指定属性值,支持类型转换)和`param`(可选,用请求参数值设置属性)。`value`与`param`不能同时使用。
34 1
|
2月前
|
Java
JSP 教程 之 JSP 动作元素 4
`jsp:useBean` 动作用于在JSP中引入JavaBean,促进组件复用。基本语法是 `&lt;jsp:useBean id=&quot;name&quot; class=&quot;package.class&quot; /&gt;`。可通过`jsp:setProperty`和`jsp:getProperty`操作Bean属性。属性包括:`class`定义Bean的全类名,`type`指对象类型,`beanName`利用`java.beans.Beans`的`instantiate()`方法指定Bean。
24 1
|
2月前
|
缓存 Java
JSP 教程 之 JSP 动作元素 3
JSP的`jsp:include`动作元素用于动态或静态地插入文件,区别于预编译时的`include`指令,它在页面被请求时插入内容。主要属性有`page`(指定相对URL)和`flush`(布尔值,控制是否刷新缓存)。示例中,`date.jsp`显示当前日期,`main.jsp`通过`jsp:include`插入`date.jsp`,当访问`main.jsp`时,会显示包含的日期信息。
26 1