jsp
一.什么动态代理
JSP 服务器端页面技术
二.什么是jsp
JSP:java server pages
注意:JSP本质上就是一个servlet
jsp的组成: html代码+java代码+jsp特有的代码
一句话: jsp就是能写java代码的html页面
三.JSP的作用?(重点)
servlet要展示页面信息的时候会特别麻烦
而jsp能更好的替代Servlet去展示信息
一句话: 用来接收servlet产生的数据(list,bean,数组),并且展示数据的(记住)
注意:jsp需要放在webcontent下面
四.如何使用JSP?
HttpJspBase--->httpServlet
jsp的执行原理(理解):
1.服务器收到请求,找到指定servlet执行(JspServlet)
2.servlet找到对应的jsp文件.将jsp文件变成java文件.并调用编译器编译成class文件,然后放到work目录下
3.编译后的class文件会被服务器当做Servlet执行,生成动态的内容,将动态的内容返回给服务器
4.服务器拿到生成的内容,组装成响应信息,返回给浏览器
5.浏览器收到响应,展示内容
1.jsp特有的
1 jsp的脚本(了解) <% %> <%= %> <%! %>---el,jstl
2 jsp的注释
3 jsp的指令(重点)
4 jsp的内置对象(面试题)
5 jsp的域对象(4个域对象重点中的重点)
6 jsp的动作标签(了解)
2.jsp的脚本(了解)
<%....%> java程序片段
生成的servlet内容,在service方法里面有一份
<%=...%> 输出表达式
生成的servlet内容,在service方法里面是响应输出 out.print();
<%!...%> 声明成员
生成的servlet内容,在成员位置上
3.jsp的注释
html的注释: <!-- -->
在源码和生成的servlet里都显示
java的注释: // /* */ /** */
在源码不显示,在servlet里显示
jsp的注释: <%-- --%>
在源码和生成的servlet里都不显示
4.jsp的指令
作用:声明jsp页面的一些属性
格式:<%@指令名 属性1="值1" 属性2="值2" ....%>
指令的分类:
page:声明jsp页面的属性
include:包含(静态包含)
taglib:导入标签库(明天讲)
注意:
jsp页面中可以使用多个指令,
指令可以出现多次,
位置任意,一般都在页面的上面
5.page指令
重要属性
import:导入jar包的 /alt+/ 做导包和提示
contentType:设置响应流的编码(通知浏览器用什么编码打开),设置文件的mime类型
pageEncoding:设置页面的编码
contentType和pageEncoding的联系:
两者都出现的时候:各自使用各自的编码
两者只出现一个的时候:两个使用出现的编码
两者都不出现的时候:使用默认的编码 (iso-8859-1)
了解属性
language:声明当前jsp支持的脚本语言 目前只有 java
errorPage:当页面出现错误之后 跳转到指定的页面上(地址)
isErrorPage:当前是否是个错误页面(默认值是false)
当声明这是一个错误页面的时候,在页面中可以使用 exception这个内置对象
session:当前页面是否可以使用session内置对象
6.include指令:静态包含
格式:
<%@include file="文件地址" %> 多个共同的内容,可以抽取出来,在使用的时候
使用静态包含就行了
注意:将被包含页面的内容复制到当前的jsp页面中,一起编译运行了,只生成一个java文件
7.taglib指令:导入标签库
格式:
<%@taglib prefix="起别名" uri="名称空间" %>
五.jsp的内置对象(9个)
在jsp页面上可以直接使用的对象称之为内置对象
序号 | 内置对象 | 类型 |
1 | exception | Throwable异常信息的封装对象,一般不会有,isErrorPage="true" |
2 | request | HttpServletRequest |
3 | session | HTTPsession |
4 | response | HttpServletResponse |
5 | config | ServletConfig不用 |
6 | application | ServletContext |
7 | out |
JspWriter jsp的字符输出流 做响应体内容输出 PrintWriter servlet的字符输出流 做响应体内容输出 |
8 | page | Object(代表的是当前页面对象) |
9 | pageContext |
JSP最小的作用域,一般不使用这个作用域存储数据 |
六.pageContext对象
可以获取其他八大内置对象
举例子:当定义一个工具类的时候,这个工具类如果用到了很多内置对象
直接使用pageContext
public void utils(pageContext con)
{
exception
request
...
实现了功能
}
可以从别的作用域中查找数据
pageContext.findAttribute(String name); //获取对应的值
作用域的大小排列:
servletContext: 1
session: 2
request: 3
pagecontext: 4
先从最小的pageContext作用域中寻找,如果能找到,直接使用
找不到,继续找request,如果能找到,直接使用
找不到,继续找session,如果能找到,直接使用
找不到,继续找application,如果能找到,直接使用
最后都没找到,返回null
findAttribute
底层:
if(pageContext.getAttribute(name)!=null)
{
return pageContext.getAttribute(name)
}else if(request.getAttribute(name)!null)
{
return request.getAttribute(name)
}...
else
{
return null;
}
pageContext可以操作其他作用域(了解)
setAttribute()
getAttribute()
removeAttribute();
实例:
上下两句效果完全等价
session.setAttribute("msg2", "33333333333");
pageContext.setAttribute("msg2", "33333333333",pageContext.SESSION_SCOPE);
七.域对象总结
作用: 存储数据,在多个servlet/jsp中做数据的交互
Servlet中: 3个域对象
1.ServletContext对象:
创建: 服务器启动的时候,就为放在它下面每一个项目各创建一个对应的servletContext对象
销毁: 服务器正常关闭获取项目从服务器中移除的时候,servletContext对象销毁
作用域: 整个项目中的所有serlvet/jsp都可以共享它里面的数据
2.HTTPServletRequest对象:
创建: 浏览器请求服务器的时候,创建request对象
销毁: 服务器给浏览器响应回去的时候,request对象销毁
作用域: 一次请求,不管这个请求转发了多少次,只要没有响应,所有的servlet/jsp
都可以获取request里面的数据
3.HTTPSession对象:
创建: java认为第一次调用request.getSession()的时候,创建session对象
销毁: 3种方式
1: 手动销毁 void invalidate()
2: 自动销毁 默认是离开电脑30分钟 可以去tomcat的web.xml下设置
3: 服务器非正常关闭 (断电,terminate..)
扩展: 服务器正常关闭,session不会销毁,只会带着它的数据序列化到磁盘上(钝化)
当服务器启动的时候,session和session中的数据会从磁盘上序列化回内存(活化)
作用域:
一次会话,只要浏览器不关闭,在servlet/jsp中获取到的session
都是同一个session
4.jsp中: 4个域对象
ServletContext对象 同上
HTTPServletRequest对象 同上
HTTPSession对象 同上
jsp特有的域对象:
pageContext对象:
作用域:当前页面
5 jsp的动作标签(了解)
<jsp:forward> 在jsp页面使用请求转发
<jsp:forward page="...">
相当于<%request.getRequestDispatcher(..).forward(..)%>
<jsp:include> 动态包含
将被包含页面运行后的结果包含了进来