Servlet接口
Servlet的运行需要Servlet容器的支持Servlet容器通过调用Servlet对象提供了标准的API接口,对请求进行处理.在Servlet开发中,任何接口都要直接或间接实现javax.servlet.Servlet接口,该接口是Servlet
API的核心接口,此接口提供了5个方法
方法 |
说明 |
public void init(ServletConfig config) |
Servlet实例化后,Servlet容器调用此方法完成初始化工作 |
public void service(ServletRequest request,ServletResponse response) |
此方法用于处理客户端请求。 |
public void destroy() |
当Servlet对象从Servlet容器中移除时,容器调用此方法,以便释放资源 |
public ServletConfig getServletConfig() |
此方法用于获取Servlet对象的配置信息,返回ServletConfig对象。 |
public String getServletInfo() |
此方法返回有关Servlet的信息,他是纯文本格式的字符串,如作者、版本等。 |
GenericServlet抽象类
GenericServlet类对Servlet接口进行了实现。他是一个抽象类,分别实现了Servlet接口和ServletConfig接口,此类对除了service()外的其他方法进行了实现,在创建Servlet对象时,可以继承GenericServlet类来简化程序中的代码,但是需要实现service()方法。
HttpServlet抽象类
HttpServlet是GenericServlet类的子类。GenericServlet类对javax.servlet.Servlet接口进行了实现,为程序开发提供了方便。但是在实际开发中,大多数的应用都是使用Servlet处理HTTP协议的请求,并对请求作出回应,所以通过集成GenericServlet类仍然不是很方便,javax.servlet.http.HttpServlet类对GenericServlet类进行了扩展,为Http请求的处理提供了灵活的方法。
HttpServlet类仍然是一个抽象类,他对service()方法进行了实现,并针对HTTP1.1中定义的7中请求类型提供了相应的方法,分别是doGet(),doPost(),doPut()、doDelete()、doHead()、doTrace()、doOptions()。
HttpServletRequest接口
该接口位于javax.servlet.http包中,此接口继承了javax.servlet.ServletRequest接口,是Servlet中的重要接口,在开发中经常用到。
下面看一下他的常用方法。
方法 |
说明 |
public String getContextPath() |
返回请求的上下文路径,此路径以/开头 |
public Cookie[] getCookies() |
返回请求中发送的所有Cookie对象,返回值为Cookie数组 |
public String getMethod() |
返回请求所使用的HTTP类型,如GET、POST等。 |
public String getQueryString() |
返回请求中参数的字符串形式,例如:请求为”MyServlet?username=mr”则返回”username=mr” |
public String getRequestURI() |
返回主机名到请求参数之间部分的字符串形式 |
public StringBuffer getRequestURL() |
返回请求的URL,此URL中不包含请求的参数 |
public String getServletPath() |
返回请求URL中的Servlet路径的字符串,不包含参数 |
public HttpSession getSession() |
返回与请求关联的HttpSession对象 |
具体使用方法如下:
package Servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HttpServletRequestDemo extends HttpServlet { public HttpServletRequestDemo() { super(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); out.print("<p>上下文路径:"+request.getContextPath()+"</p>"); out.print("<p>HTTP请求类型:"+request.getMethod()+"</p>"); out.print("<p>请求参数:"+request.getQueryString()+"</p>"); out.print("<p>请求URL:"+request.getRequestURI()+"</p>"); out.print("<p>请求URL:"+request.getRequestURL().toString()+"</p>"); out.print("<p>请求Servlet路径:"+request.getServletPath()+"</p>"); out.flush(); out.close(); } }
运行效果如下:
HttpServletResponse接口
HttpServletResponse接口位于javax.servlet.http包中,它继承了javax.servlet.ServletResponse接口,此接口常用方法如下:
方法 |
说明 |
public void addCookie(Cookie cookie) |
向客户端写入Cookie信息 |
public void sendError(int sec) |
发送一个错误状态码为sec的错误相应到客户端 |
public void sendError(int sc,String msg) |
发送一个包含错误状态码以及错误信息响应到客户端,参数sc是错误状态,参数msg是错误信息 |
public void sendRedirect(String location) |
使用客户端重定向到新的URL,参数location为新的地址。 |
例如:模拟一个开发中的异常,使用throw将他抛出。
package Servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HttpServletResponseDemo extends HttpServlet { public HttpServletResponseDemo() { super(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); try{ throw new Exception("抛出异常!"); }catch(Exception e){ response.sendError(500, e.getMessage()); } out.flush(); out.close(); } }
运行结果如下:
ServletConfig接口
ServletConfig接口位于javax.servlet包中,该接口用于封装Servlet的初始化参数信息,在Servlet初始化期间被传递,每一个Servlet都有且只有一个ServletConfig对象,此接口中定义了四个方法:
方法 |
参数 |
public String getInitParameter(String name) |
此方法返回String类型名称为name的初始化参数值 |
public Enumeration getInitParameterNames() |
获取所有初始化参数名的枚举集合 |
public ServletContext getServletContext() |
用于获取Servlet上下文对象 |
public String getServletName() |
返回Servlet对象实例名 |