Java Web之Servlet

什么是Servlet

       Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
       狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

创建Servlet

1.新建一个类实现Servlet接口

  public class Test implements Servlet {
            @Override
            public void init(ServletConfig servletConfig) throws ServletException {
            }
            @Override
            public ServletConfig getServletConfig() {
                return null;
            }
            @Override
            public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            }
            @Override
            public String getServletInfo() {
                return null;
            }
            @Override
            public void destroy() {
            }
        }

2.在web.xml文件配置Servlet

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>test</servlet-name>
    <servlet-class>cn.lyx.web.servlet.Test/servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>test</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

Servlet3.0支持注解配置

     @WebServlet(value = "test")
      public class Test implements Servlet {
                @Override
                public void init(ServletConfig servletConfig) throws ServletException {
                }
                @Override
                public ServletConfig getServletConfig() {
                    return null;
                }
                @Override
                public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
                }
                @Override
                public String getServletInfo() {
                    return null;
                }
                @Override
                public void destroy() {
                }
            }

init()方法:Servlet被创建时调用
Servlet创建时机:在<servlet>标签下配置

  1. 第一次被访问时,创建
    <load-on-startup>的值为负数
  2. 在服务器启动时,创建
    <load-on-startup>的值为0或正整数
  • Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的

service()方法:提供服务,执行多次
destroy()方法:被销毁时执行destroy方法,只执行一次

  • Servlet被销毁时执行。服务器关闭时,Servlet被销毁
  • 只有服务器正常关闭时,才会执行destroy方法。
  • destroy方法在Servlet被销毁之前执行,一般用于释放资源

Servlet体系结构

在这里插入图片描述

  • GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可
  • HttpServlet:对http协议的一种封装,简化操作
    1. 定义类继承HttpServlet
    2. 复写doGet/doPost方法

Request:

request对象和response对象的原理

  • . request和response对象是由服务器创建的。我们来使用它们
  • . request对象是来获取请求消息,response对象是来设置响应消息

request对象继承体系结构:
在这里插入图片描述
request功能:
1.获取请求消息数据

  1. 获取请求行数据
  • . 获取请求方式 :GET
    String getMethod()

  • . 获取虚拟目录:
    String getContextPath()

  • . 获取Servlet路径:
    String getServletPath()

  • . 获取get方式请求参数:
    String getQueryString()

  • . 获取请求URI:
    String getRequestURI()
    StringBuffer getRequestURL()

  • . 获取协议及版本:HTTP/1.1
    String getProtocol()

  • . 获取客户机的IP地址:
    String getRemoteAddr()

  1. 获取请求头数据
  • String getHeader(String name):通过请求头的名称获取请求头的值
  • Enumeration getHeaderNames():获取所有的请求头名称
  1. 获取请求体数据:
    步骤:
    获取流对象
  • BufferedReader getReader():获取字符输入流,只能操作字符数据
  • ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据
    再从流对象中拿数据
    其他功能:
    1. 获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数
    1. String getParameter(String name):根据参数名称获取参数值
    2. String[] getParameterValues(String name):根据参数名称获取参数值的数组
    3. Enumeration getParameterNames():获取所有请求的参数名称
    4. Map<String,String[]> getParameterMap():获取所有参数的map集合
    请求转发:一种在服务器内部的资源跳转方式
    步骤:
    1. 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
    2. 使用RequestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response)
    2. 特点:
    1. 浏览器地址栏路径不发生变化
    2. 只能转发到当前服务器内部资源中。
    3. 转发是一次请求
    3. 共享数据:
    request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
    3. 方法:
    1. void setAttribute(String name,Object obj):存储数据
    2. Object getAttitude(String name):通过键获取值
    3. void removeAttribute(String name):通过键移除键值对

Response对象

功能:设置响应消息
1. 设置响应行
2. 设置状态码:setStatus(int sc)
2. 设置响应头:setHeader(String name, String value)
3. 设置响应体:
使用步骤:

  1. 获取输出流
  • 字符输出流:PrintWriter getWriter()
  • 字节输出流:ServletOutputStream getOutputStream()
  1. 使用输出流,将数据输出到客户端浏览器

  2. 重定向:资源跳转的方式

     	* 代码实现
     		1.设置状态码为302
             response.setStatus(302);
             2.设置响应头location
     response.setHeader("location","/test1");
             简单的重定向方法
             response.sendRedirect("/test1");
    
  • 重定向的特点:redirect
    1. 地址栏发生变化
    2. 重定向可以访问其他站点(服务器)的资源
    3. 重定向是两次请求。不能使用request对象来共享数据
  • 转发的特点:forward
    1. 转发地址栏路径不变
    2. 转发只能访问当前服务器下的资源
    3. 转发是一次请求,可以使用request对象来共享数据

ServletContext对象:

概念:代表整个web应用,可以和程序的容器(服务器)来通信
获取:

  • . 通过request对象获取
    request.getServletContext();
  • . 通过HttpServlet获取
    this.getServletContext();

功能:
1. 获取MIME类型:
MIME类型:在互联网通信过程中定义的一种文件数据类型
格式: 大类型/小类型 text/html image/jpeg
获取:String getMimeType(String file)
2. 域对象:共享数据

  • . setAttribute(String name,Object value)
  • . getAttribute(String name)
  • . removeAttribute(String name)
  • ServletContext对象范围:所有用户所有请求的数据

3.获取文件的真实(服务器)路径
方法:

  • String getRealPath(String path)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值