JavaWeb

前端技术:

一个设计优良的网页一般我们要分成三个部分:结构、表现、行为。
结构、表现、行为要求三者分离。
结构、表现、行为,分别对应了三个技术。
结构:HTML
表现:CSS
行为:JavaScript jQuery (重点)
JavaScript
- 浏览器端的脚本语言
- JS也是一门面向对象的语言,但是它和Java不同,
Java的面向对象时基于类的,而JS的面向对象是基于原型的。
- 对于JS来说,主要需要我们掌握的就是DOM编程。
- DOM指Document Object Model(文档对象模型)
- DOM实际上就是通过JS去操作网页。
- Document 文档:
指的是整个的HTML文档。
- Object 对象
指的是将网页中所有的内容都转换为了对象。
- Model 模型
使用模型来表示这些节点之间的关系。
- JavaScript中已经为我们提供了一个document对象,它代表整个HTML文档,
HTML中所有的节点都是他的后代节点。我们可以通过document对象来查询节点。

    - 通过document查询元素节点的方法
        - 通过id查询一个元素节点对象:document.getElementById(id);
        - 通过标签名查询一组元素节点对象:document.getElementsByTagName(标签名);
        - 通过name属性查询一组元素节点对象: document.getElementsByName(name属性);

> jQuery
    - jQuery是目前最受欢迎的JavaScript库。
    - jQuery用来简化JavaScript的开发,并且解决了一些浏览器之间的兼容性问题。
    - 目前jQuery主要有两个版本1.X和2.X
        2.X主要用于移动端的开发(不支持IE8以下的浏览器)
        1.X主要用于PC端的开发(支持IE6 、7、8)
    - jQuery的核心函数:
        - $是jQuery中核心函数
        - jQuery的大部分功能都需要通过核心函数来实现
        - 核心函数根据参数的不同主要有4种功能:
            - 传一个函数作为参数
                $(function(){}) --> 作用和window.onload = function(){}类似,会在整个文档加载完毕之后执行

            - 传一个选择器的字符串
                $(选择器) --> 作用可以根据选择器从页面查找指定的元素
                    选择器:
                        1.基本选择器
                        2.层级选择器
                        3.过滤选择器

            - 传一段HTML代码
                $("<li>广州</li>") --> 可以根据HTML代码去创建对象

            - 传一个DOM对象
                $(DOM对象) --> 可以将DOM对象转换为jQuery对象

        - DOM对象和jQuery对象的转换
            DOM --> jQuery
                var $obj = $(obj);

            jQuery --> DOM
                var obj = $obj[0];

XML

XML实际上就是一种表示数据的格式,使用不同的XML标签来定义不同的数据。
实际开发中我们使用XML,主要是做一些配置文件。
对于XML来说解析是一个难点,面试时候有可能会问到。
解析XML主要分为两个体系:DOM和SAX
DOM(Document Object Model)
- DOM解析是一次性将整个文档都加载进内存中,生成一棵DOM树,然后我们通过操作这棵树,来解析文档。
- 优点:
- 纯面向对象的解析方式,使用起来比较简单
- 一次性将整个文档都加载进内存中,我们可以反复操作。
- 可以对XML文档进行增删改查的操作
- 缺点:
- 一次性将文档都加载进内存,解析性能较差,并且会占用较多的内存
- 扩展:
- 由DOM扩展出来dom4j,他是JavaEE开发首选的方式。

> SAX(Simple API for XML)
    - SAX是基于事件的回调的方式,一个节点一个节点的解析,同一时刻只会解析一个节点。
    - 优点:
        - 一次只解析一个节点,解析性能好,占用内存小
    - 缺点:
        - 基于事件回调的方式,使用起来相对要麻烦一些
        - SAX解析完一个节点以后,将会将节点内容丢弃,不能反复解析某个节点,
            如果想重复解析,则需要重新再解析一遍
        - SAX解析只能进行查询的操作
        - SAX解析一旦开始就不能手动停止,必须等到解析结束
    - 扩展:
        - 由SAX扩展出PULL,解决SAX不能手动停止的问题,Android内置的解析方式。

Http协议:

HTTP协议规定的是浏览器和服务器之间通信的报文的格式
报文的格式:
- get请求报文
请求首行
请求头

    - post请求报文
        请求首行
        请求头
        空行
        请求体

    - 响应报文
        响应首行
        响应头
        空行
        响应体

