• JAVASE知识点梳理


    Servlet对象

    概念

      运行在服务器端的,已多线程的方式处理客户端请求的小程序。Servlet API会自动处理提交上来的值的解析和解码

    Tomcat

      Web容器,也称为servlet引擎(容器)。servlet容器包含并管理着servlet对象的生命周期。提供处理request并发送response的网络服务。Servlet通过tomcat提供的request/response范式与web客户端实现交互。所有的方法调用都通过Tomcat操作servlet对象来完成。

    请求方式介绍

    1. get默认的提交方式,通过超链接(a)、js或直接输入地址等方法提交均为getGet方式提交的数据会拼接在跳转路径后面,提交的数据长度受地址栏长度限制,且信息完全暴露,安全性较差。

    【使用场景:如分享链接时显示产品相关信息】

    1. Post:只有在表单中规定了提交方式methodpost时才是post方法提交数据。Post提交数据是将数据保存在请求体中,常规操作无法获取其中的数据,安全性相对于get方法要高,且提交的数据量也比get方法多。

    【账号密码登录一般用post提交】

    Servlet执行流程

    请求流程

      客户端发出一个请求URLURL中的一部分是Servlet的名字。

      Web服务器转发请求到Servlet引擎,Servlet class实例在其里 面。

      Servlet引擎调用Servlet的方法。

      在HttpServlet中,Servletservice方法最终将调用doPost()方法 或者doGet()方法。

    响应流程

      Servlet将动态响应请求,并把结果发到Web服务器。

      Web服务器发送动态生成的响应给客户端。

    客户端发送http请求==》服务器接收==》发送到web容器==servlet对象解析数据,并生成动态响应==》响应发送至服务器端==》返回http响应给客户端

    Servlet生命周期

    1.Servlet对象类创建

      当客户端第一次向服务端发送请求时,对应的Servlet对象就被创建。

      创建方式1:自定义类实现Servlet接口,并重写其中全部的抽象 方法。【该方式需要重写五个抽象方法,通常我们只需要重写其中 service方法,故使用时较为繁琐】

      创建方式2:自定义类继承GenericServlet类,只需要重写其中的 service方法。

      创建方式3:自定义类继承HttpServlet类,该类当中没有抽象方法,只要根据需要,重写其中的DoGetDoPost等相关方法即可。

       【根据数据的提交方式来执行相应的Do方法,如DoGetDoPost

    2.方法调用

      Init方法调用:对象创建成功后,会调用init方法对其配置信    息进行初始化。

      Service方法调用:每次客户端向服务器端发送请求时,对应的Servlet对象即会调用service方法。【包括第一次发送请求】

      Destroy方法调用:对象被处理回收时调用。

      getServletInfo方法

      一般不重写,Servlet API的文件建议使用GetServletInfo方法返回诸如作者、版本和版权的信息。如果要重写,最好返回尽量简单的信息。

      getServletConfig方法

      除非想亲自追踪对象config,否则一般来说不要重写这个方法.

    3.对象的处理回收

      当tomcat停止运行或者servlet对象所在的项目从tomcat中移除时,对象会被回收。

    Web项目组成结构

    1. src:存放java代码
    2. Tomcat文件包
    3. JDK文件包
    4. WebContent内容。

      ①html文件

      ②WEB-INF(内含web.xml文件用于配置信息、lib用于存放 第三方jar包文件)

      ③META-INF

    Servlet配置

      所有新建的Servlet必须添加配置信息才能进行使用。Servlet配置信息写在web.xml中。配置过程如下:

      

    <servlet>
    
         <servlet-name>formServlet</servlet-name>
    
        【定义servlet的名称,可以自定义,没有限制】
    
         <servlet-class>com.aowin.servlet.FormServlet</servlet-class>
    
        【定义servlet的类型。输入的内容为servlet的完全路径:包名+类名】
    
       </servlet>
    
       <servlet-mapping>
    
         <servlet-name>formServlet</servlet-name>
    
        【servlet的名称,必须与前面定义的名称完全一致】
    
         <url-pattern>/formServlet</url-pattern>
    
        【定义servlet的url访问路径,在客户端url栏输入用来访问。必须以斜杠/开头】
    
       </servlet-mapping>

    Servlet使用

    1. Tomcat执行
    2. 客户端输入相应的url地址。

      Url组成:协议+主机地址+端口号+项目名称+servleturl路径

      举例:http://localhost:8080/servlet_01/firstServlet

    request对象使用

      请求对象,其中包含了所有请求相关的信息。

      public String getParameter(String name)  获得指定名称的对应值
      public String[] getParameterValues(String name) 获得指定名称对应值的集合

      request.getMethod();  http的请求方式(get/post)

      request.getRequestURI();获得端口号后字符串(项目名+文件名)

      request.getRequestURL().toString();获得完整的URL字符串

      request.getServerName();获得主机名称

      request.getServerPort();获得端口号

      request.getServletPath();获得servlet路径。项目+文件路径

      request.getScheme();获得协议名称

      request.getServletContext().getContextPath();获得项目名称

         【项目相关信息保存在application中,因此从application中可以获取项目的名称

    Response对象使用

      响应对象,其中包含了所有与对客户端响应相关的信息

      public ServletOutputStream getOutputStream() throws IOException
        获得输出字节流

      public PrintWriter getWriter() throws IOException获得输出字符流

    文字乱码解决方法

      乱码产生的原因:编码不一致 

    请求

      在获取数据之前设置request的编码。request.setCharacterEncoding("gbk")

    get:

       因为get方法提交的数据直接写在url地址中,因此编码格式由tomcat决定。修改tomcat的配置文件server.xml,在8080节点上增加一个属性URIEncoding="gbk"

    post:

      post方法提交的数据包含在请求体中,直接在获取数据前设置编码格式即可。【无需其他操作】 

    响应

    在获取输出流之前设置response的编码。

      1response.setCharacterEncoding("")  设置响应内容的编码

      2response.setContentType("text/html ;charset=gbk")  设置响应的编码,告诉浏览器使用这个编码显示页面

    涉及方法

      request.setCharacterEncoding("utf-8");

      设置请求的编码格式

      response.setContentType("text/html;charset=utf-8");

      设置相应文件的编码格式

      response.setCharacterEncoding("utf-8");

      只设置编码格式,不限定文件类型

    作用域

    作用

      用于数据存储。

    分类

    Request

      数据类型

        HttpServletRequest。保存一次请求中的相关信息。当客户端发起一次新的请求时,原先保存在request对象中的数据即丢失。

        setAttribute("username", username);向request对象设置属性和属性值

        getAttribute("username")request对象通过属性名称拿到对应的属性值

        Session

        数据类型HttpSession。保存一次会话中的相关信息。用户重复请求不会影响其中的内容。

         【浏览器不关闭均视为一次会话。通常用于存储用户的登录信息】

        request.getSession()通过request对象拿到session对象

        session.setAttribute("username", username);设置属性和属性值

        session.getAttribute("account");通过属性名称获取对应属性值

      Application

      项目作用域。数据类型ServletContext。用于保存项目的公共数据,该数据被所有连接至该项目的所有用户共享。【类似于类当中的静态属性,比如访问量,点击量】

    1. request.getServletContext();通过request对象获得
    2. Request.getSession().getServletContext()通过session对象获得对象
    3. setAttribute("count", 1)设置属性和属性值
    4. getAttribute("count");获得对应属性的属性值

    【对于所有的作用域而言,如果事先没有设置对应的属性和属性值,直接通过get方法拿到的值为null

    路径的区别

      相对路径

        相对路径不能以斜杠开头。用指定的内容替换url地址中最后一个斜杠后面的内容。【../表示向前推一个斜杠】

      绝对路径

        绝对路径必须用斜杠开头,表示一个完整的url地址。

      客户端中的绝对路径:开头的斜杠表示包括协议、主机地址和端口号的信息,需要在后面指明项目的名称及文件路径。

      服务端中的绝对路径:开头的斜杠表示包括协议、主机地址、端口号和项目名称的信息,需要在后面指明文件的路径。

    Servlet对象响应的方式

      1. 获得响应的输出流,直接输出

      2. 跳转

      跳转

        服务器端跳转

          服务器的行为,不需要客户端重新发出请求,浏览器中的地址会停留在初次请求的资源界面,不会发生改变。可以访问所有的资源。Request对象保存中的数据不会丢失。

        跳转方法

          request.getRequestDispatcher("login.html").forward(request, response);

          response对象

      客户端跳转

        也称为重定向,需要客户端重新发出请求,此时客户端中的地址会对应的发生变化。只能访问有权限的资源(WEB-INF下的资源均不能访问),并且Request对象保存中的数据会丢失。

       【需要注意的是,重新请求只更新了客户端的地址信息,并未携带任何其他信息,因此request中不会有表单的数据】

        跳转方法

          response.sendRedirect("test.html");

        【参数为跳转的路径,完成跳转后客户端的路径会变成该路径】

    Servlet线程安全

        在Servlet概念中提到,servlet是多线程、单实例模式。也就是多个客户端访问同一个项目时,其处理对象是由同一个servlet对象进行处理。如果该对象中存储了成员变量,在访问过程中可能会导致数据异常。

    保证线程安全的三种方式

    1. servlet实现SingleThreadModel接口
    2. Servlet对象设置方法为同步方法
    3. 避免在servlet方法中使用成员变量。(推荐)

    优劣比较:

     第一种强制限制只能单线程访问servlet对象,这会迫使web容器为每一个访问用户创建一个serlvet实例,性能损耗严重;

     第二种方法限制方法同步,需要其他客户端完成操作后才能执行,在实际中会导致用户长时间等待的情况,,效率较低。

     推荐使用第三种方式。

    表单提交校验

    校验的三种方式

    1. 在提交按钮submit上添加onclick=”return check()”事件,当check()方法返回false值时,则不提交;若返回true,则提交成功。具体的判断条件写在check()方法体中。
    2. 在提交按钮button上添加check()事件,在check()方法体中进行条件判断,若不符合要求,用return直接结束方法,若条件符合要求,调用formsubmit()方法进行提交。
    3. 在表单上添加onsubmit=”return check()”事件。在check()方法中进行条件判断,当check()方法返回false值时,则不提交;若返回true,则提交成功。

    方式1和方式3处理的方式本质上是一致的,只是事件添加位置的区别。方式2button本身没有方法,是需要自己定义提交的时机。

    防止表单重复提交的方式

    1. javascript设置一个标志变量

    举例说明:设置标志变量var tag = false,当tagfalse时,表示表单还未提交。若此时接收到了提交的操作,将tag的值改为true,表示已经提交。之后如果再收到提交请求,根据tag的值来判断,true时表示已经提交过,此次提交为重复提交,则不进行提交操作。

    【由于表单提交的操作一定伴随着页面的重新加载,对应的标志变量也会进行初始化,故不会影响新一次的表单提交】

    1. 设置提交按钮不可使用disabled=true

    按钮中的disabled属性默认值为false,表示当前按钮可以进行点击,在第一次点击提交后将属性值改为true,此时按钮变成不可使用的状态,也不会触发任何点击事件,可以避免重复提交。

    1. 在传输的数据中添加时间戳来避免刷新导致的重复提交。

    具体步骤:在提交的表单中添加一个隐藏的表单<input type="hidden" name="time">,通过js将提交的时间作为该表单的值进行提交;服务端在获取数据时将该值与储存在session作用域的该属性对应值进行比较:

    ①若session中未找到该属性:表示本次会话中第一次提交,对session进行第一次赋值,并对提交的数据进行处理。

    若发现有该属性但是属性值不同:表示是新的一次表单提交,对属性进行重新赋值,并对提交的数据进行处理

    ③若发现有该属性并且属性值相同:表示此次提交是由刷新导致,提交的数据与前一次提交完全一致,此时直接跳过,不对提交数据做任何处理。

    需要注意的是,刷新导致的重复提交所对应的request对象是同一个,并未发生改变,因此其中保存的时间是一致的,以此作为依据来区分是否为重复提交

    Cookie使用

      Cookie是服务器端保存在客户端的一些信息。当客户端再次发出请求的时候,浏览器自动将对应路径的cookie提交上去。

      不太安全,但是会cookie记录sessionid等数据,所以不能禁用

    创建cookie

       Cookie c1 = new Cookie("名称",对应值);

      设置cookie在客户端保存的时长,以秒为单位

         c1.setMaxAge(24*60*60);//表示保存一天(24h

      添加到客户端

        response.addCookie(c1);

      获取cookie

        Cookie[] cs = request.getCookies();

         【因为cookie可能不止一个,所以返回的是一个数组

      通过名称获取对应值

      for(Cookie c:cs) {

        String name = c.getName();

        String value = c.getValue();

        System.out.println(name+"="+value);

    }

    由于不能确定所需的cookie信息存储在哪个位置,需要对数组进行遍历,附加条件判定来获取指定的对应值

    JSP

    概念

      JSP是一种让你混合静态HTMLJAVA代码,并且能动态生成HTML的技术。是一种服务器端脚本语言。

    JSP运行模式

      客户端向服务器请求jsp界面时,web容器将对应的jsp源文件编译成servlet代码,进一步编译生成class字节码文件被web容器读取运行,返回相应信息给客户端。

    Java脚本的三种方式

    1. <% 代码%>:这种形式的java代码作为service方法中的一部分执行,声明的变量为该方法中的局部变量,不能在其中定义新方法。一个页面中有多个<% 代码%>块时,执行顺序自上而下。
    2. <%!代码 %>:这种形式的java代码作为类的一部分,可以在其中定义方法和成员变量。
    3. <%=  内容%>:这里的内容作为out.print的参数输出到html界面,这里的内容必须是有结果的表达式
    4. jsp注释方法:<%-- 注释内容--%>
    5. html注释方法:<!--   -->
    6. Java注释方法://  或者 /**/

    注释方法

    JSP指令 Directives

      JSP directives是一些被JSP引擎调用的语句,其在页面编译成Servlet的时候会被调用不会产生输出内容主要用来设置相关的属性

      三种directives

        page directives

          定义一些页面特有的属性。

          language=java//使用的编程语言

          contentType=MIMEType;charset=编码格式”//设置编码类型

          import=packageList//导入的外部文件。导包用。

          session=true/false//是否使用session。默认都设置为true

          errorPage=error_url”当前页面发生错误时跳转至指定的错误页面

          isErrorPage=true/false//指定当前页面是否为错误页面。

          一般格式<%@ page 属性=属性值,属性=“属性值” %>

         【多个属性之间用空格隔开,导入文件时,若需导入多个,文件名写在一个字符串中,中间用逗号隔开。如:import="com.aowin.dao.*,com.aowin.model.*"

        include directives

          在当前页面中引入外部文件。实现机制是直接将外部文件的代码进行复制,在当前页面执行。是静态的,运行时不能做修改。

          一般格式:<%@ include file=”导入文件的路径” %>

        taglib directives

          格式化标签。

          <%@ taglib uri=tagLibraryURI”  prefix=tagPrefix%>

    内嵌变量

      request

        javax.servlet.http. HttpServletRequest (接口)

        表示客户端请求。与servlet中用法一致。

      Response

         javax.servlet.http.HttpServletResponse (接口)

        表示服务端响应,与servlet用法一致。

      Session

        javax.servlet.http.httpSession (接口)

        表示会话作用域,用于存放数据。与servlet中用法一致。

      application

         javax.servlet.ServletContext(接口)

        表示项目作用域。特别注意其数据类型。与servlet中用法一致。

      Config

        javax.servlet.ServletConfig(接口)

        存放配置信息。与servlet中使用方法一致。在创建servlet实例时,调用init方法初始化配置信息时用到该参数。

      pageContext

      javax.servlet.jsp.PageContext

        表示页面作用域。存储的数据只能在当前页面进行使用。

      该对象可以对其他作用域进行赋值和取值。

      赋值

        pageContext.setAttribute("属性名称","属性值",作用域编号);

      取值

        pageContext.getAttribute("属性名称",作用域编号);

      移除属性

        pageContext.removeAttribute("属性名称",作用域编号);

             【作用域编号:PageContext类中设置了不同静态属性用于表示不同的作用域。如PageContext.SESSION_SCOPE

        【如果未指定作用域编号,那么默认为pageContext作用域

      Out

         javax.servlet.jsp.JspWriter。

        通过response对象获得的输出流,用于向客户端输出内容。

      Page

        Java.lang.Object

        指当前页面。类型为object,常量。

      Exception

        java.lang.Throwable

        该参数只存在于设置isErrorPagetrue的界面。和java中的exception对象一致,可以用于输出异常信息。

        【可能涉及的方法:getMessage();获得异常信息】

    作用域

      pageContext:页面作用域

      Request:请求作用域

      Session:会话作用域

      Application:项目作用域

    行为(标签)

      Bean使用的标准行为

      可以增加个性化的行为

      <jsp:include/>

        动态包含页面,在运行过程中可以发生变化。

      包含指定页面

        <jsp:include page=”/templates/copyright.html”/>

      包含指定页面,并将值存入当前request对象中。

        可以用<jsp:param/>子元素作为参数进行传值。用该方法传递参数时,被包含界面必须是jsp

        <jsp:include page=page_name>

        <jsp:param name=param_name value=param_value/>

        <jsp:param name=param_name value=param_value/>

        </jsp:include>

      <jsp:forward />

        跳转至指定界面(服务器跳转)

        <jsp:forward page=“uri” />:

      携带属性和对应值跳转至指定界面

      属于服务器跳转。数据存在于request对象中。

        <jsp:forward page=“other.jsp” >

        <jsp:param name =“参数名称” value=“”></jsp:forward >

    JavaBean

      是一个java符合SUNJavaBean规范

    JavaBean规范

      1.有一些私有的属性,这个属性的get方法必须是get属性名,set方法必须是set属性名, getset方法中属性名第一个字母大写,如果属性是boolean值,则属性的get方法必须为is属性名。

      2.需要一个没有参数的构造函数

      3.需要实现序列化的接口implements Serializable

    JavaBean对象创建及使用

    实例化对象

      如果没有实例则产生一个新的Bean

      如果实例已经存在,则取出这个实例。

      <jsp:useBean  id="user1"  scope="request" class="com.aowin.model.User"></jsp:useBean>

    设置属性值

      Name的值为对象的id值。

      <jsp:setProperty property="account" name="user1" value="xiaohei"/>

    获取属性值

      Name的值为对象的id值。获取的值会直接进行输出。

      <jsp:getProperty property="account" name="user1"/>

    MVC结构

      m:model,表示数据模型层,完成数据的增删改查,用dao+model

      v:view,表示视图层,包括页面(html   jsp,img

      c:controller,表示控制层,处理业务流程,用servlet

      分层好处:好维护,好扩展,灵活,

      分工明确,每一层都可以在不影响其它层的情况下,使用新的技术进行替换

      项目流程:

      视图层===》控制层===》数据层===》视图层

     

    JDBC事务处理

      为了完成一个功能,需要执行多条sql语句,要么都成功,要么都失败

      conn.setAutoCommit(false);

        ......

        ......

        .......

      conn.commit();

      注意:事务处理的目的是保证数据一致性

             在项目中增加service层,完成事务处理,一个service的方法中可能调用多个dao的方法,使用同一个connection

        如果成功则提交,如果某个dao的方法执行错误,需要 回滚

        如一次购买:

          1)修改产品的库存,减少

          2)购物车中增加记录

          不管是不是需要多个sql,都可以增加service层,方便管理

    ELJSTL

    EL

      Expression Language。用于页面内容动态显示,主要的作用是替代jsp中的java代码,可以更方便的获取值用于显示(可以进行简单的运算,但不能进行流程控制)

    运算式

      ${显示内容}

      el默认从作用域中获取数据,不指定具体作用域时,按以下顺序进行查找从中获取数据

      查找顺序

    1. pageScope :从页面作用域查找  
    2. requestScope 从请求作用域查找
    3. sessionScope  从会话作用域查找
    4. applicationScope从项目作用域查找

    找到即止,找不到显示为空""

    运算符

    算术运算符

    关系运算符

    逻辑运算符

    条件运算符

      表达式?结果1:结果2;【同java

    Empty运算符

      用于判断指定变量名是否存在,存在返回true,否则返回false

      ${ empty param.name }

      ${ empty username }

    .[]运算符

      点运算符:点上属性名称,得到对应值

      []运算符:传入索引值,获得对应集合中指定位置的元素。索引值可以是数字,也可以字符串类型的数字。

    隐含变量

    JSP       

       pageContext       PageContext 实例对应于当前页面的处理 

    作用域     

       pageScope         与页面作用域属性的名称和值相关联的 Map  
       requestScope      与请求作用域属性的名称和值相关联的 Map  
       sessionScope      与会话作用域属性的名称和值相关联的 Map  
      applicationScope  与应用程序作用域属性的名称和值相关的 Map  

    请求参数   

       param             按名称存储请求参数的主要值的 Map  
       paramValues  将请求参数的所有值作为 String 数组存储的 Map  

      请求头     

       header            按名称存储请求头主要值的 Map  
      headerValues      将请求头的所有值作为 String 数组存储的 Map  

      Cookie      cookie            按名称存储请求附带的 cookie  Map  

    初始化参数 

      initParam     按名称存储 Web 应用程序上下文初始化参数的 Map 

      【从隐含变量中取值只需要用.符号加上要取的变量名称即可。如:

        ${param.vip}从提交的数据中获取名称为VIP的属性值】

    JSTL

      JavaServer Pages Standard Tag LibraryJSP标准标记库。需要在jsp中进行导入才能使用。

      如:<%@ taglib uri="http://java.sun.com /jsp/jstl/core" prefix="c" %>

    功能领域 

    uri

    前缀

    例子

    核心(Core 

    http://java.sun.com/jsp/jstl/core

    c

    <c:tagname ...>

    国际化(Internationalization

    http://java.sun.com/jsp/jstl/fmt 

    fmt

    <fmt:tagname ...> 

    XML 

    http://java.sun.com/jsp/jstl/xml

    x

    <x:tagname ...> 

    数据库(Database

    http://java.sun.com/jsp/jstl/sql 

    sql 

    <sql:tagname ...> 

    If条件判断test表示判断条件

      </c:if>

        <c:if test="${!empty user }">

      </c:if> 

    选择语句:(类似于switch)

      Test表示匹配条件,匹配成功时显示相应内容,都不匹配则显示otherwise中的内容。

      <c:choose>

        <c:when test="${user.vip>0 and user.vip<=5 }">初级会员</c:when>

        <c:when test="${user.vip>5 and user.vip<=10 }">中级会员</c:when>

        <c:when test="${user.vip>10 }">高级会员</c:when>

        <c:otherwise>请先加入会员</c:otherwise>

      </c:choose>

    循环遍历

      例1<c:forEach begin="1"  end="10" var="i">

      ${i }--

      </c:forEach>

      例2<c:forEach items="${numlist }" var="num" step="2"varStatus="s">

          <tr>

            <td>${s.index }</td>

            <td>${s.count }</td>

            <td>${num }</td>

          </tr>

        </c:forEach>

    相关属性:

      begin:起始位置

      end:结束位置

      step:步长==默认显示集合所有的数据,步长是1

      items:要显示的集合

      var:变量,代表集合中的元素

      varStatus:代表当前项的状态,常用index(索引值,固定)  count(迭代计数,变化)

    过滤器(Filter

      Filter用于过滤那些与之相关的servletJSP页面的请求,对请求内容进行检查和修改。不会发出新的请求,只会让请求延续。

      Filter是一段可重用的,转换HTTP请求,响应内容和头信息的代码,先于与之相关的servletJSP页面运行在服务器上。可附加到一个或多个servletJSP页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可以作如下的选择:

      Filter只是修改对资源的请求或对资源的响应,不会重新发出请求。Filter对静态和动态资源都可以起作用。

      filter的一般作用:

        在request到达它调用的资源之前访问、处理该资源。

        修改request头和数据,通过重新包装request对象。

        修改response头和数据,通过重新包装response对象。

        拦截监听资源的调用。

        以一定顺序对一个或一组servlet或者静态资源作用。

    常见使用场景

    1. 编码过滤【对于访问的资源统一设置编码格式】
    2. 登录过滤【在过滤器中验证是否包含用户信息,若无表示没有进行登录,则跳转至登录界面,若包含信息,则正常访问】
    3. 权限过滤【权限过滤可以对访问的资源进行目录分类,在过滤器中分别获取访问的路径和人员权限,之后对路径名称和权限进行匹配,若满足权限要求则继续请求,否则跳转至提示界面重新访问】
    4. init():项目启动时初始化配置信息
    5. doFilter():有请求访问匹配的路径资源时执行
    6. Destroy():销毁过滤器
    7. Chain.doFilter(request,response):延续请求继续访问。【当请求资源符合要求时,让请求继续向前访问,到达下一个过滤器或者访问资源】
    8. 自定义一个类实现Filter接口,重写doFilter()方法
    9. 配置信息

    过滤器方法

    过滤器的创建

    (1) 配置方式1web.xml中配置。与servlet相似。

    <filter>

      <filter-name>encodingFilter</filter-name>    

         <filter-class>

          com.aowin.filter.MyEncodingFilter

        </filter-class>

      </filter>

    <filter-mapping>

        <filter-name>encodingFilter</filter-name>

        <url-pattern>/*</url-pattern>【匹配路径】

    </filter-mapping>

    (2) 注解形式配置。@WebFilter(“匹配路径”);如果需要匹配多种路径,格式为:@WebFilter(“{路径1,路径2...}”)

    【路径为字符串格式】

    匹配路径的方式

      1/*:表示过滤所有的请求

      2/pack/*:表示过滤pack文件夹下的请求

      3*.html    *.jsp  :表示过滤某一类的请求

      4/hello.jsp  :表示对固定的请求路径进行过滤

      同一个过滤器可以配置多个filter-mapping,过滤多种路径的形式

    生命周期

      1web服务器启动的时候初始化过滤器,执行init()方法

      2)如果请求匹配filter所配置的路径,执行过滤器的方法doFilter()

      3)服务器关闭或者项目停止发布就会销毁filter,执行destroy()

    监听器(Listener

      监听器用于监听行为。监听器在项目启动时创建。监听器的配置只需要配置类信息。注解的形式:@WebListener。因为不需要配置路径,所以无需参数。

    Request监听

    ServletRequestListener

      监听request的初始化和销毁。

    相关方法:

      requestInitialized(ServletRequestEvent sre):request对象初始化时执行

      requestDestroyed(ServletRequestEvent sre):request对象销毁时执行

      Request对象在每次请求时初始化,当请求结束后则销毁。

       ServletRequestAttributeListener

      监听request对象添加属性、移除属性、覆盖属性值的行为。

      相关方法:

      attributeAdded()

        监听request对象添加属性的行为【即request对象调用setAttribute()方法添加属性时】

      attributeRemoved()

        监听request对象移除属性的行为【即request对象调用removeAttribute()方法移除属性时】

      attributeReplaced()

        监听request对象覆盖属性值的行为()【即request对象调用setAttribute()方法对已有的属性名进行重复赋值时】

    Session监听

      HttpSessionListener

        监听session的创建和销毁。

      相关方法:

    sessionCreated()

      session对象创建时执行。

     【当浏览器第一次访问动态资源时,才会创建session对象。若只访问静态资源,则不会进行session对象的创建只要浏览器不关闭,都不会创建新的session对象】

    sessionDestroyed()

       session对象销毁时执行。

     【如果客户端与服务器持续进行交互,则session不会被销毁,当客户端与服务器之间建立会话但客户端一直没有交互(客户端没有操作),那么默认30分钟之后会对session对象进行销毁】

     【浏览器关闭时,此时session对象不会被销毁,只有经过30分钟后,服务器没有检测到该session对象的客户端交互动作,才会销毁该对象】

    Session对象销毁时间的设置

    1. 配置信息设置:时间单位为分钟

        <session-config>

          <session-timeout>1</session-timeout>

         </session-config>

    1. session.setMaxInactiveInterval(时长);设置多少秒后session对象销毁,单位是秒。
    2. session.invalidate();调用该方法时session对象立即销毁。

    HttpSessionAttributeListener

      监听session对象添加属性、移除属性、覆盖属性值的行为。

    相关方法:

    attributeAdded()

      监听session对象添加属性的行为【即session对象调用setAttribute()方法添加属性时】

    attributeRemoved()

      监听session对象移除属性的行为【即session对象调用removeAttribute()方法移除属性时】

    attributeReplaced()

      监听session对象覆盖属性值的行为()【即session对象调用setAttribute()方法对已有的属性名进行重复赋值时】

    ServletContext监听

      项目作用域ServletContext在项目启动时进行初始化。

    ServletContextListener

      监听servletContext的初始化和销毁。

      contextInitialized():项目启动时调用该方法初始化servletContext对象

      contextDestroyed():项目停止发布时调用该方法销毁对象。

    ServletContextAttributeListener

      监听servletContext对象添加属性、移除属性、覆盖属性值的行为。

    相关方法:

    attributeAdded()

      监听servletContext对象添加属性的行为【即servletContext对象调用setAttribute()方法添加属性时】

    attributeRemoved()

      监听servletContext对象移除属性的行为【即servletContext对象调用removeAttribute()方法移除属性时】

    attributeReplaced()

      监听servletContext对象覆盖属性值的行为()【即servletContext对象调用setAttribute()方法对已有的属性名进行重复赋值时】

    AJAX

      AJAXAsynchronous JavaScript and XML,即异步JSXML

      AJAX可以不刷新页面,从服务器中获取数据对页面内容进行替换。

      优点:

    1. 无需每次都请求整个页面的信息,可以只获取需要进行改动的信息,减轻服务器的负担。
    2. 只需要局部刷新页面,可以不用重复加载同样的内容,在效率上有极大提高,在用户的角度来看像是实时更新。
    3. Ajax采用异步数据传输,因此在向服务器请求数据的过程中,用户依然可以对客户端页面进行访问和操作。
    4. 进一步促进页面和数据分离
    5. 基于XML标准化,被广泛支持,无需安装插件

      缺点:

    1. 浏览器兼容性问题
    2. 移动端支持程度低
    3. 无法通过后退撤销操作

    XMLHttpRequest对象

      用于在后台与服务器交换数据。

      方法:

        open(“请求方式”,“请求路径”,“异步参数”)

        send(“需要提交的数据”)

        abort() 停止当前请求

        getAllResponseHeaders() 作为字符串返问完整的headers

        getResponseHeader(“headerLabel”) 作为字符串返问单个header标签

        setRequestHeader("label", "value") 设置header并和请求一起发送 ('post'方法一定要设置 )

    属性:

    AJAX使用流程

    1. 初始化XMLHttpRequest对象。(新建对象:New XMLHttpRequest())

        【对于低版本的IE5IE6可能不支持,需要创建ActiveX对象

        New ActiveXObject(“Microsoft.XMLHttp”);

    1. 调用open方法设置请求路径,请求方式和异步参数。

        【请求路径对应服务器中处理提交数据的路径;

         请求方式主要有:1.get方法2.post方法

         异步参数:默认为true,即异步传输;false为非异步,非异步传输 时用户无法进行操作】

    1. 设置获取响应数据后的处理流程。通过设置onreadystatechange属性。该属性的属性值为function函数体。

        【若设置为非异步方式,那么不要设置该属性,只需要将方法体中需要执行的代码写在send方法调用后面即可

    1. 调用send函数发送数据。

        get方法:get方法提交数据时,是将数据拼接在路径后面,一般格式为:路径?属性1=1&&属性2=2...;因此在send方法中无需另外设置传递数据,只需要设置参数为null即可。==Send(null)

        Post方法:post方法提交数据时,在send方法中传入提交的数据,一般格式为:send(“属性1=1&&属性2=2...)

        特别注意:在使用post方法提交数据时,调用send方法前,必须设置请求头信息。

        XMLHttpRequest对象调用

        setRequestHeader(“Context-type”,"application/x-www-form-urlencoded")

    冷眉横对千夫指,俯首甘为孺子牛。
  • 相关阅读:
    js/jquery 页面传值
    php 连接sqlserver方法
    php 写webservice常见问题
    php 解决json_encode中文null和UNICODE转码问题
    手机web——自适应网页设计
    50个js技巧(分享)
    php webservice客户端和服务器端
    php 文件下载功能
    es6 字符串的扩展
    vue $emit抛出事件
  • 原文地址:https://www.cnblogs.com/yujian0817/p/12550728.html
Copyright © 2020-2023  润新知