第四十一天 Java基础学习(三十五)

一、JSP内置对象

●内置对象

因为SP的本质是Servlet,在JSP文件经过转译之后,生成JAVA代码,在运行时JSP给我们准备好了九个可以直接使用而不用我们自己去new的对象,这九个对象我之为内置对象.

内置对象完全由SP自行去维护,我们直接使用即可。

●九大内置对象

confia ;page ;exception;request ;response ;session ;application ;out ;pageContext 

●四个域对象

pageContext    page域                当前页面内可用

request          reqeust域            一次请求

session          session域             一次会话

application      application域        整个项目运行

●响应对象

response        响应对象

●输出流对象

out              打印流对象

●其他三个对象

servletConfig      由于JSP本身也是一个Servlet,所以容器也会给准备一个ServletConfig

page                  就是JSP转换的Servlet的对象,也就是当前SP对象本身

exception          异常对象在错误提示页上使用,当isErrorpage=true才具有该对象

●注意事项:

•response对象

当服务器创建request对象时会同时创建用于响应这个客户端的response对象。

•out对象

是JspWriter类的实例,不是PrinterWriter的实例;用来在response对象中写入内容。JspWriter类包含了大部分java.io.PrintWriter类中的方法。不过,JspWriter增了一些专为处理缓存而设计的方法。另外JspWriter类会抛出IOExceptions异常。

最初的JspWriter类对象根据页面是否有缓存来进行不同的实例化操作。可以在page指令中使用buffered='false"属性来轻松关闭缓存。

•pageContext对象

PageContext类的实例,用来代表整个JSP页面;提供对SP页面所有对象以及命名空间的访问。

●Servlet与JSP的联系和区别

联系:

1.JSP和Servlet都是Sun公司推出的动态网页技术

2.基于Servlet开发页面的繁琐性,推出JSP来简化页面开发

3.JSP本质上是一个Servlet,会翻译成一个Servlet

区别:

1.JSP使人们把显示和逻辑分隔成为可能,这意味着两者的开发可并行进行;而Servlet并没有把两者分开。

2.JSP是在HTML代码里写JAVA代码,框架是HTML;而Servlet是在JAVA代码中写HTML代码,本身是个JAVA类。

3. Servlet需要在web.xml中配置,而JSP无需配置。

4.目前JSP主要用在视图层负责显示,而Servlet主要用在控制层负责调度

 

JSP表面上是一个HTML,本质上是一个Servlet。

●JSP的使用总结

1.创建Jsp文件,在项目的web目录下创建。

2.使用page指令设置Jsp的转译细节(一般自动生成的就够用)

3.使用tablib指令引入第三方的自定义标签来使用(JSTL标签)

4.使用HTML,CSS,JQuery完成页面的开发

5.使用<%%>声明java脚本片段完成数据的动态拼接

6. 获取request或者session中的数据拼接到当前页面中(内置对象)

四、EL表达式学习

1.问题

Servlet负责请求的处理;jsp负责请求处理结果的展示。

往往是使用Servlet处理完请求,将请求结果数据放在request域中,然后转发到jsp页面,在jsp页面通过<%%>也就是java脚本的方式取出request域中的据,然后进行展示。

也可以将Servlet处理请求后的结果放在session域中,然后将请求重定向到jsp页面,在jsp页面通过<%%>也就是java脚本的方式取出session域的数据,然后进行展示。

虽然Servlet结合jsp的方式已经极大的简化了开发功能和页面的操作。但在jsp页面中取域中的数据要使用<%%>和HTML代码进行拼接的方式展示数据,是比较麻烦,而且不利于阅读。

•可以在jsp页面中使用EL表达式来获取域对象中的数据

●特点

1.可以获取作用域对象中的数据

2.底层使用的是反射,在使用的时候可以通过键名即可获取对应的值

3.简化了在jsp页面中使用<%%>获取域对象数据的方式

●使用

基本语法

1.${键名},键名是域对象中存储的数据的键

2.${键名.属性名.属性名..},可以获取域对象中级联属性的值

3.${键名[角标]},获取域对象中存储的list集合或者数组中指定角标的数据

4.注意:${}不仅可获取域对象中的数据,而且会将该数据打印到浏览器中。如果获取不到数据,也不会报错,只是不显示而已。

•作用域数据查找顺序 

使用EL表达式获取域数据的时候,如果没有指明作用域,那会按照作用域由小到大的顺序去找,直到找到为止:pageContext ---> request ---> session ---> application

●指定获取某个作用域中的数据

•${pageScope.键名}          获取page域对象中的数据

• ${requestScope.键名}     获取request域对象中的数据

•${sessionScope.键名}       获取session域对象中的数据

•${applicationScope.键名}  获取application域对象中的数据

●获取request对象中的请求数据

${param.键名},可以获取request中携带的请求参数的数据

●EL表达式可以使用比较运算和算术运算

${键名 逻辑运算符 键名}

${键名 算术运算符 键名}

注意:+表示的是算术运算,而不是字符串拼接。

●JDK8新特征

•Lambda 表达式:

Lambda表达式基于数学中的入演算得名,直接对应于其中的lambda抽象,是一个匿名函数,即没有函数名的函数。

•Lambda 表达式好处:

使用Lambda 表达式可使代码变的更加简洁紧凑。并且Lambda表达式可和StreamAPI等相结合,使代码更加简洁紧凑。Lambda 表达式经常用来替代部分匿名内部类。

•Lambda 表达式的语法

(parameters) -> expressiom或(parameters) ->( statements;

参数:要重写的方法的形参列表

->:lambda运算符

表达式/语句体:要重写的方法的方法体

•Lambda 表达式的本质:Lambda表达式是一种匿名函数(不是匿名内部类),简单地说,它是没有声明的方法,也即没有访问修饰符、返回值声明和名字。它实质属于函数式编程的概念。(不是匿名内部类的,此点在此不做展开)。

注意:

    Lambda表达式如果多个参数,参数外的()不可省略。

     有返回值的Lambda表达式,如果方法体只有一条语句,可同时省略return和{}。

      虽然使用 Lambda 表达式可以对某些接口进行简单的实现,但并不是所有的接口都可以使用Lambda 表达式来实现。Lambda 规定接口中只能有一个需要被实现的抽象方法,不是规定接口中只能有一个方法,称为函数式接口。

 

• 参数类型可以省略不写

•如果只有一个参数,()可以省略不写

 

你可能感兴趣的:(学习)