> get请求和post请求
    1.get请求没有请求体,post请求有请求体
    2.get请求通过url地址来发送请求参数,post请求通过请求体发送请求参数
    3.get请求通过url发送请求参数,大小有限制255个字符
        post请求通过请求体发送请求参数,大小没有限制
    4.get请求发送的请求参数可以通过地址栏看见,
        post请求的参数不能通过地址栏看见
            post相比于get请求稍微安全一些。
    5.除了表单的method属性设置为post时,其他的全都是get请求。(没有考虑AJAX)
    6.一般开发中提交表单时,全都使用post请求。

Servlet

Servlet的生命周期:
- 从Servlet实例被创建到被销毁的过程
- Servlet的生命周期方法:
1.构造器 –> 第一次处理请求时调用,用来创建Servlet实例,只会调用一次。
2.init –> 构造器调用之后马上被调用,用来初始化Servlet,只会调用一次。
3.service –> 每次处理请求的时候都会调用。会调用多次。
4.destroy –> servlet对象被销毁前调用(Servlet对象会在项目卸载的时候销毁),只会调用一次。

    - Servlet的实例默认是在第一次处理请求时创建的,
        我们可以在servlet标签中通过load-on-startup标签来设置Servlet的启动时机,
            当我们为load-on-startup设置一个大于等0的数时,它会在服务器一启动的时候就创建实例,
                同时数值越小,越先创建。

    - 转发和重定向:
        1.转发时浏览器发送了1次请求,重定向时浏览器发送了2次请求。
        2.转发是在服务器内部进行的,重定向是在浏览器端进行的。
        3.转发时地址栏不会发生改变,重定向时地址栏会发生改变。
        4.转发时request域中的属性不会丢失,重定向时request域中的属性会丢失。
        5.转发:
            request.getRequestDispatcher("路径").forward(request,response);
          重定向:
            response.sendRedirect("路径");

    - 路径问题:
        - 在开发中我们使用绝对路径,尽量不适用相对路径。
        - 绝对路径使用 / 开头。
        - 绝对路径分两种:
            1. 由浏览器解析的绝对路径:
                - 它是以服务器的根目录为绝对路径的
                    http://localhost:8080/
                - 需要加上项目名
                - 主要情况:
                    1) html标签中的路径
                    2) 重定向时的路径

            2. 由服务器解析的绝对路径
                - 它是以项目的根目录为绝对路径
                    http://localhost:8080/项目名/
                - 不需要加上项目名
                - 主要情况:
                    1) 转发时的路径
                    2) url-pattern的路径

JSP
- JSP本质就是一个Servlet
- 我们在访问一个JSP时,服务器会将JSP翻译为一个Servlet,然后在调用Servlet来处理请求。
- jsp –翻译–> java –编译–> class
- JSP中的隐含对象
- 隐含对象指可以在JSP中直接使用的对象
- JSP中一共有9个隐含对象
pageContext
- 类型 PageContext

        request
            - 类型 HttpServletRequest

        session
            - 类型 HttpSession

        application
            - 类型 ServletContext

        out
            - 类型 JspWriter

        page
             - 类型 Object

        response
            - 类型 HttpServletResponse

        exception
            - 类型 Throwable

        config
            - 类型 ServletConfig

    - 在JavaWeb中一共有四个域对象pageContext 、 request 、session 、 application
    - 在JSP可以获取全部四个域对象,在Servlet中只能获取三个,获取不到PageContext。

- EL表达式
    语法:${表达式}
    - 作用:代替JSP表达式,主要用来向页面中输出一个对象的

        initParam               全部应用程序参数名组成的集合
        cookie                  所有cookie组成的集合
        header                  HTTP请求头部,字符串
        headerValues            HTTP请求头部,字符串集合
        param                   所有请求参数字符串组成的集合
        paramValues             所有作为字符串集合的请求参数
        pageContext             当前页面的javax.servlet.jsp.PageContext对象
        pageScope               页面范围内所有对象的集合
        requestScope            所有请求范围的对象的集合
        sessionScope            所有会话范围的对象的集合
        applicationScope        应用程序范围内的scoped变量组成的集合   




- JSTL
    - 作用: 用来代替JSP脚本片段的。
    - JSTL的标准由sun公司制定的,有Apache公司来实现的,所以在使用JSTL时,需要导入两个jar包:
        taglibs-standard-impl-1.2.1.jar
        taglibs-standard-spec-1.2.1.jar
    - 常用库
        1.核心标签库(c标签)
            <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
        2.函数标签库
            <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
        3.国际化标签库
            <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

会话控制
- Http协议是一个无状态的协议,服务器不能通过报文来区分出多次次请求是否发送自同一个用户。
所以我们需要一个技术来做会话控制。会话控制我们主要有两个技术Cookie和Session
- Cookie:

