javaEE前期

  •  XML
  1. XML概述
      1. XML指可扩展标记语言
      2. XML是一种标记语言,很类似HTML,HTML文件也是XML文档。
      3. XML的设计宗旨是传输数据,而非显示数据。
      4. XML标签没有被预定义,需要自行定义
      5. XML被设计为具有自我描述性(就是易于阅读);
      6. XML是W3C的推荐标准。W3C在1998年2月发布1.0版本,2004年又发布1.1版本,但因为1.1版本不向下兼容1.0版本,所以很少用1.1版本开发,同时,在2004年2月W3C又发布了1.0版本的第三版。所以现在学习是1.0的第三版
  1. XML和HTML的差异
      1. XML不是HTML的替代。
      2. XML和HTML为不同的目的而设计。
      3. XML被设计为传输和存储数据,其焦点是数据的内容。
      4. HTML被设计用来显示数据,其焦点是数据的外观。
      5. HTML旨在显示信息,而XML旨在传输信息。
  1. XML跟注解等效
      1. 注解:方便代码阅读,是可以被解析的
      2. 注释:方便程序员阅读。
  1. XML的组成元素
      1.  文档声明:

1. <?xml version=”1.0” encoding=”utf-8” ?> 必须从文档的0行0列的位 置开始写。

2. Version:指定XML文档版本,必须属性,这里一般使用1.0版本。

3. Encoding:指定当前文档的编码,可选属性,默认值为utf-8;

      1.  元素:

1. 普通元素的结构由开始标签、元素体、结束标签组成。

2. 元素体:元素体可以是元素,也可以是文本。

3. 空元素:空元素只有标签,而没有结束标签,但元素必须自己闭合。

4. 元素的命名:区分大小写。不能使用空格,不能使用冒号。不建议以XML、 xml、Xml开头。

5. 格式化良好的XML文档,有且只有一个根元素。

iii. 属性:

  1. 属性是元素的一部分,它必须出现在元素的开始标签中。
  2. 属性的定义格式:属性名= “属性值”,但属性值必须使用单引号和双引号括 起。
  3. 一个元素可以有0-N个属性,但一个元素中不能出现同名属性。
  4. 属性名不能使用空格,不要使用冒号等特殊字符,且必须以字母开头。

iv. 注释

  1. <!--注释内容--> XMLde 的注释和HTML相同。

v. 转义字符

  1. XML中的转义字符与HTML一样。因为很多符号已经被文档结构使用,所以在元素体或者属性值中想使用这些符号,就必须使用转义字符(也叫实体字符)。
  2. 图例:

vi. 字符区

  1. 格式: <![CDATA[ 文本数据 ]]>
  2. 注意:
    1. CDATA指的是不应由XML解析的文本数据;
    2. CDATA部分由”<![CDATA[“开始,由”]]>结束”。
    3. 当大量的转义字符出现在XML文档中时,会使XML文档的可读性大幅度降低。这时如果使用CDATA段就会好一些。
    4. CDATA部分不能包含字符串”]]>”。也不允许嵌套的CDATA部分。
    5. 标记CDATA部分结尾”]]>”不能包含空格或者拆行。
  1. XML文件的约束
  1. DTD约束
  1. 一般DTD文档公司会提前准备好,只需会根约束编写的自己的XML(重要)
  2. 元素声明:
      1. 约束元素的嵌套层级: <!ELEMENT 父标签 (子标签1,子标签2,…)>
      2. 约束元素体里面的数据: <!ELEMENT 标签名字 标签类型>

例:

      1. 数量词

      1. 属性声明

例:

  1. schema约束
  1. 概述:
      1. schema语言也可作为(XML Schema Definition)。
      2. Schema比DTD强大,是DTD的代替品。
      3. schema本身也是XML文档,但schema文档扩展名为xsd,而不是XML。
      4. schema功能更强大,数据类型约束更完善。
      5. schema可以对元素数据类型进行约束。
  1. 一般schema文档公司会提前准备好,只需会根约束编写的自己的XML(重要)
  2. 命名空间
      1. xmlns="http://www.itcast.cn"
        1. 缺省式 xmlns="命名空间地址"
        2. 命名式 xmlns:B = "命名空间地址"
        3. 命名空间的地址书写规范 全球唯一   公司域名+内部唯一
  • XML解析器
  1. 解析方式:
      1. DOM:
        1. 要求解析器把整个XML文档装载到内存,并解析成一个Document对象
        2. 优点:元素和元素之间保留结构关系,故可以进行增删改查操作。
        3. 缺点:XML文档过大,可能出现内存溢出。
      2. SAX:
        1. 是一种速度快,更有效的方法。她逐行扫描文档,一边扫描一边解析。并以事件驱动的方式进行具体解析,每执行一行,都会触发对应的事件。
        2. 优点:处理速度快,可以处理大文件。
        3. 缺点:只能读,逐行后将释放资源,解析操作繁琐。
      3. PULL
        1. Android内置的XML解析方式,类似SAX;

2.解析器

            1. 解析器,就是根据不同的解析方式提供具体实现,有的解析器操作过于繁琐,为了方便开发人员,有提供易于操作的解析开发包。
            2. 常见的解析开发包:

JAXP:sun公司提供支持DOM和SAX开发包

Dom4j:比较简单的的解析开发包(常用)

JDom:与Dom4j类似

Jsoup:功能强大DOM方式的XML解析开发包,尤其对HTML解析更加方便(项 目中讲解)

  1. dom4j
    1. 解析步骤:前提要导入jar包(dom4j)
      1. 加载核心类  

 SAXReader reader = new SAXReader();         

      1. 加载流文件

类名.class.getClassLoader().getResourceAsStream(XML文件名);

      1. 读取文件

Document document = saxReader.read(is);

      1. api

           1. elements 获得当前标签下的子元素

          2. element.attribute("id") 根据属性名称获得对象

          3. element.attributeValue("id"); 直接获得属性的值

          4. element.element("name"); 根据标签名称获得 对象

           5. element.getText() 获得标签的文本值

           6. element.elementText("author"); 根据标签名称获得标签体的内容

  1. Dom4j和XPath结合
    1. XPath的语法:
      1. / 从根路径下开始
      2. // 从任意位置开始
      3. @ 属性选取
      4. 以上语法可以综合
    2. 解析步骤 前提:导入jar包(dom4j和jaxen-1.1-beta-6.jar)
      1. 加载核心类

SAXReader saxReader = new SAXReader();

      1. 加载流

类名.class.getClassLoader().getResourceAsStream(XML文件名);

      1. 读取文件

