Servlet

Servlet

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 {
   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //获得资源真实路径
       String realPath = this.getServletContext().getRealPath("WEB-INF/img/飘.jpg");
       System.out.println(realPath);
       //创建一个输出流
       FileInputStream fis = new FileInputStream(realPath);
       //获取文件名
       String name = realPath.substring(realPath.indexOf("/") + 1);


       //创建输入流
       ServletOutputStream os = resp.getOutputStream();

       //告诉客户端这是下载文件
       resp.setHeader("Content-Disposition","attachment;filename="+name);
       int len=0;
       byte[] buff = new byte[1024];
       while((len=fis.read(buff))!=0){
           os.write(buff,0,len);

           fis.close();
           os.close();
      }
  }

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容器控制:主要分为启动阶段,运行阶段,终止阶段

启动阶段

  1. 把web.xml文件加载进内存

  2. 为JavaWeb应用创建ServletContext对象

  3. Filter初始化

  4. 对需要初始化的servlet进行初始化

运行阶段

响应客户端的请求

终止阶段

  1. 销毁JavaWeb应用处于运行状态的servlet

  2. 销毁JavaWeb处于运行状态的Filter

  3. 销毁JavaWeb相关的对象,例如ServletContext对象

Servlet的生命周期

Servlet作为JavaWeb应用最核心的组件,生命周期也是由Servlet容器控制的。 也可以分为三部分:

初始化阶段

  1. Servlet容器加载Servle类,把.class文件加载进内存

  2. Servlet容器创建ServletConfig对象

  3. Servlet容器创建Servlet对象

  4. Servlet容器调用initi(ServletConfig config)方法

运行阶段

  1. 客户端发出特定的Servle请求

  2. Servlet容器接收请求,并解析

  3. Servlet容器创建ServletRequest对象,创建ServletReponse对象

  4. Servlet容器调用service()服务方法,ServletRequest,ServletReponse是参数

  5. Servlet从ServletRequest对象中获得客户请求信息

  6. Servlet利用ServletResponse对象生成响应结果

  7. Servelt把响应结果发送给客户

销毁阶段

  1. Servlet调用Web应用中Servlet对象的的destroy方法,

  2. 销毁这些Servlet对象

  3. 销毁与Servlet对象有关联的ServletConfig对象



posted @ 2020-10-22 00:09  神也没办法  阅读(106)  评论(0编辑  收藏  举报