要创建一个成功的servlet程序,通常需要知道有关运行环境的许多信息,可能要了解运行servlet服务器的信息或正在发送请求的客户的信息.servlet提供访问这些信息的许多方法,每一方法返回特定结果.
■servlet □取得servlet初始化参数 servlet用getInitParmeter()方法来访问它的初始化参数: public String servletConfig.getInitParameter(String name) 类GeneicServlet实现接口servletConfig并提供对getInitParameter方法的直接访问.因此可以这样调用: public void init() throws ServletException { String greeting=getInitParameter("greeting"); } □取得servlet初始化参数名 servlet用getInitParameterNames()来检测初始化参数: public Enumeration servletConfig.getInitParameterNames() 此方法以列举字符串对象返回servlet的所有初始化参数,或没有参数,返回空对列. //PrintInit.java //打印出所有初始化参数名称和值 import java.io.*; import java.util.*; import javax.servlet.*; public class PrintInit extends GenericServlet { public void service(ServletRequest req,ServletResponse res) throws ServletException,IOException { res.setContentType("text/plain"); PrintWriter out=res.getWriter(); out.println("init parameters"); Enumeration enum=getInitParameterNames(); while(enum.hasMoreElements()) { String name=(String)enum.nextElement();//取得参数名 out.println(name+":"+getInitParameter(name));//获取参数值 } } } □取得servlet名称 在servletConfig中有返回servlet注册名称的方法: public String servletConfig.getServletName() 如果servlet未注册,则返回类名.这个方法在写日志或像数据库这样的共享效法中写入servlet实例状态信息时是很有用的.或用于servlet SessionContext public void doGet(HttpServeltRequest req,HttpServetResponse res) throws ServletException,IOException { String name=getServletName(); servletContext context=getServletContext(); Object value=context.getAttribute(name+".state"); } 获得服务器信息 >获得服务器名 public String servletRequest.getServerName() >获得服务器端口号 public int servletRequest.getServerPort() 以下方法由servletContext对象调用,举例: servletContext context=getServletContext(); out.println(context.getServletInfo()); >获得服务器信息 public String servletContext.getServerInfo() >获取属性值 public Object servletContext.getAttribute(String name)
>获得服务器属性名及值 ServletContext context=getServletContext(); Enumeration enum=context.getAttributeNames(); while(enum.hasMoreElements()) { String name=(String)enum.nextElement(); out.println("context.getAttribute(\""+name+"\"):"+context.getAttributeName(name)); } ■客户端 □取得客户机信息 >检索客户机IP地址:public String ServletRequest.getRemoteAddr() >检索客户机主机名:public String ServletRequest.getRemoteHost() IP地址和主机名通过InetAddress.getByName()转化为java.net.InetAddress对象 InetAddress remoteInetAddress=InetAddress.getByName(req.getRemoteAddr()) □取得用户信息 >public String HttpServletRequest.getRemoteUser()获取访问服务器远程主机用户名 //PersonalWelcome.java import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class PersonalWelcome extends HttpServlet { Hashtable accesses=new Hashtable(); public void doGet(HttpServletRequest req,HttpServletResponse res) throws ServletExceptioin,IOException { res.setContentType("text/html"); PrintWriter out=res.getWriter(); //取得远程主机名 String remoteUser=req.getRemoteUser(); if(remoteUser==null) { out.println("welcome"); }else{ out.println("welcome"+remoteUser); Date lastaccess=(Date)accesses.get(remoteUser); //判断以前是否访问过 if(lastaccess==null) { out.println("this is your first visit"); }else{ out.println("your last visit is on"+accesses.get(remoteUser)); } //判断是否是falken if(remoteUser.equals(*PROFESSOR FALKEN") { out.println("hello falken"); } //更新最后访问时间 accesses.put(remoteUser,new Date()); } } 
|