学习主题:JSP
学习目标:
1 掌握 JSP访问原理
2 掌握JSP引擎
3 掌握JSP指令
4 掌握JSP注释
5掌握JSP引入
6掌握JSP内置对象
7掌握JSP四大作用域
8掌握servlet和jsp中的路径问题
JSP访问原理
浏览器发送j请求,请求jsp,请求被tomcat服务器接收,jspServlet将该请求的jsp文件转义为java文件,然后执行。(相当于以前自己写的servelt中的getwritet().write()内容摘出去形成独立的文件,)
注意:
jsp中可以书写java代码,但是java代码会被原样转义到对应的java文件中,前端语言发送给浏览器执行,
![f93825c4afa9a06a58e345858e2b1dbc.png](https://i-blog.csdnimg.cn/blog_migrate/f4901a013d0e967bc6a643963e530bbd.jpeg)
jsp特点
特点:1.本质还是servlet
2.跨平台,一次编写处处运行
3.组件跨平台,健壮性(代码逻辑 性强)和安全性
jsp引擎
引擎:tomcat服务器中的jspServlet,本质上还是一个servlet。
jsp的page指令
page指令的属性及作用
(1) <%@page language="java" %><%--声明转译的语言 --%>
(2) <%@page import="java.util.* ,java.lang.*" %><%--声明编译时导入的java包 --%>
(3) <%@page pageEncoding="utf-8" %><%--设置jsp的数据保存的编码格式 --%>
(4) <%@page contentType="text/html; charset=utf-8" %><%-- 设置数据的响应编码格式 --%>
(5) <%@page session="false" %><%--设置session的状态 --%>
(6) <%@page isErrorPage="false" %><%-- 默认为false --%>
作用:设置jsp转译时的一些配置
![9426f7d784401166aafce3bd71502825.png](https://i-blog.csdnimg.cn/blog_migrate/00d9f4650dd9fca9694dbb48cf8d3baa.jpeg)
jsp的局部代码块和全局代码块和脚本段语句
jsp的局部代码块
<% java代码 %>
声明的代码,都会被原样转义到_jspService方法,也就是局部代码。
jsp的全局代码块:
声明方式:<%! %>
特点:全局代码块中声明 的java代码,在被转义时,回转义成jsp对应的java文件的全局的代码。
作用:声明方法和全局量
注意:使用全局代码块声明方法,使用局部代码块调用方法。
![55dc87d1b6508fe4992e9e1c8f6d5cc1.png](https://i-blog.csdnimg.cn/blog_migrate/dd2f2a64e1b9513918ce38e364919c9b.jpeg)
<%java脚本段、表达式’%>
<%=变量名或者方法名()%>
比如斜体:<i><%=a%></i>,a已经在全局变量中声明
注意:不能用分号结尾。
jsp的注释
HTML注释
<!-- 我是html注释-->
会被转译也会响应给浏览器,但不会被执行。
css注释
/* 我是css注释*/
会被转译也会响应给浏览器,但不会被执行。
js注释
//我是js注释
会被转译也会响应给浏览器,但不会被执行。
java注释
//我是java注释。会被转译不会被执行
jsp注释
<% -- 注释内容--%>
最高级别的注释,注释内容不会被转译和执行
![908b3a73e078092dd4949ddc439e366d.png](https://i-blog.csdnimg.cn/blog_migrate/490688304614b5b702fb55c4306314d2.jpeg)
jsp的静态引入
不同的jsp页面会使用相同的资源,为了避免代码的冗余,提高代码的可维护性和升级
将这部分(<i> ©网站声明 </i>)放入一个新的jsp中,要使用这个的用<%@include file ="xxx.jsp"%>
<%@include file=“ 要引入的资源的相对路径 ” %>
特点:被引入的jsp文件和原有的jsp文件被转译为一个java文件使用;
注意:静态引入的相关jsp文件中不能声明相同变量。
jsp的动态引入
<jsp:include page="要引入的资源的相对路径"></jsp:include>
特点:被引入的资源会被单独编译,原有jsp文件会调用被引入的jsp文件。
注意:动态引入的相关jsp文件中可以声明同名变量
作用:实现了资源的共享
静态引入和动态引入的区别
1、静态导入是将被导入页面的代码完全融入,两个页面融合成一个整体Servlet;而动态导入则在Servlet中使用include方法来引入被导入页面的内容。
2、静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则失去作用,只是插入被导入页面的body内容。
3、动态导入还可以增加额外的参数。
<jsp:include page=" ">
<jsp:param name=" " value=" "/>
</jsp:include>
![81b83e47adc3b031767d085c41835929.png](https://i-blog.csdnimg.cn/blog_migrate/374f16febf6019de275eb986b1d78020.jpeg)
jsp的内置对象
- out对象:用于向客户端、浏览器输出数据。
- request对象:封装了来自客户端、浏览器的各种信息。
- response对象:封装了服务器的响应信息
- exception对象:封装了jsp程序执行过程中发生的异常和错误信息。
- config对象:封装了应用程序的配置信息。
- page对象:指向了当前jsp程序本身。
- session对象:用来保存会话信息。也就是说,可以实现在同一用户的不同请求之间共享数
- application对象:代表了当前应用程序的上下文。可以在不同的用户之间共享信息。
- pageContext对象:提供了对jsp页面所有对象以及命名空间的访问。
jsp中的四个作用域对象
第一个作用域是page,他只在当前页面有效,也就是用户请求的页面有效,当当前页面关闭或转到其他页面时,page对象将在响应回馈给客户端后释放。
第二个作用域是request,他在当前请求中有效,request可以通过setAttribute()方法实现页面中的信息传递,也可以通过forward()方法进行页面间的跳转,需要注意的是request是转发不是重定向,转发相对于浏览器来说是透明的,也就是无论页面如何跳转,地址栏上显示的依旧是最初的地址。
第三个作用域是session,他在当前回话中有效。当一个台电脑上的同一浏览器对服务器进行多次访问时,在这多次访问之间传递的信息就是session作用域的范围。它从浏览器发出第一个HTTP请求即可认为会话开始,但是会话结束的时间是不确定的,因为在浏览器关闭时并不会通知服务器,一般Tomcat设置的默认时间为30分钟,也可以通过setMaxInactiveInterval(int)方法进行设置,或是通过invalidate()方法强制结束当前会话。
第四个作用域是application,他在所有的应用程序中都有效,也就是当服务器开始到服务器结束这段时间,application作用域中存储的数据都是有效的,同样可以通过setAttribute赋值和getAttribute取值。
jsp和Servlet的职责讲解
jsp负责页面展示,servlet负责逻辑处理,利用重定向或者请求转发,浏览器发送请求到服务器的servlet, 重定向到浏览器,让其访问服务器的xxx.jsp,这个jsp的本质还是一个Servlet,输出到浏览器,完成操作。
Servlet中请求转发和重定向的绝对路径
步骤:
设置编码集(请求和响应)
获取请求信息
处理请求信息
编写业务逻辑代码,
重定向到一个jsp页面(直接写jsp的文件名)
请求转发:
响应处理结果
![7d4e76ecd25803a0adcaeb5501ac7acd.png](https://i-blog.csdnimg.cn/blog_migrate/d2201b0763bb1a000c9495c75c984631.jpeg)
相对路径:依赖当前文件的路径
服务器部署项目
服务器根目录:服务器的webapps目录
localhost:8080/
项目根目录:服务器的webapps目录下项目路径
localhost:8080/jsp/
这两种都是相对路径,指的是从当前请求路径查找jsp所经过的路径。
请求转发的绝对路径写法:
req.getRequestDispatcher("/资源路径").forward(req,resp);
第一个/表示项目根目录
重定向的绝对路径写法:
示例:resp.getsendRedirect(/虚拟项目名/资源路径);
第一个/表示服务器根目录
jsp中的绝对路径和basePath方式
../ :退回到上级目录
/代表的路径 是动态获取的
问题:在jsp页面中进行资源之间的调转,如果书写的是相对路径,如果当前文件的路径发生变更,从当前路径查找资源的相对路径都要重新进行书写,
解决:将相对路径编程为绝对路径
使用:
在jsp中的第一个/表示服务器根目录
实例:<a herf=" /虚拟项目名/资源路径">访问关键字</a>
basePath方式:
在Myeclipse中创建的jsp页面会自动生成路径处理代码basePath,而basePath的值为当前项目根目录,并且在head标签中使用了<base herf="
<% =basePath%>">,相当于将当前页面的资源的所有默认位置定位在从项目根目录开始查找,不需要写/。
注意:basePath方式和添加/方式二选一。
![642b11843f91ebec8741ace2de4adeeb.png](https://i-blog.csdnimg.cn/blog_migrate/bbf7dcd4c08ab6c2ff812a1e59db71c6.png)
总结图示:
![d319d9081a6d8cc82f5c574e0bc0b571.png](https://i-blog.csdnimg.cn/blog_migrate/5d3eb8f11918c519643d16533412b7f3.jpeg)
![a9ed81b2dc73622a8ac65f35ec102869.png](https://i-blog.csdnimg.cn/blog_migrate/d4fd332549e4db526ff4694b61db8765.jpeg)
![b9382fce46aa75c3f3ef785b7710ddc0.png](https://i-blog.csdnimg.cn/blog_migrate/4654d7febcf38d9713f3413c5f256833.jpeg)