JSP

1. JSP

1.1 jsp解决了什么问题

Servlet中,要想将数据等内容打印到客户端页面中,需要在java代码中拼接大量的html代码,非常的不合理。
Jsp就是解决这个问题。只需要把数据交给jsp,由jsp来完成数据的展示工作。

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 静态包含

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

在这里插入图片描述
静态包含 会把两个文件当成一个文件来解析,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 这个对象,只能出现在错误页面,如果该页面不是错误页面,就不能使用(没有这个局部变量)

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

2. Base标签

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

如果我们加上这么一句话
在这里插入图片描述

可以使用base标签 设置 当前页面中 所有请求的上下文环境
在这里插入图片描述
在这里插入图片描述

3. 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、付费专栏及课程。

余额充值