servlet是JavaWeb应用的核心组件,servlet对象又servlet容器创建。
Servlet API
servlet api 主要有两个组成javax.servlet和javax.servlet.http.
javax.servlet包中定义了servlet接口及相关的通用接口和类。
javax.servlet.http包中定义了HTTP协议相关的HttpServlet类,HttpServletResponse类,HttpServletRequest类。
javax.servlet.Servlet接口是所有Servlet类必须实现的接口。javax.servlet.GenericServlet抽象类实现了Servlet接口。javax.servlet.http.HttpServlet是GenericServlet子类。
GenericServlet抽象类与任何网络应用层协议无关,HttpServlet类为Servlet接口提供了与Http协议相关的通用实现。
ServletRequest接口
常见的:
-
setAttribute(String name, Object object) 保存一个属性
-
getAttribute(String name) 返回请求的属性
-
removeAttribute(String name) 删除一个属性
HttpServletRequest接口
servlet容器把Http请求解析,包装成HttpServletRequest对象,Servlet只需要调用getxxxx()方法,就能够读取HTTP请求中的各种数据。
getContextPath()
getCookies()
getHeader(String name )
getHeaderNames()
getMethod()
getQueryString()
ServletResponse接口
常见:
setCharacterEncoding(String charset):响应正文的字符编码。utf-8
setContextType(String Type):设置响应正文的MIME类型
(MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。)
getOutputStream()用于输出二进制数据
getWriter()用于输出字符串正文数据
注:在Tomcat的实现中,如果Servlet的service()方法没调用ServletOutputStream()和PrintWriter()的close()的方法,Tomcat也会关闭,确保数据提交。
HttpServletResponse接口
常见:
setHeader(String name,String value)
setStatus(int sc)设置响应状态码
addCookie(Cookie cookie)加入Cookie
设置HTTP响应编码
//方法1
resonse.setContentType("text/html;charset=utf-8");
//方法2
reponse.setContentType("text/html");
reponse.setCharacterEncoding("utf-8");
//方法3
reponse.setHeader("Content-type","text/html;charset=utf-8");
下载图片
public class downloadServlet extends HttpServlet {
ServletConfig接口
-
getInitParameter(String name)
-
getInitParameterNames()
-
getServletContext():返回一个ServletContext对象
-
getServletName()
ServletContext接口
ServletContext,是Servlet与Servlet容器之间直接通信的接口。Servlet容器在启动一个Web应用时,会为它创建一个ServletContext对象。每一个web应用都有唯一的ServletContext对象,Servlet对象可以通过ServletContext访问容器中的各种资源。
-
setAttribute(String name, Object object) 保存一个属性
-
getAttribute(String name) 返回请求的属性
-
removeAttribute(String name) 删除一个属性
-
getContextPath();当前web应用的URL入口
-
getRequestDispatcher(String path)
-
getContext(String uripath)
-
getRealPath(String path)
-
getResourceAsStream(String path)
注:
ServletConfig接口中定义了getServletContext()方法
GenericServlet类实现了ServletConfig接口
HttpServlet是GenericServlet子类
HttpServlet子类可以直接调getServletContext()方法
JavaWeb应用的生命周期
JavaWeb应用的生命周期由Servlet容器控制:主要分为启动阶段,运行阶段,终止阶段
启动阶段
-
把web.xml文件加载进内存
-
为JavaWeb应用创建ServletContext对象
-
Filter初始化
-
对需要初始化的servlet进行初始化
运行阶段
响应客户端的请求
终止阶段
-
销毁JavaWeb应用处于运行状态的servlet
-
销毁JavaWeb处于运行状态的Filter
-
销毁JavaWeb相关的对象,例如ServletContext对象
Servlet的生命周期
Servlet作为JavaWeb应用最核心的组件,生命周期也是由Servlet容器控制的。 也可以分为三部分:
初始化阶段
-
Servlet容器加载Servle类,把.class文件加载进内存
-
Servlet容器创建ServletConfig对象
-
Servlet容器创建Servlet对象
-
Servlet容器调用initi(ServletConfig config)方法
-
客户端发出特定的Servle请求
-
Servlet容器接收请求,并解析
-
Servlet容器创建ServletRequest对象,创建ServletReponse对象
-
Servlet容器调用service()服务方法,ServletRequest,ServletReponse是参数
-
Servlet从ServletRequest对象中获得客户请求信息
-
Servlet利用ServletResponse对象生成响应结果
-
Servelt把响应结果发送给客户
销毁阶段
-
Servlet调用Web应用中Servlet对象的的destroy方法,
-
销毁这些Servlet对象
-
销毁与Servlet对象有关联的ServletConfig对象