User-Agent在URL申请头中有着重要的意义。可以用来判断用户代理的类型。通过检测用户代理,就可以针对不同的用户代理发送最适合的信息。在这里将要介绍一个Servlet小工具用来检测User-Agent,以及几种有特点的用户代理。当然该工具也适合于检测其他类型的HTTP头,源程序如下:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Snoop extends HttpServlet
{
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
    {
        response.setContentType("text/vnd.wap.wml");
        PrintWriter out = response.getWriter();
        out.println("<?xml version=\"1.0\"?>");
        out.println("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">");
        String check=request.getParameter("check");
        out.println("<wml>");
        out.println(" <card id=\"check\" title=\"" + check + "\">");
        out.println(" <p>");
        if(check.equals("Method"))
        {
            out.println(request.getMethod());
        }
        else if(check.equals("URL"))
        {
            out.println(request.getRequestURL());
        }
        else if(check.equals("Protocol"))
        {
            out.println(request.getProtocol());
        }
        else if(check.equals("ServletPath"))
        {
            out.println(request.getServletPath());
        }
        else if(check.equals("PathInfo"))
        {
            out.println(request.getPathInfo());
        }
        else if(check.equals("PathTranslated"))
        {
            out.println(request.getPathTranslated());
        }
        else if(check.equals("QueryString"))
        {
            out.println(request.getQueryString());
        }
        else if(check.equals("ContentLength"))
        {
            out.println(request.getContentLength());
        }
        else if(check.equals("ServerName"))
        {
            out.println(request.getServerName());
        }
        else if(check.equals("ServerPort"))
        {
            out.println(request.getRemoteUser());
        }
        else if(check.equals("RemoteUser"))
        {
            out.println(request.getRemoteAddr());
        }
        else if(check.equals("RemoteHost"))
        {
            out.println(request.getRemoteHost());
        }
        else if(check.equals("AuthType"))
        {
            out.println(request.getAuthType());
        }
        else
        {
            out.println(request.getHeader(check));
        }
        out.println(" </p>");
        out.println(" </card>");
        out.println("</wml>");
    }
}

    我在Catalina Server下调试通过。程序根据你选择的不同check选择项返回不同的信息。这个小工具对于在程序调试的时候是十分有用的。你可以在你的form中间加入一个check选择项,将action指向snoop就可以知道用户代理发送给服务器的所有内容,方便吧!
    当你输入check=User-Agent的时候,那么返回的就是User-Agent的值。m3Gate只能在使用IE的时候才可以启动。UpPhone传回的数据最长。Nokia WAP Toolkit 1.2相比之下就比较简单。ccWAP居然就只有:WML Browser。其他类型的User-Agent值你可以在“浏览器列表”中找到!