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对象实例名 |