Java server page
作用
代替Servlet程序 回传html数据
因为Servlet程序回传jtml数据是一件非常繁琐的事情
开发成本和维护成本都极高
jsp本质上是一个Servlet程序
是Servlet通过输出流把Html数据回传到客户端
JSP头部的page指令 解决jsp乱码问题
jsp的page指令可以修改jsp页面中的一些重要的属性或者行为
属性
language jsp翻译成什么文件 暂时只支持Java
contentType jsp返回的数据类型是什么 也是源码
<% request.setCharacterEncoding(“UTF-8”); %>
<%@ page contentType=“text/html; charset=utf-8”%>
在jsp头部插入这一句 解决乱码问题
response.setContentType 参数值
pageEncoding jsp页面文件本身的字符集
import 导包 导类(与java相同)
以下两个属性是给out输出流使用(不建议改)
aotoFlush 当out输出缓冲区满了以后 是否自动刷新缓冲区 默认值是true
buffer 设置out缓冲区大小 默认是8KB
errorPage jsp页面运行时出错 jsp自动跳转的位置
iserrorPage 设置是否是errorPage页面 如果是true 可以获取异常信息
session 设置访问当前jsp页面是否会创建HttpSession对象 默认是true
session属性 设置jsp翻译出来的Java类默认继承谁
JSP声明脚本(极少使用)
<%!声明java代码 %>
可以给jsp翻译出来的java类定义属性和方法 甚至静态代码块 内部类等
表达式脚本(常用)
<%= 表达式 %>
表达式脚本的作用是 在jsp页面上输出数据//就是out.print(表达式)
特点:
1.所有表达式脚本都会被翻译到_jspService()中
2.表达式脚本都会被翻译为out.print(表达式) 输出到页面上
3.由于表达式脚本翻译的内容都在 _jspService()中 所以_jspService()中的对象 都可以直接使用
4.表达式脚本中的表达式不能以分号结束
代码脚本
<% Java语句 %>
1.代码脚本的作用是可以在jsp页面中编写我们自己需要的功能(写的是Java语句) 都在_jspService()中
2._jspService()中可以用的对象 都可以在代码脚本中使用
3.代码脚本还可以由多个代码脚本块组合完成一个完整Java语句
4.代码脚本还可以和表达式脚本一起组合在jsp页面输出数据
jsp三种注释
1.<!-- 这是html注释 -->
//翻译为out.write("<!-- 这是html注释 -->");
2.//Java注释
Java注释会被翻译到Java源代码中
3.<%-- 这是jsp注释–%>
jsp注释可以注释掉jsp页面所有代码
其中 只有html注释可以被查看源代码看到
九大内置对象
jsp中的内置对象 是指Tomcat在jsp页面成为Servlet源代码后 内部提供的九大对象 叫内置对象
request
response
pageContext
session
application
config
out
page
exception
四大域对象
四个域对象分别是pageContext、request、session、application
//跳转页面就没有了
pageContext(PageContextImpl类):当前jsp页面范围内有效
//刷新一次就没有了
request(HttpServletRequest类):一次请求有效
//关闭浏览器就没有了
session(HttpSession类):一个会话范围内有效(打开浏览器访问服务器,直到关闭浏览器)
//重启服务器就没有了
application(ServletContext类):整个web工程范围内都有效 只要web工程不停止 数据都在
域对象是可以像Map一样存取数据的对象,四个域对象功能一样
不同的是它们对数据的存取范围
虽然四个域对象都可以存储数据 但在使用上存在首先顺序的
pageContext===》》》request===》》》session===》》》application
原因:原先保存的数据 在不用的时候可以在最短时间内最快释放
jsp中out()输出和response.getWriter().write()输出的区别
response表示相应 我们常用于返回给客户端内容(输出)
out也是给用户做输出使用
当jsp页面中所有代码执行完成后会做以下两个操作
1.执行out.flush()操作会把out缓冲区中的数据追加写入到response缓冲区末尾。
2.会执行response的刷新操作,把全部数据写给客户端
底层都是用out输出 所以一般情况下 一般使用out输出 避免打乱顺序
out.write()与out.print()怎么进行选择
out.write()输出字符串没有问题 //因为会把其他类型的数据翻译为ascll对应的字符
out.print()输出任意数据都没有问题 //先进性逻辑运算后转化为字符串调用out.write()输出
即在jsp中优先使用out.print()输出
静态包含
存在一改全改的需求
实现
一个单独的jsp页面 只维护一份 改一处 其他统一被修改
即包含引入
<%@ include file="/include/foot.jsp"%>
静态包含的特点:
1.静态包含不会翻译被包含的jsp页面
2.静态包含其实是把被包含的jsp页面拷贝一份到包含的位置执行输出
动态包含
<jsp:include page="/include/foot.jsp"></jsp:include>
表面上完全一样
1.同样是在对应位置翻译成java代码
2.动态包含使用代码调用jsp页面执行输出
3.动态包含还可以传递参数
//一般使用静态包含 因为随着技术的发展 我们目前只需要jsp输出页面数据
jsp的请求转发
<jsp:forword page=“请求转发的路径”></jsp:forword>