服务器端通过http请求区分是mobile还是pc

2019-03-25 23:14|来源: 网络

近来在开发一个基于手机上网的项目。遇到的第一件事情就是,该项目需要同时支持手机和PC。详细的说:当pc登陆上来,访问的是html;当手机登陆上来就是wml。

  那我们怎么来判断呢?

  入正题,下面说说我的解决办法。

  1. /**

  2. * 传入http请求的UserAgent

  3. * 根据它判断是手机还是电脑发送过来的请求

  4. * @param userAgent

  5. * @return

  6. */  

  7. public static boolean choose(String userAgent) {  

  8.    if (userAgent.indexOf("Noki") > -1 || // Nokia phones and emulators  

  9.        userAgent.indexOf("Eric") > -1 || // Ericsson WAP phones and emulators  

  10.        userAgent.indexOf("WapI") > -1 || // Ericsson WapIDE 2.0  

  11.        userAgent.indexOf("MC21") > -1 || // Ericsson MC218  

  12.        userAgent.indexOf("AUR") > -1  || // Ericsson R320  

  13.        userAgent.indexOf("R380") > -1 || // Ericsson R380  

  14.        userAgent.indexOf("UP.B") > -1 || // UP.Browser  

  15.        userAgent.indexOf("WinW") > -1 || // WinWAP browser  

  16.        userAgent.indexOf("UPG1") > -1 || // UP.SDK 4.0  

  17.        userAgent.indexOf("upsi") > -1 || //another kind of UP.Browser  

  18.        userAgent.indexOf("QWAP") > -1 || // unknown QWAPPER browser  

  19.        userAgent.indexOf("Jigs") > -1 || // unknown JigSaw browser  

  20.        userAgent.indexOf("Java") > -1 || // unknown Java based browser  

  21.        userAgent.indexOf("Alca") > -1 || // unknown Alcatel-BE3 browser (UP based)  

  22.        userAgent.indexOf("MITS") > -1 || // unknown Mitsubishi browser  

  23.        userAgent.indexOf("MOT-") > -1 || // unknown browser (UP based)  

  24.        userAgent.indexOf("My S") > -1 ||//  unknown Ericsson devkit browser  

  25.        userAgent.indexOf("WAPJ") > -1 ||//Virtual WAPJAG www.wapjag.de  

  26.        userAgent.indexOf("fetc") > -1 ||//fetchpage.cgi Perl script from www.wapcab.de  

  27.        userAgent.indexOf("ALAV") > -1 || //yet another unknown UP based browser  

  28.        userAgent.indexOf("Wapa") > -1 || //another unknown browser (Web based "Wapalyzer")  

  29.        userAgent.indexOf("Oper") > -1) {  

  30.        return true;  

  31.    } else {  

  32.        return false;  

  33.    }  

  34. }  



参数userAgent:

  1. String userAgent = request.getHeader("User-Agent");  



有人说可以根据来访的IP来判断,好像是行不通的。当采用wap上网方式还好判断;一旦采用net来访问,往往也是可以获取独立的IP的。

还有人说可以用HTTP_ACCEPT来判断,判断访问过来的终端是否支持wml,这样问题又会出现,如果某个浏览器既能支持wml和html,或者现在很多智能手机既能支持wml和html,你还是没招了!


本文链接:服务器端通过http请求区分是mobile还是pc,转自:http://lianj-lee.iteye.com/blog/460226

相关问答

更多
  • 你写的程序放在服务器电脑上运行,叫做服务器端编程。 既然是叫做服务器,也说明你写的程序要可以接受客户端的互动。 你写的程序放在客户端上运行,叫做客户端编程。
  • 回复 1# 的帖子 nginx默认就是支持ssi的,在配置文件中开启即可。在虚拟主机location 段里加上(加在http,server段里也可以)ssi on;ssi_silent_errors on;ssi_types text/shtml;这3行,再/usr/local/nginx/sbin/nginx -s reload 重启nginx
  • 服务端和普通的servlet获得数据没有区别,就是通过request.getParameter()等API获得数据. 要知道: 服务端的代码与你是通过HttpClient请求还是浏览器请求都没有联系!
  • 什么是服务器端[2022-05-02]

    简单的说,服务器端是为客户端服务的,服务的内容诸如向客户端提供资源,保存客户端数据等等.客户端可以是任意的一台电脑,只要它和服务器端存在连接,并且得到了服务器端的授权,就可以使用服务器端的服务.象现在就可以理解为百度的网站是服务器端,我们现在使用的电脑就是客户端.我们可以使用它的服务. 通常的服务器端都是服务器级的高级PC,以便多客户访问时不会造成延时甚至数据溢出.
  • 1. PC服务器启用ServerSocket   两个通信实体在建立虚拟链路之前,需要有一方先准备好,主动接受来自其他通信实体的连接请求。   使用ServerSocket对象监听来自客户端的Socket连接。   //创建ServerSocket对象 ServerSocket ss = new ServerSocket(30000); //监听来自客户端的请求 while(true){ Socket s = ss.accept(); … }   如果没有连接,则将一直处于等待状态。当接收到连接请求后,获取 ...
  • 某个servlet的所有doGet方法都将在不同的线程中自动运行。 这就是Java Servlet Specification 3.0关于处理请求的内容 基本的Servlet接口定义了一个用于处理客户端请求的服务方法。 为servlet容器路由到servlet实例的每个请求调用此方法。 处理对Web应用程序的并发请求通常要求Web Developer设计servlet,该servlet可以处理在特定时间在服务方法内执行的多个线程。 通常,Web容器通过在不同线程上并发执行服务方法来处理对同一servlet的 ...
  • 请参阅http://www.php.net/manual/en/function.microtime.php 在请求制作和请求处理部分相应地使用代码。 Please refer http://www.php.net/manual/en/function.microtime.php Use the code accordingly on request making and request processing sections.
  • 就个人而言,对于服务器端检测,我喜欢WURFL。 它有一个.NET API可用。 Personally, for server side detection I like WURFL. It has a .NET API available.
  • 你看过WURFL了吗? 它是一个服务器端描述符文件,可以帮助检测各种移动用户代理,功能,屏幕大小,颜色深度等。 我不确定是否有任何东西可以告诉你具体的型号名称/制造商ATM,但像上面这样的东西至少可以给你一个线索。 编辑:进一步阅读...看起来它可能能够在许多情况下提供特定于设备的信息。 Have you looked into WURFL? It's a server-side descriptor file that can help detect various mobile user-agents, ...
  • 当sling实现脚本语言时,它提供了一组有限的常用对象绑定。 这些定义如下: http://sling.apache.org/apidocs/sling5/org/apache/sling/api/scripting/SlingBindings.html 此外,Rhino还实现了几个与java集成的功能。 比如包含所有顶级java包的Packages变量,例如java和com。这提供了一种直接从esp与java交互的方法,例如。 Packages.java.util.Calendar.getInstance ...