Cookie实际上就是一个头。
Cookie由服务器创建,以响应头的形式发送给浏览器
浏览器收到Cookie之后,会将Cookie保存
下次访问服务器时,浏览器会以请求头的形式将Cookie发回
服务器就可以根据浏览器发回的Cookie来识别不同的请求。
Cookie的不足:
1.Cookie由服务器创建由浏览器保存,每次浏览器发送请求时,都需要带着Cookie,
如果Cookie中信息过多的话,会占用大量的网络资源,性能会很差。
2.各个浏览器对Cookie的数量和大小都有限制,所以我们不能在Cookie中保存过多的信息。
3.Cookie中的内容都是纯文本的,不太安全。

- HttpSession:
    - HttpSession为了解决Cookie的不足而出现。
    - HttpSession的对象是保存到服务器中。
    - 每一次会话都对应一个HttpSession对象。
    - 每一个HttpSession都有一个唯一的ID,当服务器创建好Session对象以后
        会将Session对象以id为键保存到一个SessionMap中,
            然后会将Session的id以Cookie的形式发送给浏览器,
        浏览器再访问服务器时,它会带回这个Cookie,
            这样服务器就可以根据id找到对应的HttpSession对象。
    - session对象创建时机:
        session对象会在getSession方法第一次调用时创建。

- token
    - token(令牌),用来防止表单的重复提交
    - token的流程:
        1.服务器创建一个唯一的标识作为token,然后将token保存到session中
        2.将token放入到表单的隐藏域中,和请求一起发送
        3.检查request中token和session中的token是否一致
        4.一致,处理请求
        5.不一致,转到错误页面
        6.token是一次性,用完了要从session中移除

Filter
- Filter过滤器的意思。
- Filter的作用:
1.Filter可以请求到目标资源之前进行拦截。
2.Filter还可以放行请求,使请求到达目标资源。
3.Filter可以在响应到达浏览器之前做一些处理。

- Filter的创建:
    1.创建一个类并实现Filter接口
    2.在web.xml文件中配置Filter
        <filter>
            <filter-name></filter-name>
            <filter-class></filter-class>
        </filter>
        <filter-mapping>
            <filter-name></filter-name>
            <url-pattern></url-pattern>
        </filter-mapping>

- Filter的生命周期方法:
    构造器:服务器一启动就会调用,用来创建Filter的实例,只会调用一次,Filter也是单例。
    init:构造器调用之后马上被调用,用来初始化Filter,只会调用一次
    doFilter:每次拦截请求时都会调用,会调用多次
    destroy:Filter被销毁前(项目卸载时)调用,用来做一些收尾工作,只会调用一次

JSON
- JSON和XML类似,它也是一种数据格式。
- 但是JSON存储和传输数据的性能比XML更好。
- 例子:
{“name”:”孙悟空”,”age”:18,”gender”:”男”}

    <student>
        <name>孙悟空</name>
        <age>18</age>
        <gender>男</gender>
    </student>

- XML更方便阅读,而JSON更方便传输。
- 在开发中一般使用XML作为配置文件,
    使用JSON来传输数据。
- JSON的格式:
    1.JSON对象
        {"属性名1":属性值1,"属性名2":属性值2,"属性名3":属性值3}
    2.JSON数组
        [属性值1,属性值2,属性值3,属性值4]

- JSON中可以使用的数据类型:
    1.字符串
    2.数字
    3.布尔值
    4.null
    5.对象
    6.数组

servlet运行流程

首先Servlet被部署到Web容器中,当客户端发送调用这个Servlet的请求到达Web容器时,
Web容器会先判断所调用的Servlet实例是否存在。

如果不存在,就装载当前所调用的Servlet并调用构造方法生成这个Servlet的实例,
其次再调用这个实例的init()方法(init()这个方法只会在Servlet初始化的时候调用一次,
除非这个Servlet被重新部署)进行初始化,然后新创建一个线程,并在新建线程中调用这个实例的service()方法,
service()方法再根据请求的具体类型调用doGet()、doPost()等方法,然后生成动态的回复内容,
最后服务器发送回复内容给客户端的浏览器。

如果存在,就直接新创建一个线程,并在新建线程中调用这个实例的service()方法,service()方法再根据请求的具体类型调用doGet()、doPost()等方法,
然后生成动态的回复内容,最后服务器发送回复内容给客户端的浏览器。

当Servlet不再需要使用的时候,比如其所在的Web应用被卸载或Web服务器关闭时,它就会被卸载掉,卸载前调用destory()方法,完成所有相关资源的释放。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值