2021-03-18

学习目标:

小白起飞第47天

学习内容:

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

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

包含
包含,就是在页面中载入一个页面,类似于jQuery中的load
静态包含
静态包含 会把两个文件当成一个文件来解析,JSP解析引擎在解析的时候,只会生成一个class和java文件

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

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

发送两条请求
数据不共享
地址栏显示后者(被跳转的路径)
请求转发

发送一条请求
数据 共享
地址栏不变,显示前者
Jsp中的forward 会终止程序执行
因为JSP引擎解析之后,会在跳转语句之后添加return

内置对象
内置对象,可以直接使用
内置对象,在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 这个对象,只能出现在错误页面,如果该页面不是错误页面,就不能使用(没有这个局部变量)
Base标签
默认情况下,我们在页面发送请求的时候,如果使用的相对路径都会以当前请求的上级为基准
比如 :
Index.jsp页面是请求a/b/c/index.jsp 请求过去的,那么再index.jsp中有个请求
test
那么这时候当点击这个链接的时候,就会发出这样的请求 a/b/c/test
如果请求是 test
定位到的是服务器根目录 webapps ,那么请求就需要加上项目名,比如 test

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

EL
EL 主要用于接收数据,等于 request.getAttribute() 方法
${}

注意 必须先经过servlet 进行数据存储,跳转到el.jsp 才可以获取数据
如果直接进入el.jsp 是接收不到数据的
EL表达式 主要是获取数据,但是逻辑操作 就不行了,比如if,for等 是搞不定的
JSTL 做逻辑操作
概念
EL : Express Language (表达式语言) EL表达式
为什么需要EL表达式(作用)
最原始的JSP 在html页面中嵌入<% java语句 %> 但是 权限太大,功能太强 ,不符合MVC模式的理念 因为MVC应该较轻量级,较简单才对
以MVC模式设计程序,JSP只是视图,视图的任务就是显示响应,而不是在JSP中做任何关于程序控制和业务逻辑的事情。所以在JSP页面中应该尽可能少的、或者是完全不出现Java代码
在JSP中访问模型对象是通过EL表达式的语法来表达。所有EL表达式的格式都是以“${}”表示。
用于替换和简化jsp页面中java代码的编写
语法
${表达式}

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

学习时间:

学习产出:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值