Document document = saxReader.read(is);

      1. 查询一个节点

Node node = document.selectSingleNode("//book[@id='0001']");

      1. 把node强转为Element 对象

 Element element = (Element)node;

      1. 查询元素

System.out.println(element.elementText("name"));

  • Tomcat
    1. 软件架构
      1. 交互模型
        1. B/S 就是浏览器和服务器的交互模型.  例如:网页游戏等
        2. C/S 就是客户端和服务器的交互模型.  例如:端游、聊天程序等。
      2. 相同点
        1. 都是基于请求-响应交互模型,即:
          1. 浏览器(客户端)向服务器发送一个请求。
          2. 服务器向服务器的(客户端)回送一个请求。
        2. 必须先有请求再有响应
        3. 请求和响应成对出现。
      3. 不同点
        1. 实现c/s模型需要用户在自己的操作系统安装各种客户端,实现b/s模型,需要用户在操作系统中安装浏览器即可。
        2. 注意:b/s模型可以理解为一种特殊c/s模型。
      4. 模型的优缺点
        1. B/S
          1. 缺点:服务器的压力大  效果不好,体验差
          2. 优点:不需要安装  更新快
        2. C/S
          1. 缺点:服务器更新每一台都需要下载更新
          2. 优点:效果炫,体验好,服务器压力小
    2. 服务器资源
      1. 静态资源
        1. 指web页面中能中提供人们浏览的数据始终不变。比如:html、css、js、图片、音频、视屏等。
      2. 动态资源
        1. 指web页面中供人们浏览的数据是由程序产生的,不同的时间点访问web页面看到的内容各不相同。比如不同时间搜索微博的热门话题是不一样的,每天的天气情况也是变化的。这些数据有程序产生。
      3. 总结:
        1. 静态资源 任何时间 任何人 访问 效果都是一样   
        2. 动态资源 任何时间 任何人 访问 有可能不一样
    3. 服务器的概念

    1. 服务器常见的软件
      1. WebLogic(50%会遇见)
        1. Oracle公司的产品,是目前应用最广泛的Web服务器,支持J2EE规范。WebLogic是用于开发、集成、部署和 管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。
      2. WebSphere(50%会遇见)
        1. IBM公司的WebSphere,支持JavaEE规范。WebSphere 是随需应变的电子商务时代的最主要的软件平台, 可用于企业开发、部署和整合新一代的电子商务应用。
        2. 别名was
      3. Tomcat(100%会遇见)
        1. 中小型的应用系统,免费开源,支持JSP和Servlet。
      4. Glass Fish(很少见到)
        1. 最早是Sun公司的产品,后来被Oracle收购,开源,中型服务器。
      5. JBoss(很少遇见)
        1.   JBoss公司产品,开源,支持JavaEE规范,占用内存、硬盘小,安全性和性能高。
    2. 发布方式
      1. 直接将写好的java代码放入webapps下
      2. 配置server.xml
        1. 在最后的host的闭合标签前加,<Context path="/访问路径名称" docBase="被发布的目录"/>
      3. 在在conf\Catalina\localhost 目录配置xml
    3. web目录结构

  • Servlet
    1. Servlet概念
      1. 是一个规范,其实就是一个接口,想想JDBC;
    2. 创建ee项目
      1. JavaEE5  2.5 只支持XML文件映射
      2. JavaEE6 7  3.0  支持XML文件映射和注解映射
      3. JavaEE8 3.1 只支持注解映射
    3. XMl和注解开发

 

  1. 注解配置(如果经常改动,应该使用XML)
    1. 优点:开发速度快,复制快
    2. 缺点:没有解耦,结构不清晰

ii   Web.XML配置

    1. 优点:解耦清晰,开发速度慢
    2. 配置清晰

 

    1. 创建servlet的类
  1. 实现servlet接口 或者继承httpServlet或者GenericServlet
  2. 覆写或者重写其中的方法
  3. 进行注解或者XML配置。
    1. 体系结构
      1. Servlet是一套规范
      2. GenericServlet 对init和destory进行小重写
      3. HttpServlet 对service进行了实现,调用具体的doXxx方法。
    2. 生命周期
      1. 生命周期:一个类从创建到销毁的过程称之为生命周期。servlet只被创建一次。
      2. 创建init:默认第一次调用servlet的时候执行  初始化
      3. 执行service:每一次调用都会执行service
      4. 销毁destory:正常关闭服务器
    3. servlet执行的过程

    1. GenericServlet初始化过程

    1. HttpServlet的service执行过程

    1. ServletConfig类对象

 

  • http、request
    1. http的由来:

    1. http的概念
      1. 超文本船传输协议是互联网上应用最为广泛的一种网络协议。所有的www文件必须遵守这个标准。也可以说是一套规范。
    2. http的作用
      1. 互联网的数据传输底层是依赖tcp协议,http协议架构在tcp协议上,它规范传输数据的内容和格式。
    3. 查看浏览器与服务器的通讯过程

      1. http协议get请求方式
        1. 请求行(行中包括用户传入的数据)
        2. 请求头
        3. 空行
        4. 请求体为null
      2. http协议post请求方式
        1. 请求行
        2. 请求头
        3. 空行
        4. 请求体(体中包括用户传入的数据)
      3. Get 和 post提交的区别

    1. 请求行
      1. 常见的三个API

//GET http://localhost:8080/day14/MyHttpServlet?username=+aaaa&password=bbb HTTP/1.1

 

        1. 获得提交方式
          1. Request.getMethod();
        2. 获得访问的根路径(项目的别名)
          1. Request.getContextPath();
        3. 获得远程主机的ip地址
          1. Request.getRemoteAddr();
      1. 了解的API

//GET http://localhost:8080/day14/MyHttpServlet?username=+aaaa&password=bbb HTTP/1.1

 

        1. 获得协议
          1. Request.getScheme();
        2. 获得主机名称
          1. Request.getServerName();
        3. 获得端口
          1. Request.getLocalPort();
        4. 获得访问资源名称
          1. Request.getServletPath();
        5. ?号后的参数
          1. Request.getQueryString();
        6. 协议的版本
          1. getProtocol();
        7. 获得全路径
          1. URL和RUI的区别
            1. URL  统一资源定位符(绝对路径)
            2. URI 统一资源描述符(相对路径)
            3. request.getRequestURL(): http://localhost:8080/day14/MyRequestLineServlet
            4. request.getRequestURI():

 /day14/MyRequestLineServlet

    1. 请求头
      1. 常见API
        1. Enumeration<String> headerNames = request.getHeaderNames();
          1. 迭代器的前身
          2. 遍历

