一.jsp的简介
1.jsp是java server pages允许在页面中使用java作为脚本语言动态生成html代码
2.jsp首先和html的区别,html可以直接放在浏览器中执行但是jsp必须把tomcat启动起来才能看到效果
3.组成部分:1.静态内容;2.指令;3.表达式;4.脚本;5.声明;6.注释
3.1注释:jsp有html使用的注释,java使用的注释,和自己的注释
第一种:跟html注释一样,此注释是第一种,在客户端可以看见
第二种jsp注释,在客户端看不见,在编译时,会被擦除<%--注释-->
第三种是标准java注释,这种注释只能写在jsp脚本中 //注释 ; /*注释*/
3.2指令:jsp页面可以在最上方加入当前页面的配置等信息叫做jsp指令
page指令:当前页面的配置信息,最为常用
include:在一个页面中,将另一个文件嵌入其中
taglib:引入标签库
3.3脚本:<%--jsp脚本--%>可以写任何java代码,但是不能够定义方法,全局变量.所有的jsp脚本,都会和html代码混合复制进_jspService方法中.
3.4静态内容:所有被写在jsp文件中的没有被任何jsp标签包裹的,就是静态内容,即,所有的html代码,都是静态内容
3.5声明:用来写自定义方法,成员变量的
3.6表达式:是在html代码中,是为了使用声明中定义的全局变量,或脚本中定义的局部变量而存在的即表达式是没有复杂逻辑,只能取值使用
二.jsp的九大内置对象
内置对象:在java中,一定是对象.方法()去调用,而在所有jsp页面中,这九个对象不需要new,可以直接使用
1.out对象:out对象是jspWriter的实例,用来向客户端输出文本信息的,将内容写到out中,会默认写到out的缓冲区,当jsp执行完成后统一输出到客户端,默认页面中的静态内容也是使用out来输出
1.1,out.flush();//把缓冲区的内容写到浏览器
1.2,out.clear();//清空缓冲区,缓冲区的内容不会写到页面上;
注意:不能在flush()之后调用,如果就是要调用可以用clearBuffer()
2.request对象:request对象封装了http请求的所有信息,不分get还是post,用法和servlet中的request没有什么区别
2.1,request.setAttribute("key",value);//存值
2.2,request.getAttribute("key");//取值
3.response对象:这里面的response就是servlet中的response,在jsp中用处很小
4.session对象:session是httpSession的对象,是用来进行会话跟踪的,会话跟踪,是服务器来判断是否是同一个用户发起的不同请求
4.1,session的底层依赖于cookie
4.2,session是保存在服务器中的
4.3,session还是4大域对象之一
4.4,session.setAttribute("key",value);//存值
4.5,session.getAttribute("key");//取值
5.page对象:page:page对象代表当前JSP页面,是当前JSP编译后的Servlet类的对象。相当于this。
6.application对象:application 就是servletContext,只要servletContext中有的方法,application都有
7.pageContext对象:jsp四大域对象之一,(application,session,request,pageContext)
7.1可以实现请求包含:pageContext.include("page.jsp");//将一个页面的内容加载到另一个页面
8.config对象:对象就是在servlet启动的时候init方法中传入进来的ServletConfig对象,基本没啥用
9.exception对象:是一个异常对象,当一个页面在运行过程中,发生了异常,将产生这个对象,它是Throwable的对象
9.1,exception这个内置对象,默认是用不了的,编译过不去,想要用,必须把这个页面指定为isErrorPage,即,在page指令中添加isErrorPage= "true" 这条指令,抛异常的页面指令中添加errorPage="跳转的页面".
三,EL表达式,可以从域对象中取值
1.el表达式语法是${要取的值},它不是java代码,所以没有对象.方法
2.取值的时候,这些值需要从其他内置对象中获得,或者从javabean中获得
3.从域对象中取值,实际上是获得applicationScope这个map,直接map.key就可以获得这个map对应的value
4.如下图,在test04中向域对象中传值
5.在test03中用el表达式取值