Because the mobile and PC side is slightly different, I think it is best to be in a unified judgment, and do not change the original code, this can reduce the number of bugs to a certain extent. My idea is to first determine whether the current request is mobile, then set a logo to the session, and then you can handle it casually. Whether you are dealing with it alone or in a unified process, you can judge the session directly by reading it.
I encapsulated it into a class that I now share with you:
?
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
package com.tgb.util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 检测是否为移动端设备访问
*
* @author :
* @group :
* @Version :
* @Date :
*/
public class CheckMobile {
// \b 是单词边界(连着的两个(字母字符 与 非字母字符) 之间的逻辑上的间隔),
// 字符串在编译时会被转码一次,所以是 "\\b"
// \B 是单词内部逻辑间隔(连着的两个字母字符之间的逻辑上的间隔)
static 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"
;
static String tableReg =
"\\b(ipad|tablet|(Nexus 7)|up.browser"
+
"|[1-4][0-9]{2}x[1-4][0-9]{2})\\b"
;
//移动设备正则匹配:手机端、平板
static Pattern phonePat = Pattern.compile(phoneReg, Pattern.CASE_INSENSITIVE);
static Pattern tablePat = Pattern.compile(tableReg, Pattern.CASE_INSENSITIVE);
/**
* 检测是否是移动设备访问
*
* @Title: check
* @Date :
* @param userAgent 浏览器标识
* @return true:移动设备接入,false:pc端接入
*/
public static boolean check(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
;
}
}
}
|
How to use:
?
123456789101112131415161718192021222324252627282930313233343536 |
/**
* 检查访问方式是否为移动端
*
* @Title: check
* @Date :
* @param request
* @throws IOException
*/
public boolean check(HttpServletRequest request,HttpServletResponse response)
throws IOException{
boolean isFromMobile=
false
;
HttpSession session= request.getSession();
//检查是否已经记录访问方式(移动端或pc端)
if
(
null
==session.getAttribute(
"ua"
)){
try
{
//获取ua,用来判断是否为移动端访问
String userAgent = request.getHeader(
"USER-AGENT" ).toLowerCase();
if
(
null == userAgent){
userAgent =
""
;
}
isFromMobile=CheckMobile.check(userAgent);
//判断是否为移动端访问
if
(isFromMobile){
System.out.println(
"移动端访问"
);
session.setAttribute(
"ua"
,
"mobile"
);
}
else {
System.out.println(
"pc端访问"
);
session.setAttribute(
"ua"
,
"pc"
);
}
}
catch
(Exception e){}
}
else
{
isFromMobile=session.getAttribute(
"ua"
).equals(
"mobile"
);
}
return isFromMobile;
}
|
In the login, or in the action of the Execute call this method, do not change the original business logic, you can determine whether the request is mobile, and then according to the results to do the corresponding processing, it should be much simpler.
Javaweb determine whether the current request is a mobile device access method