Servlet总结

  1. Servlet体系结构

    Servlet:接口
    |(继承)
    GenericServlet:抽象类
    |(继承)
    HttpServlet:抽象类
    |(继承)
    MyServlet extends HttpServlet

    servlet常用方法:
    	void init(ServletConfig config):初始化
    	void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
    	void destroy():销毁
    	ServletConfig getServletConfig() :获取当前servlet的配置对象
    GenericServlet常用方法:	
    	除了service方法没有显示,其他都实现了
    	空参的Init() 若我们自己想对servlet进行初始化操作,重写这个init()方法即可
    HttpServlet常用方法:
    	service做了实现,把参数强转,调用了重载的service方法
    	重载的service方法获取请求的方式,根据请求方式的不同调用相应doXxx()方法
    	doGet和doPost方法
    
  2. Servlet生命周期

    void init(ServletConfig config):初始化
    初始化方法
    执行者:服务器
    执行次数:一次
    执行时机:默认第一次访问的时候
    void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
    服务
    执行者:服务器
    执行次数:请求一次执行一次
    执行时机:请求来的时候
    void destroy():销毁
    销毁
    执行者:服务器
    执行次数:只执行一次
    执行时机:当servlet被移除的时候或者服务器正常关闭的时候

    serlvet是单实例多线程
    默认第一次访问的时候,服务器创建servlet,并调用init实现初始化操作。并调用一次service方法
    每当请求来的时候,服务器创建一个线程,调用service方法执行自己的业务逻辑
    servlet被移除的时候或者服务器正常关闭的时候,服务器调用servlet的destroy方法实现销毁操作。

  3. ServletContext

    ​ 上下文(全局管理者)
    ​ 一个项目的引用.代表了当前项目.(整个Java项目
    ​ 当项目启动的时候,服务器为每一个web项目创建一个servletcontext对象.
    ​ 当项目被移除的时候或者服务器关闭的时候servletcontext销毁
    ​ 作用:
    ​ 1.获取全局的初始化参数
    ​ 2.共享资源(xxxAttribute)
    ​ 3.获取文件资源
    ​ 4.其他操作
    ​ 获取servletcontext:
    ​ 方式1:了解
    getServletConfig().getServletContext()
    ​ 方式2:
    getServletContext()

    ​ 上述两种方式没有本质区别,因为ServletContext是所有Servlet共享的内容,可以用它进行通信。

    ​ 常用方法:
    ​ 1.了解
    String getInitParameter(String key):通过名称获取指定的参数值
    Enumeration getInitParameterNames() :获取所有的参数名称
    ​ 在根标签下有一个 context-param子标签 用来存放初始化参数

    <context-param>
    	<param-name>encoding</param-name>
    	<param-value>utf-8</param-value>
    </context-param>
    

    ​ 2.setAttribute(String key,Object value)Object getAttribute(String key),可以用此来统计登录总人数之类的信息
    ​ 3.String getRealPath(String path):获取文件部署到tomcat上的真实路径(带tomcat路径)
    getRealPath("/")😄:\javaTools\apache-tomcat-7.0.52\webapps\day09
    InputStream getResourceAsStream(String path):以流的形式返回一个文件
    ​ 4.获取文件的mime类型 大类型/小类型
    String getMimeType(String 文件名称)

  4. ServletConfig

    servlet配置对象
    作用:
    1.获取当前servlet的名称
    2.获取当前servlet的初始化参数
    3.获取全局管理者
    方法:
    String getServletName():获取当前servlet的名称(web.xml配置的servlet-name)
    String getInitParameter(String key):通过名称获取指定的参数值
    Enumeration getInitParameterNames() :获取所有的参数名称
    初始化参数是放在 web.xml文件
    servlet标签下子标签 init-param
    getServletContext():获取全局管理者

    servletconfig是由服务器创建的,在创建servlet的同时也创建了它,通过servlet的init(ServletConfig config)将config对象传递给servlet,由servlet的getServletConfig方法获取

  5. response:响应

    1. 作用:
      往浏览器写东西
      组成部分:
      响应行 响应头 响应体
      操作响应行
      格式:
      协议/版本 状态码 状态码说明
      状态码:
      1xx:已发送请求
      2xx:已完成响应
      200:正常响应
      3xx:还需浏览器进一步操作
      302:重定向 配合响应头:location
      304:读缓存
      4xx:用户操作错误
      404:用户操作错误.
      405:访问的方法不存在
      5xx:服务器错误
      500:内部异常
      常用方法:
      setStatus(int 状态码):针对于 1 2 3
      了解 :
      sendError(int 状态码):针对于 4xx和5xx
      操作响应头
      格式:key/value(value可以是多个值)
      常用的方法:
      setHeader(String key,String value):设置字符串形式的响应头
      setIntHeader(String key,int value):设值整形的响应头
      setDateHeader(String key,long value):设值时间的响应头

      addHeader(String key,String value):添加置字符串形式的响应头 之前设置过则追加,若没有设置过则设置
      addIntHeader(String key,int value):添加整形的响应头
      addDateHeader(String key,long value):添加时间的响应头
      常用的响应头:
      location:重定向
      refresh:定时刷新
      content-type:设置文件的mime类型,设置响应流的编码及告诉浏览器用什么编码打开
      content-disposition:文件下载
      重定向:
      方式1:
      response.sendRedirect("/day10/loc2");
      方式2:

      response.setStatus(302);
      response.setHeader("location","/day10/loc2");
      定时刷新:
      	方案1:设置头 refresh 
      		response.setHeader("refresh","秒数;url=跳转的路径");
      	方案2:http的meta标签
      

    ​ 操作响应体:
    ​ 页面上要展示的内容
    ​ 常用方法:
    Writer getWriter():字符流
    ServletOutputStream getOutputStream() :字节流
    ​ 自己写的东西用字符流,其他一概用字节流.

    ​ 处理响应中文乱码:
    ​ 方式1:★
    response.setContentType("text/html;charset=utf-8");
    ​ 方式2:理解
    response.setHeader("content-type", "text/html;charset=utf-8");

    ​ 注意:
    ​ 两个流互斥
    ​ 当响应完成之后,服务器会判断一下流是否已经关闭,若没有关闭,服务器会帮我们关闭.(底层使用的缓冲流)

  6. request:请求

    作用:获取浏览器发送过来的数据
    组成部分:
    请求行 请求头 请求体
    操作请求行
    格式:
    请求方式 请求资源 协议/版本
    常用方法:HttpServletRequest
    掌握
    String getMethod():获取请求方式
    String getRemoteAddr():获取ip地址
    String getContextPath() :在java中获取项目名称 (/day10)

    了解:
    getRequestURI():获取的是 从项目名到参数之前的内容 /day10/regist
    getRequestURL():获取的带协议的完整路径 http://localhost/day10/regist
    String getQueryString():get请求的所有参数 username=tom&password=123
    String getProtocol():获取协议和版本
    例如:请求行
    GET /day10/row?username=tom&password=123 HTTP/1.1

    操作请求头
    格式:key/value(value可以是多个值)
    常用方法:
    String getHeader(String key):通过key获取指定的value (一个)
    了解:
    Enumeration getHeaders(String name) :通过key获取指定的value(多个)
    Enumeration getHeaderNames() :获取所有的请求头的名称
    int getIntHeader(String key):获取整型的请求头
    long getDateHeader(String key):获取时间的请求头

    重要的请求头:
    user-agent:浏览器内核 msie firefox chrome
    referer:页面从那里来 防盗链

    操作请求参数 ★
    username=tom&password=123&hobby=drink&hobby=sleep
    常用方法:
    String getParameter(String key):获取一个值
    String[] getParameterValues(String key):通过一个key获取多个值
    Map<String,String[]> getParameterMap():获取所有的参数名称和值

    username:tom
    ---------values---------
    hobby:[drink, sleep]
    =map===
    username::[tom]
    password::[123]
    hobby::[drink, sleep]

    请求的中文乱码:
    对于get请求:参数追加到地址栏,会使用utf-8编码,服务器(tomcat7)接受到请求之后,使用iso-8859-1解码,所以会出现乱码
    对于post请求,参数是放在请求体中,服务器获取请求体的时候使用iso-8859-1解码,也会出现乱码
    通用的方法:
    new String(参数.getBytes("iso-8859-1"),"utf-8");
    针对于post请求来说:只需要将请求流的编码设置成utf-8即可
    request.setCharacterEncoding("utf-8");

    请求转发:
    request.getRequestDispatcher("内部路径").forward(request,response);

  7. 会话技术

    会话技术
    当用户打开浏览器的时候,访问不同的资源,知道用户将浏览器关闭,可以认为这是一次会话.
    作用:
    因为http协议是一个无状态的协议,它记录不论上次访问的内容.用户在访问过程中难免会产生一些数据,
    通过会话技术就可以将起保存起来.
    例如:
    用户登录
    验证码
    购物车
    访问记录

    分类:
    cookie:浏览器端会话技术
    session:服务器端会话技术

    cookie:
    小饼干 小甜点
    cookie是由服务器生成,通过response将cookie写回浏览器(set-cookie),保留在浏览器上,
    下一次访问,浏览器根据一定的规则携带不同的cookie(通过request的头 cookie),我们服务器就可以接受cookie
    cookie的api:
    new Cookie(String key,String value)
    写回浏览器:
    response.addCookie(Cookie c)
    获取cookie:
    Cookie[] request.getCookies()
    cookie的常用方法:
    getName():获取cookie的key(名称)
    getValue:获取指定cookie的值

    setMaxAge(int 秒):设置cookie在浏览器端存活时间 以秒为单位
    ​ 若设置成 0:删除该cookie(前提必须路径一致)
    setPath(String path):设置cookie的路径.
    ​ 当我们访问的路径中包含此cookie的path,则携带
    ​ 默认路径:
    ​ 访问serlvet的路径,从"/项目名称"开始,到最后一个"/“结束
    ​ 例如:
    ​ 访问的serlvet路径:
    ​ /day11/a/b/hello
    ​ 默认路径为:
    ​ /day11/a/b
    ​ 手动设置路径:以”/项目名"开始,以"/"结尾;

    session:
    服务器端会话技术.

    (主要是由服务器设置的,对于tomcat容器来说,当服务端的session被创建时,Response中自动添加了一个Cookie:JSESSIONID:xxxx,再后续的请求中,浏览器也是自动的带上了这个Cookie,服务端根据Cookie中的JSESSIONID取到了对应的session。这验证了一开始的说法,客户端服务端是通过JSESSIONID进行交互的,并且,添加和携带key为JSESSIONID的Cookie都是tomcat和浏览器自动帮助我们完成的,这很关键。)
    当我们第一次访问的服务器的时候,服务器获取id,
    如果能获取id
    要拿着这个id去服务器中查找有无此session
    若查找到了:直接拿过来时候,将数据保存,需要将当前session的id返回给浏览器
    若查找不到:创建一个session,将你的数据保存到这个session中,将当前session的id返回给浏览器
    如果不能获取id
    创建一个session,将你的数据保存到这个session中,将当前session的id返回给浏览器获取一个session:
    HttpSession request.getSession()

    ​ 域对象:
    xxxAttribute
    ​ 生命周期:
    ​ 创建:第一次调用request.getSession()创建
    ​ 销毁:
    ​ 服务器非正常关闭
    ​ session超时
    ​ 默认时间超时:30分钟 web.xml有配置
    ​ 手动设置超时:setMaxInactiveInterval(int 秒) 了解
    ​ 手动干掉session
    ​ ★session.invalidate()
    ​ 存放的私有的数据.

  8. 四大域对象总结

    1. ServletContext

      1. 生命周期:web应用被加入容器时,创建代表整个web应用的ServletContext对象,当服务器关闭或者该web应用被移除时,ServletContext被销毁

      2. 作用范围:整个web应用,所有的servlet都能知晓他

      3. 应用:由于一个web应用中的所有Servlet共享同一个ServletContext对象:因此Servlet对象之间可以通过ServletContext来是实现通讯。ServletContext对象通常也被称为context域对象。

        • 多个Servlet通过ServletContext对象实现数据共享。

        • 获取web应用的初始化参数(getInitParameter)。

        • 用ServletContext实现请求转发(this.getServletContext().getRequestDispatcher().forward())。

        • 利用ServletContext对象读取资源文件。
          servletContext.getRealPath("/xx.properties")servletContext.getResourceAsStream()
          另外,顺便说一下,如果要在非servlet中获取资源文件,无法取得ServletContext对象,这时候就得通过类加载器ClassLoader来getResourceAsStream(),此方法通过类加载器将资源文件直接加载到内存中,有更新延迟的问题,适合小文件的读取,对于大资源文件,将会占用较大的内存。还有,通过classLoader也可以获取资源文件路径,具体通过ClassLoader.getResource("/xx.properties").getPath(),没有更新延迟问题。

    2. ServletRequest

      1. 生命周期:在service方法前由服务器创建,并作为参数传入service方法内,直到整个请求结束,ServletRequest生命周期才结束。

      2. 作用范围:整个请求链(包括请求转发)

      3. 作用:

        • 在整个请求链中共享数据,主要可通过getAttribute、setAttribute将数据带到jsp页面中进行显示。

        • 获得客户端信息,可通过getRequestURL()、getRequestURI()、getQueryString()、getPathInfo()、getRemoteAddr()、getRemoteHost()、getRemotePort()、getLocalAddr()、getLocalName()。

        • 获得客户机请求头,getHeader(String s)、getHeaders(String s)、getHeaderNames()。

        • 获得客户机请求参数(客户端提交的数据):getParameter()等。

    3. HttpSession

      1. 生命周期:

        在第一次调用request.getSession()方法时,服务器会检查是否已经有对应的session,如果没有就在内存中创建一个session并返回。
        (1)当一段时间内session没有被使用(默认为30分钟),则服务器会销毁该session。
        (2)如果服务器非正常关闭,没有到期的session也会跟着销毁。
        (3)如果调用session提供的invalidate(),可以立即销毁session。
        用户打开浏览器访问,创建session(开始),session超时或者被声明失效,该对象生命周期结束;

      2. 作用范围:一次会话(取决于服务端)

      3. 应用:短时间内访问无需重新登录,长时间则需要设置cookie

    4. PageContext

      1. 生命周期:当对JSP的请求开始时创建,当响应结束时销毁。
      2. 作用域:仅当前JSP页面
  9. Listener监听器接口

    作用:监听三大域对象:ServletContext、ServletRequest、HttpSession

    监听内容:监听这三个对象的创建和销毁、属性变化、监听session中javabean的状态

    监听三个对象的创建和销毁
    ServletContextListener
    ServletRequestListener
    HttpSessionListener
    监听三个对象属性的变化
    ServletContextAttributeListener
    ServletRequestAttributeListener
    HttpSessionAttributeListener
    监听session中javabean的状态

    • HttpSessionActivationListener(钝化和活化)

      当服务器正常关闭时,还存活着的session(在设置时间内没有销毁) 会随着服务器的关闭被以文件(“SESSIONS.ser”)的形式存储在tomcat 的work 目录下,这个过程叫做Session 的钝化。

      当服务器再次正常开启时,服务器会找到之前的“SESSIONS.ser” 文件,从中恢复之前保存起来的Session 对象,这个过程叫做Session的活化。

      想要随着Session 被钝化、活化的对象它的类必须实现Serializable 接口

    • HttpSessionBindingListener(绑定和解绑)

      检测javabean是否添加到session或者从session中移除

    这两个接口需要javabean自己实现

  10. Filter过滤器

    作用:服务器通过URL访问相应的资源的时候,过滤请求和响应

    应用:自动登录、统一编码、过滤关键字等

    生命周期:单实例多线程,在服务器启动的时候创建,并调用init方法,对每个请求创建一个线程,根据XML中的路径调用不同filter内的doFilter方法,当Filter被移除或者服务器正常关闭时调用destroy方法,生命周期结束

    FilterChain过滤链:通过chain的dofilter方法,可以将请求放行到下一个过滤器,直到最后一个过滤器放行才可以访问到servlet或者jsp,通过chain.doFilter()放行方法

    filterConfig:过滤器的配置对象
    作用:获取全局管理者、获取当前filter的名称、获取当前filter的初始化参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值