zoukankan      html  css  js  c++  java
  • servlet

    servlet是运行在服务器端的小程序,Servlet一词由Java Servlet Applet而来。Servlet是一个独立于平台的Java类,实际就是按照Servlet规范编写的一个Java类。Servlet被编译成为平台独立的字节码文件,可以被Web服务器加载和运行,可以生成动态的web页面。

    特点

    1、简单、实用的API方法

    2、高效率:N个并发的请求,Servlet将启动N个线程处理,但只创建一个Servlet实例。

    3、功能强大

    4、可移植性

    Servlet的开发和执行步骤

    1、编写一个Java类使其继承HttpServlet类并覆盖doGet和doPost方法。

    2、在配置文件web.xml中配置Servlet

    <servlet>
    <servlet-name>servlet名</servlet-name>
    <servlet-class>servlet的class全名</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>servlet名</servlet-name>
    <url-pattern>Servlet的访问路径</url-pattern>
    </servlet-mapping>

    3、项目部署到服务器,并启动服务器

    4、请求servlet:地址栏URL、超链接、表单

    Servlet API

    Servlet API包含两个包:javax.servlet和javax.servlet.http包。javax.servlet包中定义的类和接口时独立于协议的。

    1、Servlet接口

    javax.servlet.Servlet接口是任何一个Servlet都要直接或间接实现的。

    方法 说明
    public void init(ServletConfig config) Servlet实例化后,Servlet容器调用此方法完成初始化工作
    public ServletConfig getServletConfig() 获取Servlet对象的配置信息,返回ServletConfig对象
    public void service(ServletRequest request,ServletResponse response) 处理request对象封装的客户端请求,并使用response返回请求结果
    public String getServletInfo() 返回描述Servlet的一个字符串
    public void destory() 当Servlet将要卸载时由Servlet引擎调用,以释放资源

    2、ServletConfig接口

    在ServletConfig对象中包含Servlet的初始化参数信息。

    方法 说明
    public String getServletName() 该方法返回一个Servlet实例的名称,该名称由服务器管理员提供
    public ServletContext getServletContext() 返回一个ServletContext对象的引用
    public String getInitParameter(String name) 返回一个由参数name决定的初始化变量的值,如果该变量不存在,返回null
    public Enumeration getInitParameterNames() 返回一个存储所有初始化变量的枚举函数,如果Servlet没有初始化变量,返回一个空枚举函数

    3、GenericServlet类

    GenericServlet类是一种与协议无关的Servlet,它直接实现了Servlet接口,是一个抽象类。该类实现了Servlet接口中除了service()方法之外的所有抽象方法,但是是默认实现,其还实现了ServletConfig接口。

    4、HttpServlet类

    HttpServlet类继承了GenericServlet类,也是一个抽象类。HttpServlet类为Servlet接口提供了HTTP相关的通用实现。

    5、ServletRequest和ServletResponse接口

    Servlet由Servlet容器(Web服务器)来管理,当客户请求到来时,容器创建一个ServletRequest对象,封装请求数据,同时创建一个ServletResponse对象,封装响应数据。这两个对象将被容器作为service()方法的参数传递给Servlet,Servlet利用ServletRequest对象获取客户端发来的请求数据,利用ServletResponse对象发送响应数据。

    ServletRequest

    方法 说明
    public Object getAttribute(String name) 返回请求范围对象内以name为名字的属性的值,如果该属性不存在,这个方法将返回null
    public void setAttribute(String name,Object o) 将对象o保存在请求范围对象内名字为name的属性,如果第二个参数o为null,那么相当于调用removeAttribute(name)
    public void removeAttribute(String) 移除请求范围内名字为name的属性
    public String getCharacterEncoding() 返回请求正文使用的字符编码的名字,如果请求没有指定字符编码,这个方法将返回null
    public String getContentType() 返回请求正文的MIME类型。如果类型不可知,这个方法将返回null
    public String getParameter(String name) 返回请求范围对象中name属性的值。如果name参数有多个值,那么这个方法将返回值列表中的第一个值。如果没有则为null
    public String[] getParameterValues(String name) 返回请求范围对象中name参数所有的值,如果这个参数在请求中并不存在,这个方法将返回null
    public RequestDispatcher getRequestDispatcher(String path) 返回指定资源名的RequestDispatcher对象,作为path所定位的资源的封装

    ServletResponse

    方法 说明
    public String getCharacterEncoding() 返回响应使用字符解码的名字,除非显示设置,否则为ISO-8859-1
    public OutputStream getOutputStream() 返回用于将返回的二进制输出写入客户端的流,此方法和getWriter()方法二者只能调用其一
    public Writer getWriter() 返回用于将返回的文本输出写入客户端的一个字符写入器,此方法和getOutputSteam()二者只能调用其一
    public void setContentType(String type) 设置字符编码方式和内容类型

    6、HttpServletRequest和HttpServletResponse接口

    HttpServletRequest是专用于HTTP的ServletRequest子接口。

    方法 说明
    public Cookie[] getCookies() 返回一个数组,该数组包含这个请求中当前的所有cookie。如果这个请求中没有cookie,则返回一个空数组
    public String getMethod() 返回这个请求使用的HTTP请求方式(GET、POST、PUT)
    public String getRequestedSessionId() 返回这个请求相应的session id。如果由于某种原因客户端提供的session id是无效的,这个session id 将于当前session id中的session id不同,与此同时,将建立一个新的session
    public HttpSession getSession() 返回与这个请求关联的当前有效的session。在没有session与这个请求关联的情况下,将会新建一个session
    public HttpSession getSession(boolean create) 返回与这个请求关联的当前有效的。在没有与这个请求关联的情况下,如果参数create为真时将新建一个session;如果参数create为假时,这个方法会返回空值。为了确保session能够被完全维持,servlet开发者必须在响应被提交之前调用该方法

    HttpServletResponse子接口

    方法 说明
    public void addCookie(Cookie cookie) 将一个Cookie加入到响应中
    public void senRedirect(String location) 重定向到某一web组件中
    public void sendError(int status) 设置响应状态码为指定值(可选的状态信息)

    7、ServletContext接口

    一个ServletContext接口对象表示一个web应用程序的上下文,运行在Java虚拟机中的每个web应用程序都有一个与之相关的servlet上下文。

    方法 说明
    public Object getAttribute(String name) 返回Servlet上下文中名字为name的对象。名字为name的对象是全局对象,因为它们可以被同一Servlet在另外某一任意时刻访问,或上下文中任意其它的Servlet访问
    public void setAttribute(String name, Object obj) 将对象obj保存在Servlet上下文中,名字为name
    public getInitParameter(String name) 返回指定上下文范围的初始化参数值

    8、HttpSession接口

    HttpSession接口被Servlet容器用来实现在HTTP客户端和HTTP会话两者的关联。

    方法 说明
    public long getCreationTime() 返回建立Session的时间,这个时间表示为自1970年1月1日0时0分0秒0毫秒GMT至创建经历的毫秒数
    public String getId() 返回分配给这个Session的标识符。一个HTTP session的标识符是一个由服务器来创建和维持的唯一的字符串
    public long getLastAccessedTime() 返回客户端最后一次发出与这个session有关的请求的时间,如果这个session是新建立的,返回-1.这个世界表示为自1970年1月1日0时0分0秒0毫秒GMT至最后一次访问所经历的毫秒数
    public int getMaxInactiveInterval() 从最后一次与客户端发生交互开始计算,返回会话存活的最大秒数
    public void setMaxInactiveInterval(int seconds) 从最后一次与客户端发生交互开始计算,设置会话存活的最大秒数
    public Object getAttribute(String name) 返回会话中名字为name的对象,如果不存在,则返回null
    public void setAttribute(String name,Object value) 将对象value保存在会话中,指定名字为name
    public void removeAttribute(String name) 删除会话中此前保存的名称为name的对象

     Servlet的生命周期

    1、Servlet类加载:Servlet容器在Servlet被第一次请求时执行,该阶段仅执行一次。主要操作包括将Servlet对应的class文件载入内存。

    2、实例化Servlet:Servlet容器创建ServletConfig对象,其包含Servlet的初始化配置信息,此外Servlet容器还会使得ServletConfig对象与当前Web应用的ServletContext对象关联。该阶段仅执行一次。

    3、Servlet提供服务:该阶段客户端请求一次执行一次。在这个阶段Servlet可以随时响应客户端的请求。当Servlet容器接到访问特定Servlet请求时,Servlet容器会创建针对这个请求的ServletRequest和ServletResponse对象,ServletRequest对象用来封装请求信息,ServletResponse对象用来生成响应信息,然后调用service(ServletRequest request,ServletResponse response)方法传值。经过Servlet对象的doGet或doPost方法处理后,处理结果封装在ServletResponse对象中返回。当Servlet容器把Servlet生成的响应结果发送到客户端后,Servlet容器会销毁ServletRequest和ServletResponse对象。

    4、销毁Servlet:该阶段执行一次。当web应用被终止时,Servlet容器会先调用Web应用中所有的Servlet对象的destroy()方法,然后再销毁Servlet对象Servlet对象。此外,容器还会销毁与Servlet对象关联的ServletConfig对象。在destroy()方法的实现中,可以编写代码释放Servlet所占用的资源,例如,关闭文件输入输出流、关闭与数据库的连接等。

    Servlet中的跳转

    request.getRequestDispatcher("转发的目标文件路径").forward(request,response);
    response.sendRedict("重定向的目标文件路径");

    1、forward(request,response)必须添加,否则该语句无效

    2、转发可以携带request和response,是在服务端直接完成的,返回响应给浏览器后,浏览器的地址栏URL是发生转发的页面而非转发后的页面。

    3、重定向是服务端返回给浏览器3xx状态的响应,浏览器需要重新对响应中的URL进行请求,是全新的请求——响应过程。

  • 相关阅读:
    HttpClient 学习整理
    matlab练习程序(感知哈希对比图片)
    matlab练习程序(Floyd–Steinberg dithering)
    matlab练习程序(使用DCT图像增强)
    Win控制台(多线程)
    我的第一个lisp程序
    matlab练习程序(Harris角点检测)
    matlab练习程序(PCA)
    lisp(判断回文数)
    matlab练习程序(透视变换)
  • 原文地址:https://www.cnblogs.com/blunFan/p/11634855.html
Copyright © 2011-2022 走看看