• 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对象



  • 相关阅读:
    BZOJ1901(主席树+树状数组 实现“动态主席树”)
    BZOJ2460: [BeiJing2011]元素(线性基+贪心)
    BZOJ4448: [Scoi2015]情报传递(主席树)
    详解mysql int类型的长度值问题【转】
    数据库设计三范式【转】
    aliyun阿里云Maven仓库地址——加速你的maven构建
    VMware 设备VMnet0 上的网桥暂时关闭。此虚拟机无法与主机或网格中的其他计算机通信【转】
    Maven项目中的pom.xml详解【转】
    直接启动tomcat时为tomcat指定JDK
    Spring自动注入properties文件
  • 原文地址:https://www.cnblogs.com/stydejava/p/13855684.html
Copyright © 2020-2023  润新知