在servlet体系中,除了用于实现servlet接口、GenericServlet类和HttpServlet类外,还有一些辅助servlet获取相关资源的重要接口,,了解这些接口并熟练运用这些接口的常用方法是使用servlet进行web开发的基础
主要有一下四个接口:
接口定义为:public abstract interface javax.servlet.ServletConfig;
容器在初始化一个servlet时,将为该servlet创建一个唯一的的servletConfig对象,并将这个对象通过init(ServletConfig config)方法来传递并保存在此Servlet对象中。
ServletConfig的主要方法有:
方 法 |
描 述 |
getInitParameter(String param) |
根据参数的名称返回初始对应的参数值,若无返回null |
getInitParameterNames() |
返回一个Enumeration对象,包含初始化参数的名称 |
getServletContext() |
返回ServletContext对象 |
getServletName() |
返回servlet的名字,即@WebServet的name属性值,如果没有配置这个属性值,则返回servlet类的权限定名 |
ServletConfig接口主要访问两项内容;一是Servlet初始化信息,这个需要在Servlet配置的文件中获取;另一个是ServletContext对象,主要为servlet提供容器信息。
在实际的开发中,我们时常遇到某些信息不断变化,比如账户和密码,若有变化servlet将会重新编译,这将大大降低了运行速度。所以将这些信息编码到配置文件中,可以解决这一问题。
Web.xml配置文件中的代码
Servlet中的代码
String s = config.getInitParameter(“url”); //s=”123456”
ServletContext也称作servlet的上下文。一个web应用启动过后,servlet容器会创建唯一一个ServletContext对象,在应用中的任何servlet都可以共享这个ServletContext,这个对象有两种方法可以获取:1.通过init方法中的servletconfig接口getservletContext方法来获取。2.通过GenericServlet抽象类的getservletContext方法获取。
ServletContext方法:
以下进行介绍
在web.xml中使用
方法 |
描述 |
getInitParameter(String name) |
返回name的参数值。即返回 |
getInitParameterNames |
返回包含所有初始化名称的的Enumeration |
ServletContext可以理解为一个容器中共享的空间,可以储存具有应用级别作用域的数据,web应用中的各个组件都可以共享这些数据,这些数据可以以key/value的形式来储存到servletcontext中,并以key作为属性名来访问。
方法 |
描述 |
setAttribute(String name,Object o) |
把一个对象和属性名储存到servletconfig中,参数name指定为属性名,参数object表示共享的数据 |
getAttribute(String name) |
根据name获取数据 |
getAttributeNames() |
返回一个Enumeration对象,该对象包含了所有存放在servletContext中的属性名 |
removeAttribute(String name) |
根据name删除属性 |
ServletContext还可以获取当前web应用中的根路径、应用的名称、应用的组件、应用组件间的转发以及容器下其他web应用的ServletContext对象等
方法 |
描述 |
getContextPath() |
Web应用的根路径 |
getServletContextName() |
返回web应用名称 |
getRequestDispatcher(String path) |
返回一个用于向其他web组件转发请求的RequestDispatcher对象 |
GetContext(String uripath) |
根据参数指定url返回当前servlet容器中其他web应用的servletcontext对象,url必须以“/”开头 |
方法 |
描述 |
getServlerInfo() |
web容器的名字和版本 |
getMajorVersion() |
Web容器支持的servlet API主版本号 |
getMinorVersion() |
Web容器支持的servlet API次版本号 |
log(String msg) |
用于记录一般日志 |
log(String msg,Throwable throw) |
记录异常的堆栈日志 |
使用ServletContext接口还可以访问web应用中静态文件,例如HTML、GIF和Properties文件等,同时还可以获取文件资源的MIME类型以及其在服务器中的真实存放路径。
方法 |
描述 |
getResourcceAsStream(String path) |
返回一个读取参数指定的文件输入流,参数路径以“/”开头 |
getResource(String path) |
返回一个由path指定的资源路径对应的URL对象,参数以”/”开头 |
getRealPath(String path) |
根据虚拟路径返回真实路径 |
getMimeType(String file) |
根据参数指定的文件的MIME类型 |
ServletRequest接口用于封装请求信息,该对象在用户每次请求servlet时创建并传入servlet的service()方法。HttpServletRequest继承于servletRequest,专门用于HTTP协议的子接口。在Httpservlet类中的service()方法中,传入的servletRequest将会被强制转化为HttpservletRequest对象来进行HTTP请求信息的处理。
HttpServletRequest接口有以下方法:
一个请求行一般由请求方法(POST、GET)、请求URL、请求协议及版本组成。
方法 |
描述 |
getMethod() |
获取请求的方法POST、GET、PUT |
getRequestURI() |
获取请求行的资源 |
getProrocol() |
获取使用协议和版本号 |
getQueryString() |
获取请求URL查询字符,对get有效 |
getServletPath() |
获取servlet所映射的路径 |
getContextPath() |
获取资源所属的web应用的路径 |
方法 |
描述 |
getIntHeader(String name) |
获取整数类型参数名为name的http头 |
getDateHeader(String name) |
获取long类型名为neme的http头 |
getContentLength() |
获取请求内容的长度 |
getContentType() |
获取请求的文档类型和编码 |
getLocale() |
获取用户浏览器设置的local信息 |
getCookies() |
获取一个cookie数组。所有的cookies |
请求正文内容为POST请求参数名称和值所组成的一个字符串,而对于GET请求,请求参数附属在请求行中,没有正文。POST请求一般通过