P5 JavaWeb:JSP

169 阅读4分钟

一.是什么

Java Server Pages:Java服务器端页面,和servlet一样,开发动态web技术;
写jsphtml差不多,只不过html加事件是伪动态,实际上html只能提供静态数据,jsp页面也已嵌入java代码,给用户提供动态数据

二.jsp原理

1.代码层面

看jsp在java中target的生成路径

Snipaste_2022-01-04_21-46-18.png

2.服务器内部工作

<1>查看jsp在本地的存放路径

tomcat有一个work工作目录,存放jsp        

Snipaste_2022-01-04_21-52-10.png

<2>IDEA中访问jsp页面

IEDA中使用tomcat会在IDEA的tomcat中生成一个work目录;
启动tomcat后,访问jsp页面,发现jsp页面编译后生成成了java程序,说明jsp最终也会被转换为一个java类-> 因为浏览器向服务器发送请求,不管访问什么资源都是在访问servlet

Snipaste_2022-01-04_21-55-03.png

Snipaste_2022-01-04_22-02-29.png

3.常用方法

Snipaste_2022-01-04_22-07-16.png

<1> . 判断请求

_jspService()

<2>. 内置的对象

Snipaste_2022-01-04_22-11-16.png

<3> . 输出页面前增加的代码

Snipaste_2022-01-04_22-14-40.png

4.访问jsp流程

<1>图解

Snipaste_2022-01-04_22-23-03.png

<2>总结

在jsp页面中,只要是java代码就会原样输出,如果是html代码,会转化为out.write()
    

Snipaste_2022-01-04_22-27-49.png

三.JSP基础语法(用起来和java无区别)

1.环境搭建

<1>创建maven工程    
<2>导入依赖并编写主页面

Snipaste_2022-01-05_20-42-46.png

Snipaste_2022-01-05_20-46-45.png

<3>部署tomcat

Snipaste_2022-01-05_20-44-32.png

<4>IDEA中重启tomcat

Snipaste_2022-01-05_20-48-36.png

2.基础语法学习

<1>JSP表达式

<%=%>

Snipaste_2022-01-06_21-42-42.png

<2>JSP脚本片段(三个demo)

<% %>

Snipaste_2022-01-06_21-44-29.png

Snipaste_2022-01-06_21-45-50.png

<3>JSP声明

<%! %>

Snipaste_2022-01-06_22-01-51.png

<4>jsp注释(客户端看不到)

<%-- --%>
    

<5>源码分析

JSP声明会被编译生成到Java的类中,其他就会被生成到_jspService方法中(这个方法内的方法是局部的作用域,随着方法的消失而消失)

Snipaste_2022-01-06_21-57-47.png

Snipaste_2022-01-06_21-55-46.png

四.JSP常用指令(标签)(与java有区别)

Snipaste_2022-01-09_18-11-42.png

1. <%@page args%>

errorPage.png

<1>import

Snipaste_2022-01-06_22-12-48.png

<2>error(两种方式)

I.方式一:配置一个505并测试

Snipaste_2022-01-06_22-24-02.png Snipaste_2022-01-06_22-22-21.png Snipaste_2022-01-06_22-13-29.png

II.方式二:配置一个404并测试

Snipaste_2022-01-06_22-27-36.png Snipaste_2022-01-06_22-25-57.png Snipaste_2022-01-06_22-28-49.png

2 . <%@include %>

提取公共页面,包含上下文

<1> 嵌套页面(方式一)

使用<%@include %> 将header.jsp和footer.jsp嵌套进jsp3.jsp页面

I.编写头页与尾页

Snipaste_2022-01-06_22-54-39.png

II.编写主页面

Snipaste_2022-01-06_22-55-28.png

III.测试

Snipaste_2022-01-06_22-55-57.png

<2> 嵌套页面(方式二)

使用<jsp:include>(jsp标签)将header.jsp和footer.jsp嵌套进jsp3.jsp页面

I.主页面

Snipaste_2022-01-06_23-05-14.png

II.测试

Snipaste_2022-01-06_22-59-58.png

<3>.<%@include %>和<jsp:include>的区别

I. <%@include %>会将两个页面合二为一,生成一个页面

Snipaste_2022-01-06_23-21-31.png

II. <jsp:include> 是拼接页面,生成的还是两个页面

Snipaste_2022-01-06_23-24-06.png

III.区别对比

Snipaste_2022-01-06_23-29-07.png

