JSP EL

Day47 JSP

  1. JSP
    1.1 jsp解决了什么问题
    Servlet中,要想将数据等内容打印到客户端页面中,需要在java代码中拼接大量的html代码,非常的不合理。
    Jsp就是解决这个问题。只需要把数据交给jsp,由jsp来完成数据的展示工作。
    jsp与servlet的区别与联系
    jsp和servlet的区别和联系:
    1.jsp经编译后就变成了Servlet.
    (JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)
    2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.
    3.Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.
    Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。
    而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。

联系:
JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。
Servlet和JSP最主要的不同点在于:
Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。
而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
JSP侧重于视图,Servlet主要用于控制逻辑
Servlet更多的是类似于一个Controller,用来做控制。

1.2 介绍
JSP—Java Server Pages
拥有servlet的特性与优点(本身就是一个servlet)
直接在HTML中内嵌JSP代码
JSP程序由JSP 引擎先将它转换成Servlet代码,接着将它编译成类文件载入执行
只有当客户端第一次请求JSP时,才需要将其转换、编译
1.3 基础语法
<%! %> 表示servlet的类体
<% %> 表示service()方法体
<%= %> 表示 println(); 用于向页面输出内容
在这里插入图片描述
在这里插入图片描述

1.4 包含
包含,就是在页面中载入一个页面,类似于jQuery中的load
1.4.1 静态包含

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

Title不显示

静态包含 会把两个文件当成一个文件来解析,JSP解析引擎在解析的时候,只会生成一个class和java文件

1.4.2 动态包含
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

动态包含,会生成两个java文件,和两个class文件,只是在包含页面中,动态去载入了被包含页面而已,都是一个个体

Flush=true 建议写上,默认在进行包含的时候,会把被包含页面生成一条HTML语句,一次性导入,如果内容过多,导致缓冲区容易出现问题.,如果设置为true之后,当内容过多的时候,就开始向页面输出导入

比如多个页面有相同的菜单栏,那么没必要每个页面都写一遍
可以把菜单栏写到一个单独的页面中,然后再其他页面中进行包含即可

1.5 跳转
1.5.1 重定向
在这里插入图片描述

在这里插入图片描述

发送两条请求
数据不共享
地址栏显示后者(被跳转的路径)
1.5.2 请求转发
在这里插入图片描述

发送一条请求
数据 共享
地址栏不变,显示前者

Jsp中的forward 会终止程序执行
因为JSP引擎解析之后,会在跳转语句之后添加return
在这里插入图片描述

1.6 内置对象
内置对象,就是你可以直接使用,人家已经准备好了

在这里插入图片描述
在这里插入图片描述

内置对象,在jsp中默认内置好的java对象,可以直接使用。在servlet中,一些对象,需要我们手动创建对象,并不能直接使用,比如说session对象。那在jsp中,如何使用session等对象呢。直接用即可。这也是为什么叫内置对象。

变量名					真实类型						作用
  • pageContext PageContext 当前页面共享数据,还可以获取其他八个内置对象
  • request HttpServletRequest 一次请求访问的多个资源(转发)
  • session HttpSession 一次会话的多个请求间
  • application ServletContext 所有用户间共享数据
  • response HttpServletResponse 响应对象
  • page Object 当前页面(Servlet)的对象this
  • out JspWriter 输出对象,数据输出到页面上
  • config ServletConfig Servlet的配置对象
  • exception Throwable 异常对象

Out : 内置对象是一个缓冲的输出流,用来给客户端返回信息。它是javax.servlet.jsp.JspWriter的一个实例
用于向页面输出内容
常用方法
println():向客户端输出各种类型数据
newLine():输出一个换行符
jsp的newLine()函数只是在组装html代码的时候对html的源代码进行了换行
close():关闭输出流

out.clear()是直接清空缓冲区数据,不输出到客户端且刷新缓存时抛出异常
out.flush()先输出缓冲区数据再清空
out.clearBuffer() 清空缓冲区,不输出到客户端
*缓冲问题:

分析:如果按没有jsp缓存和servlet缓存的话,输出的结果应该是abc,但是输出的却是bac,为什么呢?按照我们上面所说的原理进行分析,out对象是先将其输出到JSP缓存中,所以a加入了jsp缓存,response.getWriter().print(“b”)是直接将b输出到servlet缓存中,然后又使用out对象将c输出到jsp缓存,到程序结束,servlet缓存中有b,然后jsp会将缓存中的内容就刷新到servlet缓存中,serlvet就是bac了,然后到浏览器也就得到我们的输出结果了。如果将out.flush()注释去掉,答案就是abc。原因是我们手动的将jsp缓存里面的数据刷新到servlet缓存里面了。

