JavaWeb Servlet基础知识

JavaWeb Servlet基础知识

  • 什么是servlet
  • Tomcat与Servlet
  • servlet生命周期
  • HttpServlet
  • ServletConfig对象
  • ServletContext对象
  • request对象
  • response对象


什么是servlet

处理请求和发送响应过程的程序,为解决实现动态页面而衍生


Tomcat与Servlet

Tomcat是Web应用服务器,一个Servlet/JSP容器。负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户端


servlet生命周期

  1. 初始化init()
    服务器启动时或第一次请求该servlet时会用该方法初始化一个Servlet对象
    • load-on-startup=0(默认)
      第一次请求该servlet时加载servlet,执行init()
    • load-on-startup=1
      服务器启动时就加载servlet,执行init()
  2. 处理客户端请求service()
    该servlet对象去处理所有客户端请求,在此方法中执行。有两种请求方式,GET和POST
  3. 销毁destroy()
    服务器关闭后,执行该方法,销毁这个servlet对象,将所有servlet卸载

HttpServlet

HttpServlet继承GenericServlet,GenericServlet实现了Servlet接口和ServletConfig接口,所以调用ServletConfig的方法时不需要先获取ServletConfig,可以直接调用,因为在GenericServlet中已经帮我们获取了这些数据


ServletConfig对象

  • 获取途径getServletConfig();
  • 功能
    • getServletName()
      获取servlet的名称,即servlet-name
    • getServletContext()
      获取ServletContext对象
    • getInitParameter(String)
      获取在servlet中初始化参数的值,传入的参数是key,这只是在该servlet下的初始化参数
    • getInitParameterNames()
      获取在Servlet中所有初始化参数的key值。可以通过key值来找到相应的value值。返回的是枚举类型Enumeration

ServletContext对象

  • 获取途径
    两种读是一样的,ServletContext对象被创建时,将会调用ServletContextListener接口中的contextInitialized()方法
    • getServletContext()
    • getServletConfig().getServletContext()
  • 功能
    tomcat为每个web项目都创建一个ServletContext实例,tomcat在启动时创建,服务器关闭时销毁。ServletContext实例在一个web项目中共享数据,即一个web项目只存在一个ServletContext实例,每个Servlet读可以访问到它
    • web项目中共享数据
      • getAttribute(String name)
        在web项目范围内存放内容,项目中所有的servlet都能访问
      • setAttribute(String name, Object obj)
        通过指定名称获得内容
      • removeAttribute(String name)
        通过指定名称移除内容
    • web项目初始化参数
      全局初始化参数,每个Servlet中都能获取到该初始化值
      • getInitParameter(String)
        通过指定名称获取初始化值
      • getInitParameterNames()
        获取所有初始化参数的key值。可以通过key值来找到相应的value值。返回的是枚举类型Enumeration
    • 获取web项目资源
      • web项目下指定资源的路径
        getRealPath("/WEB-INF/web.xml")
      • web项目下指定资源的内容
        返回的是字节输入流InputStream
        getResourceAsStream(java.lang.String path)
      • 指定路径下的所有内容
        getResourcePaths(java.lang.String path)

request对象

请求对象,包含:请求行、请求头、请求体

  • 获取请求行内容
    • 获取统一资源标记符:getRequestURI()
    • 统一资源定位符:getRequestURL()
    • 协议和版本:getProtocol()
    • 协议:getScheme()
    • 主机/域名:getServerName()
    • 端口:getServerPort()
    • 发布到tomacat下的项目名:getContextPath()
    • servlet路径:getServletPath()
    • 请求参数:getQueryString()
    • 远程主机IP地址:getRemoteAddr()
  • 获取请求头
    • 获得指定头内容
      String getHeader(java.lang.String name)
    • 获得指定头内容Date
      long getDateHeader(java.lang.String name)
      自1970年1月1日0点0分0秒算起的以毫秒为单位的时间值
    • 获得指定头内容int
      int getIntHeader(java.lang.String name)
    • 获得指定名称所有内容
      Enumeration getHeaders(java.lang.String name)
  • 获取请求体
    获得get或post请求的参数
    • 获得指定名称的一个请求参数值
      String request.getParameter(String)
    • 获得指定名称的所有请求参数值
      String[] request.getParameterValues(String)
    • 获得所有的请求参数
      Map request.getParameterMap()
  • 封装在request域中的数据
    • request.setAttribute()
      将数据封装保存到request域中
    • request.getAttribute()
      返回在request.setAttribute()封装的域中存在的数据
  • 请求转发/包含
    浏览器只发起一次请求,请求在服务器内部被处理,可以被多次转发传递
    • 转发
      request.getRequestDispatcher(String path).forward(req,resp);
      转发后跳转的页面路径是以web项目根开始,因为请求转发只局限与在同一个web项目下使用,所以都是从web项目根下开始
    • 包含
      可以实现将多个资源的数据合并后输出,可以将多个输出内容中相同的部分提取出来方便开发
      request.getRequestDispatcher(String path).include(req,resp);
    • 特点
      • 浏览器中url不会改变
      • 只能在一个web项目内进行
      • 多个Servlet之间使用的是同一个请求对象和响应对象

response对象

  • 设置指定的头
    • response.setHeader(java.lang.String name, java.lang.String value)
    • setIntHeader()
    • addHeader()
    • addIntHeader()
  • 发送状态码方法
    • setStatus(int status)
    • setError(int status)
  • 重定向
    页面跳转,浏览器会发起两次请求。浏览器第一次请求后服务器响应发送302状态码表示要重定向,并在location字段中设置重定向地址,浏览器接收到后重新发起第二次请求
    • 两种方法
      • 手动
        response.setStatus(302);  //状态码302就代表重定向
        response.setHeader("location","path路径");
      • 直接调用封装好的
        response.sendRedirect("path路径");
    • path路径
      重定向不局限于一个项目内
      • path路径以" / "开头即重新开始定位,可以访问另一个Web项目
      • path路径不以" / "开始则默认访问该web项目下的servlet,可以省略项目名
    • 特点
      • 浏览器发起两次请求,第二次请求对象与第一次不是同一个
      • 重定向的第二次请求一定是GET请求
      • 请求后浏览器中url变成转发后的url

参考:https://www.cnblogs.com/whgk/p/6399262.html

你可能感兴趣的:(#,JavaWeb,javaweb)