Snipaste_2022-01-06_23-29-45.png

IV.总结

一般用jsp标签,灵活性更高

3 . <%@taglib %>jstl表达式会用到

五.jsp内置对象及作用域

1.是什么

jsp页面在第一次访问的时候被编译成了java类,在转变为class文件,同时生成了9大内置对象

2.有什么

<1>PageContext 存数据
<2>Request 存数据
<3>Response
<4>Session 存数据
<5>Application(ServletContext)存数据
<6>config(ServletConfig)
<7>out
<8>page
<9>exception

3.四大存储的对象

<1>对象

I.pageContext:保存的数据只在一个页面中有效
II.Request :保存的数据只在一次请求中有效,请求转发只会携带这个数据
III.session:保存的数据在一次会话中有效,从打开浏览器到关闭浏览器
IV.application:保存的数据只在服务器中有效,从打开服务器到关闭服务器

<2>作用域范围

    pageContext  <  Request  <  session  <  application

<3>使用场景

    I.Request:客户端向服务器发送请求,产生的数据,用户看完就没用的数据,如新闻
    II.Session:客户端向服务器发送请求,产生的数据,用户用完过会儿还会用,如购物车(用户添加东西以后过一会儿还会到购物车结账)
    III.application:客户端向服务器发送请求,产生的数据,如统计上线人数,还有就是一个客户用完的数据,其他用户还可能用的到(如qq聊天的数据)

4.代码实现

<1>存取数据(方式一)

四个对象存值,使用pageContext取值,在当前页面都能取出来,换一个页面只能取到session和application存的值

Snipaste_2022-01-09_17-10-21.png
Snipaste_2022-01-09_17-11-23.png
Snipaste_2022-01-09_17-22-45.png
Snipaste_2022-01-09_17-23-04.png

<2>存取数据(方式二)

四个对象存值,使用pageContext取值,并且使用pageContext请求转发到另一个页面
    

Snipaste_2022-01-09_17-36-21.png

Snipaste_2022-01-09_17-37-58.png

六.jsp标签,jstl标签,el表达式

1.el表达式:(重点就是拿他存数据,显示数据,为了简化jsp页面写java代码)

<1>获取数据
<2>执行运算
<3>获取web开发的常用对象    

2.jsp常用标签

<1>导入依赖

Snipaste_2022-01-09_17-42-00.png

Snipaste_2022-01-09_18-12-12.png

<2>. <jsp:include >

include包含上下文

<3>. <jsp:forward >

forward 转发页面 和pageContext一样

Snipaste_2022-01-09_17-52-08.png

Snipaste_2022-01-09_17-52-22.png

<4>. <jsp:param >param标签,和request存值一样,转发的时候可以携带参数

Snipaste_2022-01-09_18-01-36.png

Snipaste_2022-01-09_18-02-43.png

<5>. <jsp:useBean > <jsp:setProperty >

这个标签是JavaBean的应用
        

3.jstl表达式

    jstl是一个jsp的标签库,使用它是为了弥补html标签的不足,因为原生的html或者jsp标签只有几个,jstl中自定义了许多标签供我们使用,标签的功能代码和java代码一样,我们只需要简单的使用就可以了

Snipaste_2022-01-09_18-11-42.png

<1>. 核心标签(这个需要掌握部分,下面的了解就可以)

Snipaste_2022-01-09_18-17-59.png Snipaste_2022-01-09_19-04-41.png

   使用步骤:
   I.引入taglib
   II.引入其中方法
   III.在tomcat中也要引入jstl的包,否则会报错:jstl解析错误    

i.<c:if>,<c:out>

Snipaste_2022-01-09_19-22-36.png

Snipaste_2022-01-09_19-24-49.png

ii.<c:set>,<c:choose>,<c:when>,<c:>

Snipaste_2022-01-09_19-30-43.png

iii.<c:foreach> (从数据库中拿数据,经常用这个遍历)

Snipaste_2022-01-09_19-32-26.png

Snipaste_2022-01-09_19-33-33.png

<2>. 格式化标签

<3>. sql标签

<4>. xml标签

七.javaBean与JSP应用

1.JavaBean编写(实体类)并与数据库表对应

Snipaste_2022-01-09_20-29-41.png

2.编写jsp页面

Snipaste_2022-01-09_20-25-40.png

3.部署tomcat,访问这个JavaBean

可以看到使用JavaBean和new出来的对象是一样的    

Snipaste_2022-01-09_20-27-06.png