while (headerNames.hasMoreElements()){

System.out.println(headerNames.nextElement());

Sout("值:"+ request.getHeader(headerNames.nextElement()));

 }

        1. String referer = request.getHeader("referer");
          1. 需要对请求的资源进行判断,做防盗链
          2. 例如

String referer = request.getHeader("referer");

//本网站的正常处理

if(referer!=null && referer.contains("http://localhost:8080/day14/")){

response.getWriter().print("this options success");

}else{    

//不是自己网站的 拒绝(不做正常处理)  通知用户

response.getWriter().print("this options error , please change password");

}

        1. String head = request.getHeader("user-agent");
          1. user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36
          2. 获取携带浏览器的机器信息,浏览器版本...可以用作兼容浏览器。
    1. 请求体
        1. 设置编码集,必须放在第一行。
          1. Request.setCharacterEncoding(“utf-8”);
        2. 获得请求参数
          1. Request.getParameter(String); 根据key获得一个值,返回值为字符串
          2. Request.getParameterValues(String); 根据key获得一组值,返回值为数组
          3. Request.getParameterMap(); 获得所有的key和value,返回值类型是Map<String,String[]>;
        3. 乱码问题

    1. 请求转发及域对象
      1. API
        1. RequestDispatcher getRequestDispatcher(String path) 获取请求转发器(request对象方法)
        2. void forward(ServletRequest request, ServletResponse response) 将请求转发到另一个资源 (servlet)上(RequestDispatcher对象的方法)
      2. 请求转发格式
        1. Request.getRequestDisPatcher(“path”).forward(request,response); 由一个servlet转向另一个Servlet多个资源
      3. 域对象
        1. setAttribute(String,Object) 设置数据到域中
        2. getAttribute(String) 从域中获取数据
        3. removeAttribute(String) 从域中移除数据
      4. 特点
        1. 一次请求  多个资源
        2. 数据共享
        3. 地址栏只显示第一次路径
        4. 站内跳转(项目之间的文件跳转)
        5. 域对象也有生命周期
  • BeanUtils

    1. 导入两个jar包
    2. API
      1. BeanUtils.populate(被封装的对象,map数据);
  • response、servletContext
    1. 响应行
      1. 响应行概述
        1. 是http响应内容的第一行。
      2. 响应行一般数据为
        1. HTTP/1.1 200(tomcat8.5)或者HTTP/1.1 200 OK(tomact7)
      3. 响应行分为三个部分:
        1. 协议版本:HTTP/1.1
        2. 响应状态码:200
        3. 对响应状态码的解释:OK
      4. 常见的响应状态码
        1. 100 客户端应当继续发送请求
        2. 200 ok请求成功
        3. 302 重定向,请求的资源得不到响应
        4. 304 从缓存中取数据,不是存服务器中数据
        5. 403 服务器已经理解请求,但是拒绝执行,一般在权限不够时见。
        6. 404 请求失败,所请求的资源未在服务器上找到,找不到页面
        7. 405 请求行中指定的请求方法不能被用于请求相应的资源。
        8. 500 服务器遇到一个未曾预料的状况,服务器端报错
      5. API
        1. 注意:状态码一般不需要手动设置
        2. 设置响状态码
          1. Void setStatus(int sc)
          2. 不代表异常,一般用于设置200,302
        3. 设置响应状态码
          1. Void sendError(int sc)
          2. 发送错误,一般底层用于404,500
    2. 响应头
        1. 常用的响应头
          1. Refresh
            1. 定时刷新(一般不用)  key = 秒值
              1. response.setHeader(“refresh”,”1”);
            2. 定时刷新跳转某个页面 value = 秒值;url = 地址
              1. Reponse.setHeader(“refresh”,”3;url=https://www.baidu.com/”);
          2. Location
            1. 重定向操作:通常告知浏览器马上向该地址发送请求,通常和响应码302一起使用;
            2. 以前写法:
              1. Response.setStatus(302); 表示重定向
              2. Response.setHeader(“location”,”ResponseLineServlet”);

去的路径

            1. 现在写法:Response.sendRedirect(路径);
          1. content-type
            1. text/html;charset=utf-8
            2. Text/html 用来设置浏览器以指定格式解析数据
            3. Charset=utf-8 用来响应数据的编码表。
          2. Content-disposition  
            1. 一般用于下载文件或者图片
            2. 格式
              1. response.setHeader("content-disposition" , "attachment附件;filename=文件的名称.后缀");
            3. 例如
              1. response.setHeader("content-disposition","attachment;filename=xxx.jpg");
          3. Content-encoding
            1. 设置当前数据的压缩格式,告知浏览器以何种压缩格式解压数据。
    1. 响应体
      1. API
        1. 字节流:response.getOutputStream()  一般响应图片、视频、音频、文件...
        2. 字符流:response.getWriter() 一般用于响应文本
        3. Print和println的区别
          1. 不同的浏览器有不同的显示效果
          2. 谷歌中使用println,如果一开始以标签开始  则以html解析,如果是文本,则以文本解析。
          3. 火狐中使用println,都是以html形式解析
          4. 响应回去的是源码 ln是源码的回车换行 被浏览器解析后形成的是空格。
        4. Print和write的区别
          1. 其实没有什么区别,因为print的底层还是使用的。
          2. 但是建议使用print;
        5. 注意:
          1. 两个流不能同时使用,一但确实是字符流,则以字符流输出。
    2. 请求转发和重定向的区别
      1. 请求转发
        1. 一次请求多个资源
        2. 可以共享数据
        3. 地址不会发生变化
        4. 不能跳转站外资源
      2. 重定向
        1. 至少两次请求多个资源
        2. 不能共享数据
        3. 地址栏会发生变化
        4. 可以跳转站外资源
    3. 域对象servletContext
      1. 概述
        1. servletContext是一个容器(域对象),可以存储键值对数据,保存在servletContext中的数据不仅可以提供所有的servlet使用,而且可以在整个项目范围内使用(后期的过滤器和监听器也可使用servletContext);
        2. servletContext可以称为域对象,也可以称为根对象,上下文对象。
      2. 域对象的API
        1.  void setAttribute(String name, Object object) 存入数据
        2.  Object getAttribute(String name) 根据指定的数据名称获取数据
        3.  void removeAttribute(String name) 从servletContext中移除数据
      3. 图示

    1. 获取快捷方式
        1. 获取流文件
          1. src 用类加载器获得流文件

当前类.class.getClassLoader().getResourceAsStream();

          1. web路径下

servletContext.getResourceAsStream("路径");

        1. 获取访问的根路径(项目部署右边的别名)
          1. servletContext.getContextPath();
        2. 从web.xml中获得文件的类型
          1. servletContext.getMimeType("");
  • Cookie和Session
    1. 会话的概述
      1. 概念:浏览器和服务器之间的交互过程
      2. 开始:打开浏览器,访问服务器
      3. 结束:浏览器关闭,会话结束
      4. 会话的过程中产生的数据,我们就可以将这些数据临时保存。
    2. 会话技术:
      1. Cookie:浏览器端技术,将数据保存在浏览器中。
      2. Session:服务器端技术,将数据保存在服务器中。
      3. 图例:

    1. Cookie
      1. Cookie的原理

      1. 默认cookie是会话级cookie
        1. 会话浏览器打开,访问服务器会话开始
        2. 浏览器关闭,会话结束,此时叫做会话级。
      2. CookieAPI
        1. 创建:Cookie cookie = new Cookie(name , value)
        2. 响应:response.addCookie( cookie )
        3. 获得:request.getCookies() 获得数组
        4. getName() 获得cookie的name
        5. getValue() 获得cookie的value
        6. setMaxAge() 设置最大保存cookie时间
        7. setPath(“/”) cookie全局共享
        8. Name + path 覆盖
        9. Name + path + maxage(0) 销毁
    1. Session
      1. session原理

      1. Session的生命周期
        1. 创建:
          1. 第一次调用request.getSession()创建,以后再调用再调用直接获得(服务器不关的情况下)
        2. 销毁:
          1. 默认tomcat超时三十分钟自动销毁  web.xml已经设置

          1. 手动调用session.invalidate()手动销毁

          1. 服务器非正常关闭销毁,正常关闭不销毁,正常关闭被序列化到一个文件上。

      1. SessionAPI
        1. 创建:request.getSession()
        2. 域对象
      2. Cookie的细节部分
        1. Tomcat8允许中文,8以下版本不支持,不要出现任何符号
        2. Cookie的4 2 3 规则
          1. Cookie的值最大为4kb
          2. 一个网站最多存储20个cookie(不精准)
          3. 一个浏览器最多存储300个cookie(不精准)
        3. setMaxAge
          1. >0 倒计时
          2. =0 主动删除cookie
          3. <0 会话级
        4. setPath(“/”)
          1. 表示全部能自动携带
        5. 浏览器怎么判断同名
          1. 浏览器可以存在任意多个同名的cookie只要path路径不一致即可
          2. 如果name + path 不会唯一  则会覆盖

 

    1. Cookie和Session的关系
      1. cookie为什么不是域对象
        1. 因为cookie是浏览器端技术
      2. 当浏览器关闭,cookie消失,session还在?
        1. Cookie消失,但是session还在,但是session如果没有id是找不回来的,session默认在30分钟之后消失。
      3. Cookie和session是什么关系
        1. Session的底层基于cookie
        2. Cookie本身只存储id号,并不携带任何数据
      4. Cookie和session的应用场景
        1. Cookie在浏览器:不够安全,用户名密码(密码需要转码 加密)浏览器自带,历史记录等
        2. Session在服务器:相对安全,用户登录数据,session不能存太多数据。
    2. 域对象
      1. 概念:
        1. 在一定范围内共享数据
      2. 三个域对象:
        1. Request:一次请求,多个资源,共享自己的数据
        2. Session:默认一次会话,多个请求,共享自己会话中的数据
        3. ServletContext:一个项目,多个会话,多个请求,多个资源,共享同一份数据。
      3. API
        1. setAttribute(String key , Object value)
        2. getAttribute(String key )
        3. removeAttribute( String key )
      4. 如何选择域对象
        1. 能小不大原则(保存的时间)
        2. 需求优先原则
      5. 域对象比较
        1. Request:
          1. 创建:请求开始,创建
          2. 销毁:响应结束,销毁
        2. Session:
          1. 创建:第一次调用request.getSession()
          2. 销毁:
            1. 默认30分钟销毁(tomcat)
            2. 手动销毁invalidate()
            3. 服务器非正常关闭
        3. ServletContext
          1. 创建:项目创建(tomcat启动)
          2. 销毁:项目销毁(tomcat停止)
  • JSP
      1. jsp概述
        1. 是一种可以执行后台代码的特殊html。
        2. 其本质就是一个servlet。

      1. 语法
        1. Jsp注释
          1. <%--  jsp的注释,可以注释一切 --%>
          2. <!-- html的注释,仅可以注释html -->
        2. jsp脚本
          1. <% %> 编写java代码,其实就是方法体
          2. <%! %> 定义方法和全局变量 其实就是类体
          3. <%= %> 输出语句
        3. Jsp的三大指令

Page Include taglib

      1. EL表达式
        1. 目的:
          1. 替换脚本获得数据,简化对java代码的操作。
        2. 格式:
          1. ${域对象的字符串.key}
          2. 其域对象的字符串有:requestScope、sessionScope、applicationScope
          3. Application就是ServletContext,其实就是叫法不一样
          4. 简化版:${key} 从域中获得数据的时候(域中的key值相同),从小到大查询如果没有则显示空字符串而不是null
          5. 建议:不用的域,建议不要存储相同的key
        3. 作用:
          1. 主要是从域对象中查找指定的数据。
        4. 注意:
          1. 域中的key,去掉get首字母小写的方法名称。
          2. 从数组遍历出的数据[值1,值2...]
          3. 从集合遍历出的数据{值1,值2...}
          4. 从map遍历出的数据{key = value,key = value...}
        5. 域中存储复杂类
          1. 从数组去数据:${arr[0]},${arr[1]}...
          2. 从集合中去字符串:${list[0]},${list[1]}...
          3. 从集合中获取javaBean属性:${list[2].name}...
          4. 从map中取字符串:${map.key}...
          5. 从map中获取javaBean属性:${map.key2.name}...
      2. EL执行运算
        1. 算术运算
          1. 跟java一样,El表达式可以进行运算
          2. 注意:
            1. 在EL,只要是数字就能执行运算,EL在执行计算的时候,默认,将所有数据转换成Long类型
            2.  在EL中,如果在一个算式中有数据不存在,那么这个数据不参与运算,不报错继续执行。
            3. 在EL表达式中,字符串先转为数字类型,进行运算,如果没有,报错。
            4. 在EL表达式中,没有字符概念,单引和双引都一样。
            5. 在EL表达式中,除数有余数。
        2. 逻辑运算
          1. 跟java一样  El表达式支持逻辑运算
          2. 注意:
            1. ${not true} 和 ${!true}  的效果是一样的。
        3. 比较运算
          1. 跟java一样 EL表达式支持比较运算
          2. ${1 > 0 }
        4. 三元运算
          1. 跟java一样
          2. ${ 1>0 ? "大于" : "小于"}
        5. empty运算符
          1. 一般用来判断
            1. 字符串是否为null
            2. 集合大小为0
            3. 对象为null(重要)
          2. 非空
            1. ${not empty}
  • Jstl
    1. Jstl概述
      1. 从jsp1.1规范开始jsp就支持使用自定义标签,使用自定义标签大大降低了jsp页面的复杂程度,同时增强了代码的重要性。
    2. Jstl标签库提供的5大功能。
      1.  core:jstl的核心标签库。(目前还在使用)
      2.  fmt:格式化(国际化)的标签(使用较少,对页面显示数据,格式化,现在都交给前端去做)
      3.  functions:jstl中提供对字符串操作的函数库(不再使用,建议在数据显示在页面之前,在后台程序中,先格 式化好字符串,然后直接显示,不再页面做处理,如果有前端,交给前端处理(javascript  解析json格式数 据)
      4.  sql:jstl提供的在jsp页面上书写sql,操作数据库,目前已经不再(不允许)使用(jsp开发模式二,这个开发 模式不允许,在页面操作数据库)
      5. xml:jstl操作xml文件的。目前已经不再使用(页面传递数据,页面解析数据,使用json格式字符串代替 xml。
    3. 标签
      1. 在使用之前需要导两个包
      2. 标签名称
        1. <c:if> 用户java代码if(){}语句功能
          1. 属性
            1. Test:条件  支持EL表达式
            2. Var:临时变量名称,将test最后的结果临时保存
            3. Scope:临时变量所储存的域中
        2. <c:forEach> 用户代替java代码for循环语句
          1. 属性
            1. Items:遍历的集合数据 支持EL表达式
            2. Var:遍历数据的临时存放
            3. Begin:循环的开始
            4. End:循环的结束
            5. Step:步进语句
            6. VarStatus:临时变量的状态:
              1. Count:遍历到几次
              2. Index:遍历数据的索引
  • MVC和三层架构
    1. MVC
      1. Model:模型,封装数据
      2. View:视图,显示数据
      3. Controller:控制器,调用视图和模型
      4. 作用:分离业务逻辑显示数据。
      5. 图示

    1. 三层架构
      1. Web表示层:跟用户交互,接收数据,响应数据
      2. Service业务逻辑层:控制业务逻辑
      3. Dao数据库访问层:跟数据库交互
      4. 作用:分离业务逻辑,解耦。
      5. 图例:

    1. 开发都基于三层,三层是MVC的具体体现

十二、小技巧

1.判断传入的数据是否为空?

      1. 第一种方式  正常方式使用if

      1. 第二种方式  特殊方式使用工具类

2.数据库所需的参数

    1. 使用可变数组来传入  --->  利用集合的可变长度来转换为固常数组

 

3.数据参数的多种选择

  1. 获取快捷方式
        1. 获取流文件
          1. src 用类加载器获得流文件

当前类.class.getClassLoader().getResourceAsStream();

          1. web路径下

servletContext.getResourceAsStream("路径");

        1. 获取访问的根路径(项目部署右边的别名)
          1. servletContext.getContextPath();
        2. 从web.xml中获得文件的类型
          1. servletContext.getMimeType("");

 

5.处理BUG方式

 

 

 

十三、Filter

  1. 概述:
    1. Filter:是Java中预先定义好了的接口,可以过滤不同的内容,具体怎么过滤,需要使用者定义一个实现类,然后实 现接口中的过滤方法,在方法中书写过滤的条件。filter是对客户端访问资源的过滤,符合条件放行,不符合条件不 放行。
  2. 过滤器的使用步骤
    1. 编写一个Servlet
    2. 创建一个类实现过滤器接口
    3. XML方式或者注解方式配置过滤器拦截的请求路径
    4. 在doFilter方法中写过滤任务
    5. FilterChain.doFilter方法放行
  3. XMl方式

  1. 注解方式

  1. 生命周期
    1. Init(): 项目启动执行一次
    2. Destory(): 项目正常关闭执行一次。如果需要让这个请求通过过滤器,继续访问目 标资源,一定得调用FilterChain对象的doFilter方法,要不然请求就被过滤器拦截了。FilterChain对象的doFilter方 法表示对于请求放行。
    3. doFilter(): 执行过滤的方法
  2. 过滤器的执行流程

  1. 映射路径url-pattern
    1. 以Servlet为例
    2. 完全匹配:a/b/c/Servlet   或者   /Servlet
    3. 不完全匹配:/a/b/c/* 或者 /*
    4. 后缀名匹配:*.jsp  *.html
    5. 缺省匹配:/ 底层   404,500等
  2. 拦截时机/方式
    1. Request: 请求开始进行拦截 请求或者重定向
    2. Forward: 请求转发开始拦截 请求转发
    3. 注意:两者可以同时存在;
  3. 过滤链
    1. 概述:
      1. 我们java代码中,有时需要对同一个请求,进行多次不同业务的过滤,所以我们java代码中需要多个过滤 器。只有所有的过滤器都对请求进行了放行,请求才能访问到目标资源,只要多个过滤器中只有一个过滤器不放行 请求,那么这个请求都不能够访问到目标资源。多个过滤器组成的一个整体我们称为过滤器链。而且,过滤器链中 的过滤器是一个一个的执行的,一个过滤器执行完毕之后,会执行下一个过滤器,后面没有过滤器了,才会访问到 目标资源。只要其中一个过滤器没有放行,那么这个过滤器后面的过滤器也都不会执行了
    2. 过滤链的执行顺序
      1. 在XML配置方式中,过滤器的执行顺序是通过各自的标签在web.xml的顺序执行的。以配置文件的顺序执行
      1. 在注解配置方式中,过滤器的执行顺序是通过过滤器的类名的字符顺序来决定的。
    1. 注意:
      1.  在我们以后开发中 , 过滤器一般都是别人写好的 , 我们只需要配置下即可 , 因为过滤器是别人写好的 , 我们一般不会去修改人家的源代码 , 在类上添加注解 ,所以以后过滤器的配置一般采用xml方式.

十四、Listener

  1. 作用:

1.监听域对象,操过程

  1. ServletContextListener:
    1. 监听ServletContext对象的创建和销毁,创建的时候可以加载配置文件。
  2. 配置监听器
    1. web.xml配置listener 标签 和全限定路径名称即可
  3. 域对象
  1. Request  

创建: 请求开始创建

销毁: 响应结束销毁

  1. Session

创建: 默认第一次调用request.getSession()

销毁: 

  1. 超时三十分钟
  2. 手动调用invalidate
  3. 服务器非正常关闭

3. ServletContext   

创建: 项目启动创建 初始化 数据源  加载配置文件

销毁: 项目正常关闭销毁 资源释放

  1. 其他域监听器

ServletRequestAttributeListener

ServletContextAttributeListener 

HttpSessionAttributeListener

 

  1. 特殊的JavaBean

HttpSessionBindingListener

HttpSessionActivationListener

 

  1. 扩展监听器

 

implements ServletContextListener,
        HttpSessionListener, HttpSessionAttributeListener , ServletRequestListener, ServletRequestAttributeListener , ServletContextAttributeListener, HttpSessionBindingListener , HttpSessionActivationListener

 

 

十五、Jquery

  1. 概述
    1. jQuery是一个优秀的javascript的轻量级框架之一,兼容css3和各大浏览器,提供了dom、events、animate、 ajax等简易的操作。并且jquery的插件非常丰富,大多数功能都有相应的插件解决方案。jquery的宗旨是write less do more。
  2. 作用:
    1. Jquery最主要的作用是简化js的DOM树操作。
  3. Jquery的版本
    1. 1.x:兼容IE678,使用最为广泛的,官方只做BUG维护,功能不再新增。因此一般项目来说,使用1.x版本就 可以了,最终版本:1.12.4 (2016年5月20日)
    2. 2.x:不兼容IE678,很少有人使用,官方只做BUG维护,功能不再新增。如果不考虑兼容低版本的浏览器可 以使用2.x,最终版本:2.2.4 (2016年5月20日)
    3. 3.x:不兼容IE678,只支持最新的浏览器。除非特殊要求,一般不会使用3.x版本的,很多老的jQuery插件不 支持这个版本。目前该版本是官方主要更新维护的版本
    4. 开发版本与生产版本,命名为jQuery-x.x.x.js为开发版本,命名为jQuery-x.x.x.min.js为生产版本,开发版本 源码格式良好,有代码缩进和代码注释,方便开发人员查看源码,但体积稍大。而生产版本没有代码缩进和 注释,且去掉了换行和空行,不方便发人员查看源码,但体积很小。
  4. Jquery对象与js对象之间的转换
    1. js的DOM对象转换成jQuery对象,语法:$(js对象)
    2. jQuery对象转换成js对象,语法:jquery对象[索引] 或 jquery对象.get(索引)
  5. Jquery选择器
    1. 基本选择器

    1. 层级选择器

    1. 属性选择器

    1. 基本过滤选择器

    1. 表单属性选择器

  1. Jquery的DOM操作
    1. 语法

    1. 对DOM树中的属性进行操作

    1. 对class进行操作

    1. Jquery创建插入对象

    1. Jquery删除对象

    1. Jquery的效果和时间切换

添加:
hover 简化移入和移出方法,相当于移出和移入的结合。

  1. jquery的遍历
    1. 普通:for遍历
    2. 对象遍历:$(对象).each(function(index,ele){ })
    3. 全局遍历:$.eachh(需要被比遍历的对象,function(index,ele){ })
    4. 3.0遍历:for(变量的被遍历的对象){}
  2. 插件机制
    1. 对象:$。fn.extend({方法的名称:function(){},方法的名称:function(){} ...})
    2. 全局:$。extend({方法的名称:function(){},方法的名称:function(){} ...})
  3. 表单校验
    1. 通知验证校验器帮我们校验表单$(“表单id”)。验证
    2. 规则:{key:value,key:{key:value}},messages:{key:value,key:{key:value}}
    3. 规则:是key规则以后用来放置校验规则
    4. 消息:是关键提示信息
    5. 关键就是表单被检验组件名称属性
    6. 所有的key和所有的value属性都不能写错
    7. 表单校验规则

  1. 注意
    1. jquery在遍历的时候会转换成dom对象
    2. ATTR()和VAL()的区别
      • Attr()获取所有属性的值
      • Val()只获取值属性的值
    3. 亲和ATTR的区别
      • attr一般用来操作属性值非boolean属性
      • Prop一般用来操作属性值为boolean属性禁用选中已选中
    4. 格式:{键:值.....}

十六,阿贾克斯

1.Ajax的概念

是指一种创建交互式网页应用的网页开发技术.Ajax =异步JavaScript和XML,通过后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这一味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页如果需要更新内容,必须重载整个网页页面。

2.同步与异步的区别

      • 同步:发送一个请求,需要等待响应返回,然后才能发送下一个请求,如果该请求没有响应,不能发送下一个请求,客户端会处于一直等待过程中。
      • 异步:发送一个请求,不需要等待响应返回,随时可以再发送下一个请求,即不需要等待。

3.原生的阿贾克斯

          1. 得和提提
          2. 代码如下:

<SCRIPT>

 

//代码不需要记忆 - 以下代码不能使用IE

 

function btnClick(){

 

// 1。获得浏览器引擎对象

 

var xmlHttp = new XMLHttpRequest();

 

 

 

// 2。设置回调函数

 

xmlHttp.onreadystatechange = function(){

 

//执行四次回调需要的是第四次

 

// 4的状态只表示响应成功(响应回来了)但不表示响应的状态200 404

 

if(xmlHttp.readyState == 4){

 

 

 

//判断响应的状态码

 

if(xmlHttp.status == 404){

 

警报( “没有找到资源”);

 

}

 

如果(xmlHttp.status == 200){

 

//警报( “执行了回调”)

 

//获得服务器传输的数据

 

var myText = xmlHttp.responseText;

 

警报(会将myText);

 

}

 

 

 

}

 

 

 

}

 

 

 

// 3打开连接 - 设置连接

 

//参数1:方法提交方式

 

//参数2:url提交的路径

 

xmlHttp.open(“POST”,“DemoServlet”)

 

 

 

//原生的岗位需要额外的设置一个请求头,如果不是,则不需要设置

 

xmlHttp.setRequestHeader( “内容类型”, “应用程序/ x WWW的形式进行了urlencoded”);

 

 

 

// 4。发送

 

//参数:响应体

 

xmlHttp.send( “用户名=玫瑰&口令= 1234”);

 

}

 

</ SCRIPT

4.Jquery框架的AJAX

1. 获得提交

代码如下:

3.提提交

代码如下:

5. Ajax的请求

6.代码如下:

7.jquery3.0的新增签名方式

8.代码如下

 

  • JSON
    1. JSON的概念
    2. JSON是一种轻量级的数据交换格式。其实有特殊格式的字符串,主要目的是用于数据传输与交互。
    3. 语法格式

    1. JSON的转换工具
    2. JSON的转换工具是通过java的封装好的一些罐子工具包,直接将Java的对象或集合转换成JSON格式的字符串
    3. 常见的JSON转换工具

 

    1. 开发步骤
      • 导入JSON相关的JAR包
      • 创建的java对象或者集合
      • 使用杰克逊的objectMapper对象的writerValueAsString方法转换。

 

  • Redis的
    • NOSQL
      1. 概念:
      • Mysql:关系型数据库:表和表数据和数据之间存在着一定的联系
      • Nosql =不仅仅是sql,不仅仅是一项全新的数据理念,泛指非关系型对的数据库。
        1. Redis的:缓存数据库(数据存在内存当中)
      1. NOSQL的作用
      • 高性能对数据库高并发读写的需求
      • 巨大的存储对海量数据的高效率存储和访问的需求
      • 高可扩展性和高可用性对数据库的高可扩展和高可用性的需求
      1. 特点
      • 易扩展
      • 大数据量,高性能
      • 灵活的数据模型
      • 高可用
    • Redis的
      1. 概念
      • Redis的是用Ç语言开发的一个开源的高性能键值对(键值)数据库
      1. 目前支持的键值数据累型如下:
      • 字符串类型字符串
      • 散列类型散列
      • 列表类型列表
      • 集合类型集合
      • 有序集合类型的SortedSet
      1. 应用场景
      • 缓存(数据查询,短连接,新闻内容,商品内容等等)
        1. 短连接:类似于一个连接
        2. 长连接:类似于一个连接池
      • 聊天室的在线好友列表
      • 任务队列(秒杀,抢购,12306等等)
      • 应用排行榜
      • 网站访问统计
      1. 数据过期处理(可以精确到毫秒)
      2. 分布式集群架构中的会话分离
      1. Redis的的目录结构

    • Redis的的数据类型
      1. 字符串类型字符串
      • 概述
        1. 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型存入和获取的数据相同。在Redis中字符串类型的值最多可以容纳的数据长度是512M。
      • 常用命令

赋值

设置键值

取值

得到钥匙

getset key value 获得并且重写赋值

删除

del key

其他

关键

每一次值值原子性加1该键可以不存在不存在默认为0如果是汉字报错

decr键

每一次值值原子性减1该键可以不存在不存在默认为0

incrby key数字 

每一次值值原子性加2该键可以不存在不存在默认为0如果是汉字报错

decrby key数字

每一次值值原子性减2该键可以不存在不存在默认为0

 

附加键值

给键字符串拼接

      1. 哈希类型哈希
      • 概述
        1. Redis中的Hash类型可以看成具有String Key和String Value的map容器。所以该类型非常适合于存储值对象的信息。如用户名,密码和年龄等。如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。
      • 常用的命令

赋值

hset key filed value 赋值一对键值对

hmset密钥归档值[归档值...] 赋值多个

取值

hget key提交

hmget密钥提交[提交... ..] 获得多个值

hgetall key 获得所有的键值对

删除

del key 表示删除整个hash

hdel key提交

其他

hincrby key提交数字给指定的已提交的值增加指定数字

hexists key filed判断字段是否存在

hlen key集合的长度

hkeys key集合的所有提交

hvals key集合的所有值值

      1. 列表类型列表
      • 概述
        1. 在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(左)和尾部(右)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。列表中可以包含的最大元素数量是4294967295
      • 常用命令

赋值 

lpush键值[value 1 value 2 ... ..] 往链表的左边添加

rpush键值[值1值2 ......] 往链表的右边添加

取值

lrange key start end 查询一定范围start 开始end 结束  

结束> 0 从左往右

结束<0 从右往左 

删除

lpop key 左弹出

rpop key 右弹出

其他

llen key集合长度

lpushx key value只能添加一个值并且key必须存在左添加

rpushx key value只能添加一个值并且key必须存在右添加

lrem键计数值删除键中的几个值

count> 0表示从左往右删

count <0表示从右往左删

count = 0全部删除

lset key index value给指定索引的值重新覆盖

在|之前插入密钥 在指定的值值需要添加的值之后

给指定的值值前后增加需要的值

 

rpoplpush key1 key2 右弹出 左添加

 

任务队列(消息队列):

 

 

      1. 集合类型集合
      • 概述
        1. 在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加,删除或判断某一元素是否存在等操作。需要说明的是,这些操作的时间复杂度为O(1),即常量时间内完成次操作.Set可包含的最大元素数量是4294967295,和List类型不同的是,Set集合中不允许出现重复的元素。
      • 常用命令

设置无序不重复

 

赋值 

悲伤的d  成员[member1 member2] ....

取值

smembers key 获得集合的所有数据

删除

del key   删除整个

srem关键成员[member1 member2]

其他

sismember key member判断成员在key中是否存在

 

集合运算 

差集差异

sdiff key1 key2 key1的集合减去key2集合

交集国际

sinter key1 key2 key1的集合和key2集合重复的部分

并集联盟

sunion key1 key2 key1的集合和key2集合合起来去重

差集diff将结果存到newkey中

sdiffstore newKey key1 key2 key1的集合减去key2集合

交集inter将结果存到newkey中

sinterstore newKey key1 key2 key1的集合和key2集合重复的部分

并集union将结果存到newkey中

sunionstore newKey key1 key2 key1的集合和key2集合合起来去重

 

scard key查看集合内数量

srandmember key返回集合中随机变量

 

 

应用场景:账号,身份证,ip地址 

开发中用来模拟的SessionID

 

      1. 有序集合类型的SortedSet(了解)
      • 常用命令

赋值 

zadd key score1 member1 [score1 member1 ....]

取值

zrange key start end [withscores]   表示查看开始到结束默认排序分数升序    

结束> 0 从左往右

结束<0 从右往左 

zrevrange key start end [withscores] 表示查看开始到结束默认排序分数升序    

结束> 0 从左往右

结束<0 从右往左 

 

zrangebyscore key minScore maxScope [withscores] [limit startIndex pageSize] 根据分数取范围

 

删除

zrem关键成员[...]

其他

zcard key查看长度

zscore关键成员查看成员分数

zremrangbyrank key start end删除一定范围数据根据排名 

zremrangebyscore key minScore maxScore删除一定范围数据根据分数

zincrby key分数成员给指定成员添加分数

zcount key minScore maxScore查看分数范围内的人数

zrank key成员返回成员在集合中的排名(从小到大)

zrevrank key成员返回成员在集合中的排名(从大到小)

 

应用场景:排行榜游戏排名  

      1. Redis的的通用命令
        1. keys * 表示通配符 ?表示占位符
        2. del key 表示直接删除

 

        1. 存在键表示键是否存在
        2. 重命名关键newKey重命名

 

        1. type key 查看key 的数据类型

 

        1. expire key 表示是多少秒 key 过期   
        2. ttl key 表示查看所剩过期时间

时间> 0 表示 键还剩存活时间

时间= -2 表示已经失效不存在 

时间= -1 表示永不过期

 

        1. Flushdb 删除缓存
        2. Flushall 删除所有
        3. 用来模拟会话sessionid
    1. Redis的的持久化
      1. Redis的持久化概述
      • Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍然保存数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化.Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或将二者结合使用。
      • RDB持久化(默认支持,无需配置)
        1. 该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘
      • AOF持久化
        1. 该机制将以日志的形式记录服务器所处理的每一个操作,在redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。
      • 无持久化
        1. 我们可以通过配置的方式禁用Redis服务器的持久化功能,这样我们就可以将Redis视为一个功能加强版的memcached了。
      • Redis的可以同时使用RDB和AOF
      1. RDB和AOF持久化机制的优缺点
      • RDB:快照机制 直接恢复快照默认

优点恢复快

缺点数据容易丢失

      • AOF:日志机制 将我们的每一个记录行命令 记到一个日志文件中 在启动的时  将命令重新执行一次

优点数据保持完整

缺点恢复慢 文件太大

    1. RDB持久化机制配置

    1. AOF持久化机制配置

    • jedis连接池的使用
      1. 概念
      • Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java,C,C#,C ++,php,Node.js,Go等。在官方网站里列一些Java的客户端,有Jedis,Redisson,Jredis,JDBC-Redis,等其中官方推荐使用Jedis和Redisson。在企业中用的最多的就是Jedis,Jedis同样也是托管在github上,地址:https://github.com/xetorthio/jedis 。
      1. 常用API

      1. Jedis连接池
      • jedis连接资源的创建与销毁是很消耗程序性能,所以jedis为我们提供了jedis的池化技术,jedisPool在创建时初始化一些连接资源存储到连接池中,使用jedis连接资源时不需要创建,而是从连接池中获取一个资源进行redis的操作,使用完毕后,不需要销毁该jedis连接资源,而是将该资源归还给连接池,供其他请求使用。

 

  • Maven的
    • 概念
    1. Maven是一个项目管理工具,充分运用了面向对象的思想,可以通过一小段描述信息来管理项目的构建,报告和文档.Maven除了以程序构建能力为特色之外,还提供高级项目管理工具。 Maven的缺省构建规则有较高的可重用性,所以常常用两三行Maven构建脚本就可构构简单的项目。
    • 作用
    1. maven对项目的第三方构件(jar包)进行统一管理。向工程中加入jar包不要手工从其它地方拷贝,通过maven定义jar包的坐标,自动从maven仓库中去下载到工程中。
    2. maven提供一套对项目生命周期管理的标准,开发人员,和测试人员统一使用maven进行项目构建。项目生命周期管理:编译,测试,打包,部署,运行。
    3. Maven的对工程分模块构建,提高开发效率。
    4. 生命周期:
      • 编译:编译正式源码,SRC /主/ JAVA
      • 测试:编译测试源码,SRC /测试/ JAVA
      • 包:打包,打包到目标目录下
      • 安装:安装,把当前项目上传到本地仓库
      • Deploy:发布,把当前项目上传到远程仓库
      • 注意:默认生命周期中的每一个命令都是顺序执行的,只要执行了其中任意一个命令,就以为意味着之前所有的命令肯定都已经执行过了。
      • Clean:属于清理生命周期,单独一个命令就是一个生命周期,作用是把target目录删掉。
    • maven的概念模型
    1. 项目对象模型 (Project Object Model)。POM对象模型,每个maven工程中都有一个pom.xml文件,定义工 程所依赖的jar包、本工程的坐标、打包运行方式。
    2. 依赖管理系统(基础核心 )。maven通过坐标对项目工程所依赖的jar包统一规范管理。
    3. maven定义一套项目生命周期。清理、初始化、编译、测试、报告 、打包、部署、站点生成。
    4. 一组标准集合。maven工程有自己标准的工程目录结构、定义坐标有标准。
    5. maven 管理项目生命周期过程都是基于插件完成的,例如:开发中使用的tomcat插件。
    • Maven的仓库

    • Maven的坐标
    1. groupId:定义当前Maven项目名称
    2. artifactId:定义项目模块
    3. version:定义当前项目的当前版本

  1. 解决项目构建缓慢问题
    1. 方式一

    1. 方式二

 

 

 

二十、maven高级

  1.  maven的好处
      • 节省磁盘空间
      • 可以一键构建
      • 可以跨平台
      • 应用在大型项目时可以提高开发效率
    •  Maven的核心功能
      • 依赖管理:就是对jar包的管理;
      • 一键构成:使用maven集成的tomcat插件对项目进行构建。
    •  三种仓库
      • 本地仓库
      • 远程仓库(私服)
      • 中央仓库
    •  常见的命令
      • Compile:编译正式源码
      • Test:编译测试源码
      • Packet:打包到targer目录下
      • Install:安装到本地仓库下
      • Deploy:发布到私服
      • Clean:删除targer目录
    •  坐标的书写规范
      • groupId:公司或组织域名的倒序
      • artifactId:项目名或者模块名
      • Version:版本号
    •  添加坐标
      • 在本地仓库中搜索
      • 互联网上搜,推荐网站: http://www.mvnrepository.com/
    •  导入的jar包时解决的jar包冲突的三个原则
      1. 直接依赖和传递依赖
        1. 甲项目中直接导入了乙包就可以说甲直接依赖于B中。;
        2. 甲项目中直接导入了乙包.B包又依赖了Ç包..最终Ç包也进入到了一个项目中,就可以说甲传递依赖于C。;
      2. 导入的jar包原则
        1. 原则一
          1. 哪个罐子包在靠上位置,最终进入项目中的就是哪个罐子包下的依赖包。
        2. 原则二
          1. 直接依赖优先于传递依赖。
        3. 原则三
          1. 直接排除法

 

    1.  依赖范围
      • 测试
      • 运行
      • 提供
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值