Request :内置对象表示的是调用JSP页面的请求。通常,request对象是javax.servlet.http.HttpServletRequest接口的一个实例

常用方法
getMethod():返回客户端向服务器端传送数据的方法
getParameter(String paramName):返回客户端向服务器端传送的参数值,该参数由paramName指定
getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举类型数据(Enumeration)
getParameterValues(String name):获得指定参数的所有值,由name指定
getRequestURI():获得发出请求字符串的客户端地址
getRemoteAddr():获取客户端的IP地址
getRemoteHost():获取客户端机器名称
getServerName():获取服务器的名字
getServletName():客户端所请求的脚本文件路径
getServerPort():获取服务器端的端口
getContextPath() 获取当前项目名 /xxx

Response : 表示的是返回给客户端的响应
是javax.servlet.http.HttpServletResponse接口的一个实例
经常用于设置HTTP标题,添加cookie、设置响应内容的类型和状态、发送HTTP 重定向和编码URL
常用方法:
addCookie(Cookie cookie):添加一个Cookie对象,用于在客户端保存特定的信息
addHeader(String name,String value):添加HTTP头信息,该Header信息将发送到客户端
containsHeader(String name):判断指定名字的HTTP文件头是否存在
sendError(int):向客户端发送错误的信息
sendRedirect(String url):重定向JSP文件
和jsp:forward的区别
sendRedirect通过客户端发起二次申请,不同的request对象
Jsp:forward是同一个request,在服务器内部转发
setContentType(String contentType):设置MIME类型与编码方式

session和application
<% @page session=“true”%>–表示session功能已经在jsp页面中启动,一次会话
session常用方法:
void setAttribute(String name,Object value)
Object getAttribute(String name)
boolean isNew() 判断是否是新建的session
application
就是ServletContext,全局作用域

Exception : 异常对象,如果有什么异常信息,页面可以使用exception直接获取

config : ServletConfig 配置对象

pager : Object pager = this , 也是域,代表当前页面有效
可以参考运行jsp之后生成的java文件,在TomCat的work下,所谓内置对象,其实就是在生成的Servlet中service()方法中的局部变量
在这里插入图片描述在这里插入图片描述

Exception 这个对象,只能出现在错误页面,如果该页面不是错误页面,就不能使用(没有这个局部变量)

  1. Base标签
    默认情况下,我们在页面发送请求的时候,如果使用的相对路径都会以当前请求的上级为基准
    比如 :
    Index.jsp页面是请求a/b/c/index.jsp 请求过去的,那么再index.jsp中有个请求
    test
    那么这时候当点击这个链接的时候,就会发出这样的请求 a/b/c/test
    如果请求是 test
    定位到的是服务器根目录 webapps ,那么请求就需要加上项目名,比如 test

如果我们加上这么一句话

在这里插入图片描述

可以使用base标签 设置 当前页面中 所有请求的上下文环境

在这里插入图片描述

在这里插入图片描述

  1. EL
    EL 主要用于接收数据,等于 request.getAttribute() 方法
    ${}
    在这里插入图片描述

在这里插入图片描述在这里插入图片描述

注意 必须先经过servlet 进行数据存储,跳转到el.jsp 才可以从后台获取数据
如果直接进入el.jsp 是接收不到数据的

EL表达式 主要是获取数据,但是逻辑操作 就不行了,比如if,for等 是搞不定的
JSTL 做逻辑操作

3.1 概念

EL : Express Language (表达式语言) EL表达式
3.2 为什么需要EL表达式(作用)
最原始的JSP 在html页面中嵌入<% java语句 %> 但是 权限太大,功能太强 ,不符合MVC模式的理念 因为MVC应该较轻量级,较简单才对
以MVC模式设计程序,JSP只是视图,视图的任务就是显示响应,而不是在JSP中做任何关于程序控制和业务逻辑的事情。所以在JSP页面中应该尽可能少的、或者是完全不出现Java代码
在JSP中访问模型对象是通过EL表达式的语法来表达。所有EL表达式的格式都是以“${}”表示。
用于替换和简化jsp页面中java代码的编写
3.3 语法
${表达式}

注意:
jsp默认支持el表达式的。如果要忽略el表达式
1. 设置jsp中page指令中:isELIgnored=“true” 忽略当前jsp页面中所有的el表达式
2. ${表达式} :忽略当前这个el表达式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值