java后台怎么判断是手机还是电脑java通过代理访问网站站

博客分类:
随着手持互联网设备不断的加入,平板、手机上网占用了网络很大领域,由此在开发时经常遇到一个问题,需要考虑请求者是一个电脑还是平板还是手机呢???这里我人可以使用请求头信息user-agent来判断。
首先来看一级数据:
请求访问来源:
1.win7 64bit IE9
user-agent : Mozilla/5.0 ( MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
2.Android 2.3.6 uc
user-agent : Mozilla/5.0 (L U; Android 2.3.6; zh-CN; Nexus S Build/GRK39F) AppleWebKit/534.31 (KHTML, like Gecko) UCBrowser/9.0.1.275 U3/0.8.0 Mobile Safari/534.31
上面是电脑与手机的访问获取到的user-agent数据,通过以上数据可以看到,它们之间的user-agent中会列出不同的系统信息与浏览器信息以及操作系统信息等等,这时我们就可以通过这些数据来分辨请求是来自什么客户端发出的了。
附件1:如何获取请求头信息代码
[code=&java&]Enumeration e =& request.getHeaderNames();
while(e.hasMoreElements()){
String key = (String) e.nextElement();
out.println(key);
out.println(& : &);
out.println(request.getHeader(key));
out.println(&&);
附件2:加密等级标识说明
N: 表示无安全加密
I: 表示弱安全加密
U: 表示强安全加密
附件3:操作系统标识说明
[code=&java&]FreeBSD
X11; FreeBSD (version no.) i386
X11; FreeBSD (version no.) AMD64
X11; Linux ppc
X11; Linux ppc64
X11; Linux i686
X11; Linux x86_64
M PPC Mac OS X
M Intel Mac OS X
X11; SunOS i86pc
X11; SunOS sun4u
windows NT 6.2 对应操作系统 windows 8
Windows NT 6.1 对应操作系统 windows 7
Windows NT 6.0 对应操作系统 windows vista
Windows NT 5.2 对应操作系统 windows 2003
Windows NT 5.1 对应操作系统 windows xp
Windows NT 5.0 对应操作系统 windows 2000
Windows ME
Windows 98
&a href=/?khtmover&看完后请点击,支持一下作者&/a&
【温馨提示】 如果我的整理对您的学习有帮助,可以在方便的情况向我们整理小组的支付宝支付 1毛钱,表示对我们整理小组的支持,谢谢 支付宝帐号:wangdl_
浏览: 153161 次
来自: 西安
很不错的总结
java struts框架demo使用实例教程源代码下载,地址 ...
【温馨提示】 如果我的整理对您的学习有帮助,可以在方便的情况向 ...
【温馨提示】 如果我的整理对您的学习有帮助,可以在方便的情况向 ...
谢谢了,可以用!
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'判断是否是手机访问及手机操作系统
我们现在做的项目,移动端和PC端网站访问的是同一套接口,那么如何在接口中区分是手机访问还是PC短访问呢?
核心思想:根据请求头(request header)来判断,如何请求没有header或伪造user agent则无法判断.
我们现在做的项目,移动端和PC端网站访问的是同一套接口,那么如何在接口中区分是手机访问还是PC短访问呢?
核心思想:根据请求头(request header)来判断,如何请求没有header或伪造user agent则无法判断.
先看一些user agent的实例:
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/ Firefox/35.0
Mozilla/5.0 (iP CPU iPhone OS 8_1_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) (Engine, like URL) Mobile/12B440 MicroMessenger/6.0.1 NetType/3G+
Mozilla/5.0 (L U;
4.1.1; en- HTC T528d) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 MicroMessenger/6.0.2.58_r NetType/WIFI
Mozilla/5.0 (L U; Android 4.2.2; zh-CN; 2013023 Build/HM2013023) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/9.9.5.489 U3/0.8.0 Mobile Safari/533.1
Opera/9.80 (Android 2.3.7; L Opera Mobi/46154) Presto/2.11.355 Version/12.10
Mozilla/5.0 (L U; Android 4.2.1; zh- HUAWEI G700-U00 Build/HuaweiG700-U00) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 V1_AND_SQ_5.3.1_196_YYB_D QQ/5.3.1.2335 NetType/WIFI
Mozilla/5.0 (L U; Android 4.0.4; zh- HS-EG906 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 MicroMessenger/5.3.1.67_r
Mozilla/5.0 (L U; Android 4.4.2; zh- GT-I9500 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 MQQBrowser/5.0 QQ-Manager Mobile Safari/537.36
以下是我封装的一套方法
ClientOsInfo 是用于保存访问设备信息的,结构如下(省略getter,setter):
public class ClientOsInfo {
private String osTypeV
private String deviceT
private String osT
private String userA
public boolean isMobile(){
return (!ValueWidget.isNullOrEmpty(this.deviceType));
public static ClientOsInfo getMobileOsInfo(HttpServletRequest request){
String userAgent=request.getHeader("user-agent");
if(ValueWidget.isNullOrEmpty(userAgent)){
userAgent=request.getHeader("User-Agent");
ClientOsInfo info= HeaderUtil.getMobilOS(userAgent);
info.setUserAgent(userAgent);
核心工具类:用于解析user agent
package mon.
import java.util.regex.M
import java.util.regex.P
import mon.bean.ClientOsI
import com.string.widget.util.ValueW
public class HeaderUtil {
public static final String OSTYPE_ANDROID="Android";
public static final String OSTYPE_IOS="Ios";
public static final String OSTYPE_WP="WINDOWS PHONE";
public static final String OSTYPE_BLACKBERRY="BLACKBERRY";
public static final String DEVICE_TYPE_PAD="Pad";
public static final String DEVICE_TYPE_PHONE="Phone";
public static boolean verifyClientVersion(String clientVersion) {
boolean result = Pattern.matches("[\\d\\.]+", clientVersion);
if (result) {
result = Pattern.matches("^\\d\\.\\d\\.\\d\\.\\d$", clientVersion);
return false;
public static String getMobModel(String UA, String operatingSystem) {
if (UA == null) {
return null;
String rex = "";
if (operatingSystem.indexOf("IOS") != -1) {
if (UA.indexOf("IPAD") != -1) {
return "IPAD";
if (UA.indexOf("IPOD") != -1) {
return "IPOD";
if (UA.indexOf("IPONE") != -1) {
return "IPONE";
return "IOS DEVICE";
if (operatingSystem.indexOf("ANDROID") != -1) {
String re = "BUILD";
rex = ".*" + ";" + "(.*)" +
Pattern p = pile(rex, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(UA);
boolean rs = m.find();
System.out.println("Mobil Model is" + m.group(1));
return m.group(1);
return null;
public static ClientOsInfo getMobilOS(String UA) {
UA=UA.toUpperCase();
if (UA == null) {
return null;
ClientOsInfo osInfo=new
ClientOsInfo();
String rex = "";
String iosString = " LIKE MAC OS X";
if (UA.indexOf(iosString) != -1) {
if(isMatch(UA, "\\([\\s]*iPhone[\\s]*;", Pattern.CASE_INSENSITIVE)){
osInfo.setDeviceType(DEVICE_TYPE_PHONE);
}else if(isMatch(UA, "\\([\\s]*iPad[\\s]*;", Pattern.CASE_INSENSITIVE)){
osInfo.setDeviceType(DEVICE_TYPE_PAD);
rex = ".*" + "[\\s]+(\\d[_\\d]*)" + iosS
Pattern p = pile(rex, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(UA);
boolean rs = m.find();
String osVersion= m.group(1).replace("_", ".");
osInfo.setVersion(osVersion);
osInfo.setOsTypeVersion(OSTYPE_IOS+"_" + osVersion);
System.out.println("IOS");
osInfo.setOsTypeVersion(OSTYPE_IOS);
osInfo.setOsType(OSTYPE_IOS);
return osI
String androidString = "ANDROID";
if (UA.indexOf(androidString) != -1) {
if(isMatch(UA, "\\bMobi", Pattern.CASE_INSENSITIVE)){
osInfo.setDeviceType(DEVICE_TYPE_PHONE);
osInfo.setDeviceType(DEVICE_TYPE_PAD);
rex = ".*" + androidString + "[\\s]*(\\d*[\\._\\d]*)";
Pattern p = pile(rex, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(UA);
boolean rs = m.find();
String version=m.group(1).replace("_", ".");
osInfo.setVersion(version);
System.out.println("Mobil OS is " + OSTYPE_ANDROID + version);
osInfo.setOsTypeVersion(OSTYPE_ANDROID+"_" + version);
System.out.println("Android");
osInfo.setOsTypeVersion(OSTYPE_ANDROID);
osInfo.setOsType(OSTYPE_ANDROID);
return osI
String wpString = "WINDOWS PHONE";
if (UA.indexOf(wpString) != -1) {
rex = ".*" + wpString + "[\\s]*[OS\\s]*([\\d][\\.\\d]*)";
Pattern p = pile(rex, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(UA);
boolean rs = m.find();
System.out.println("Mobil OS is " + OSTYPE_WP + m.group(1));
String version=m.group(1);
osInfo.setVersion(version);
osInfo.setOsTypeVersion(OSTYPE_WP+"_" + version);
System.out.println("WINDOWS PHONE");
osInfo.setOsTypeVersion(OSTYPE_WP);
osInfo.setOsType(OSTYPE_WP);
return osI
String bbString = "BLACKBERRY";
if (UA.indexOf(bbString) != -1) {
rex = ".*" + bbString + "[\\s]*([\\d]*)";
Pattern p = pile(rex, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(UA);
boolean rs = m.find();
System.out.println("Mobil OS is" + " BLACKBERRY " + m.group(1));
String version=m.group(1);
osInfo.setVersion(version);
osInfo.setOsTypeVersion(OSTYPE_BLACKBERRY+"_" + version);
System.out.println("BLACKBERRY");
osInfo.setOsTypeVersion(OSTYPE_BLACKBERRY);
osInfo.setOsType(OSTYPE_BLACKBERRY);
return osI
if(UA.contains("LINUX")){
if(isMatch(UA, "\\bMobi", Pattern.CASE_INSENSITIVE)){
osInfo.setDeviceType(DEVICE_TYPE_PHONE);
osInfo.setDeviceType(DEVICE_TYPE_PAD);
Pattern p = pile("U;\\s*(Adr[\\s]*)?(\\d[\\.\\d]*\\d)[\\s]*;",Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(UA);
boolean result = m.find();
String find_result = null;
if (result)
find_result = m.group(2);
if(ValueWidget.isNullOrEmpty(find_result)){
osInfo.setOsTypeVersion(OSTYPE_ANDROID);
return osI
osInfo.setVersion(find_result);
osInfo.setOsTypeVersion(OSTYPE_ANDROID+"_"+find_result);
return osI
if(UA.matches(".*((IOS)|(iPAD)).*(IPH).*")){
if(isMatch(UA, "[\\s]*iPh[\\s]*", Pattern.CASE_INSENSITIVE)){
osInfo.setDeviceType(DEVICE_TYPE_PHONE);
osInfo.setDeviceType(DEVICE_TYPE_PAD);
Pattern p = pile("U;\\s*(IPH[\\s]*)?(OS[\\s]*)?(\\d[\\._\\d]*\\d)[\\s]*;",Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(UA);
boolean result = m.find();
String find_result = null;
if (result)
find_result = m.group(3);
if(ValueWidget.isNullOrEmpty(find_result)){
osInfo.setOsTypeVersion(OSTYPE_IOS);
osInfo.setOsType(OSTYPE_IOS);
return osI
String version=find_result.replace("_", ".");
osInfo.setVersion(version);
osInfo.setOsTypeVersion(OSTYPE_IOS+"_"+version);
osInfo.setOsType(OSTYPE_IOS);
return osI
return osI
public static boolean isMatch(String source,String regx,int flags){
Pattern p = pile(regx,flags);
Matcher m = p.matcher(source);
boolean result = m.find();
通过user agent判断是否是手机
public static boolean isMobile(String userAgent)
userAgent=userAgent.toLowerCase();
String []mobile_agents = {"240x320","acer","acoon","acs-","abacho","ahong","airness","alcatel","amoi","android","","applewebkit/525","applewebkit/532","asus","audio","au-mic","avantogo","becker","benq","bilbo","bird","blackberry","blazer","bleu","cdm-","compal","coolpad","danger","dbtel","dopod","elaine","eric","etouch","fly ","fly_","fly-","go.web","goodaccess","gradiente","grundig","haier","hedy","hitachi","htc","huawei","hutchison","inno","ipad","ipaq","ipod","jbrowser","kddi","kgt","kwc","lenovo","lg ","lg2","lg3","lg4","lg5","lg7","lg8","lg9","lg-","lge-","lge9","longcos","maemo","mercator","meridian","micromax","midp","mini","mitsu","mmm","mmp","mobi","mot-","moto","nec-","netfront","newgen","nexian","nf-browser","nintendo","nitro","nokia","nook","novarra","obigo","palm","panasonic","pantech","philips","phone","pg-","playstation","pocket","pt-","qc-","qtek","rover","sagem","sama","samu","sanyo","samsung","sch-","scooter","sec-","sendo","sgh-","sharp","siemens","sie-","softbank","sony","spice","sprint","spv","symbian","tablet","talkabout","tcl-","teleca","telit","tianyu","tim-","toshiba","tsm","up.browser","utec","utstar","verykool","virgin","vk-","voda","voxtel","vx","wap","wellco","wig browser","wii","windows ce","wireless","xda","xde","zte"};
boolean is_mobile = false;
for (String device : mobile_agents) {
if(userAgent.contains(device)){
is_mobile=true;
return is_
public void test_userAgent()
String userAgent="Mozilla/5.0 (L U; Android 4.1.1; en- HTC T528d) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 MicroMessenger/6.0.2.58_r NetType/WIFI";
System.out.println(HeaderUtil.isMobile(userAgent));
userAgent="Opera/9.80 (Android 2.3.7; L Opera Mobi/46154) Presto/2.11.355 Version/12.10";
System.out.println(HeaderUtil.isMobile(userAgent));
版权声明:本文内容由互联网用户自发贡献,本社区不拥有所有权,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至: 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
用云栖社区APP,舒服~
【云栖快讯】红轴机械键盘、无线鼠标等753个大奖,先到先得,云栖社区首届博主招募大赛9月21日-11月20日限时开启,为你再添一个高端技术交流场所&&
一个稳定可靠的集中式访问控制服务。您可以通过访问控制将阿里云资源的访问及管理权限分配给您的企业成员或合作伙伴。
操作审计(ActionTrail)会记录您的云账户资源操作,提供操作记录查询,并可以将记录文件保存到您指定的OS...
云数据库PPAS版,是阿里云与EnterpriseDB公司合作基于PostgreSQL高度兼容Oracle语法的...
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本...
阿里云双11狂欢,不只是5折
Loading...下面java代码判断是手机访问还是PC访问什么地方出错了,手机跳转不到制定页面,等待解答 - ITeye问答
最近在做一个项目,要在判断用户是否是通过手机访问网站的,如果是手机访问网站跳到一个登录页面,如果是用户用电脑访问网站跳到另外一个登录页面。我写了以下代码,但是用手机访问网站的时候,跳转不到制定页面,请求回答。
代码如下
servlet代码如下:
package com.lensoon.
import java.io.IOE
import java.io.PrintW
import javax.servlet.ServletE
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpS
import org.apache.log4j.L
import mon.JSF;
public class checkLoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
& logger = Logger.getLogger(this.getClass());
String userAgent = "";
String HTTP_USER_AGENT = request.getHeader("HTTP_USER_AGENT");
System.out.println("aa"+HTTP_USER_AGENT);
String agent = request.getHeader("User-Agent") == null ? "": request.getHeader("User-Agent");//取用户操作系统信息&
& //System.out.println(agent);
if(agent != null &&choose_jsp(agent)==true){
logger.error("跳转到手机百度");
("输出浏览器信息:**********************"+userAgent);
response.sendRedirect("");
& logger.error("跳转到电脑");
& request.getRequestDispatcher("Login.faces").forward(request, response);
public static boolean choose_jsp(String userAgent) {&&&&
&&& if (userAgent.indexOf("Noki") & -1 || // Nokia phones and emulators&&&&
&&&&&&&&&&&& userAgent.indexOf("Eric") & -1 || // Ericsson WAP phones and emulators&&&&
&&&&&&&&&&&& userAgent.indexOf("WapI") & -1 || // Ericsson WapIDE 2.0&&&&
&&&&&&&&&&&& userAgent.indexOf("MC21") & -1 || // Ericsson MC218&&&&
&&&&&&&&&&&& userAgent.indexOf("AUR") & -1& || // Ericsson R320&&&&
&&&&&&&&&&&& userAgent.indexOf("R380") & -1 || // Ericsson R380&&&&
&&&&&&&&&&&& userAgent.indexOf("UP.B") & -1 || // UP.Browser&&&&
&&&&&&&&&&&& userAgent.indexOf("WinW") & -1 || // WinWAP browser&&&&
&&&&&&&&&&&& userAgent.indexOf("UPG1") & -1 || // UP.SDK 4.0&&&&
&&&&&&&&&&&& userAgent.indexOf("upsi") & -1 || //another kind of UP.Browser&&&&
&&&&&&&&&&&& userAgent.indexOf("QWAP") & -1 || // unknown QWAPPER browser&&&&
&&&&&&&&&&&& userAgent.indexOf("Jigs") & -1 || // unknown JigSaw browser&&&&
&&&&&&&&&&&& userAgent.indexOf("Java") & -1 || // unknown Java based browser&&&&
&&&&&&&&&&&& userAgent.indexOf("Alca") & -1 || // unknown Alcatel-BE3 browser (UP based)&&&&
&&&&&&&&&&&& userAgent.indexOf("MITS") & -1 || // unknown Mitsubishi browser&&&&
&&&&&&&&&&&& userAgent.indexOf("MOT-") & -1 || // unknown browser (UP based)&&&&
&&&&&&&&&&&& userAgent.indexOf("My S") & -1 ||//& unknown Ericsson devkit browser&&&&&
&&&&&&&&&&&& userAgent.indexOf("WAPJ") & -1 ||//Virtual WAPJAG www.wapjag.de&&&&
&&&&&&&&&&&& userAgent.indexOf("fetc") & -1 ||//fetchpage.cgi Perl script from www.wapcab.de&&&&
&&&&&&&&&&&& userAgent.indexOf("ALAV") & -1 || //yet another unknown UP based browser&&&&
&&&&&&&&&&&& userAgent.indexOf("Wapa") & -1 || //another unknown browser (Web based "Wapalyzer")&&&
&&&&&&&&&&&& userAgent.indexOf("UCWEB") & -1 || //another unknown browser (Web based "Wapalyzer")&&&
&&&&&&&&&&&& userAgent.indexOf("BlackBerry") & -1 || //another unknown browser (Web based "Wapalyzer")&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&& userAgent.indexOf("J2ME") & -1 || //another unknown browser (Web based "Wapalyzer")&&&&&&&&&&&&&
&&&&&&&&&&&& userAgent.indexOf("Oper") & -1||
&&&&&&&&&&&& userAgent.indexOf("Android") &-1)
&&&&&&&&&&&& {&&&&
&&&&&&&&&&&&
&&&& } else {&&&&
&&&&&&&&&&&&
&&&& }&&&&
& &servlet&
&&& &servlet-name&checkLoginServlet&/servlet-name&
&&& &servlet-class&com.lensoon.login.checkLoginServlet&/servlet-class&
& &/servlet&
&servlet-mapping&
&&& &servlet-name&checkLoginServlet&/servlet-name&
&&& &url-pattern&/checkLoginServlet&/url-pattern&
& &/servlet-mapping&
输入网址时访问网站的时候会调用这个Login类的构造方法跳转到Login.java这个类中然后用JSF.redirect直接跳转到servlet中,代码如下:
public class Login {
public Login()& {
HttpSession session=JSF.getSession();
if(session.getAttribute("success")==null){
session.setAttribute("success", "pc");
JSF.redirect("checkLoginServlet");//直接跳转到servlet中,是可以跳转的
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
代码就是这样,遇到的问题是,用手机访问的时候跳转不到制定页面,等待解答,急用呀!!!!!!!各位大神,来看看把!!!!!!!!!!!
http://shuiranyue./blog/static//
如果你识别了操作系统,或者能够判断的话,那就是你逻辑问题了,debug吧
已解决问题
未解决问题

我要回帖

更多关于 java 判断访问设备 的文章

 

随机推荐