JSP
1、什么是JSP?
Java Server Pages,SUN公司提供的一种动态网页编程技术。
2、为什么要有JSP ?
Servlet输出页面很繁琐
Servlet生成的页面没有预览工具
JSP: JSP = HTML+java代码+JSP本身的标签
3、JSP是动态资源还是静态资源?
是动态资源 放的位置、编写和访问上很像静态资源。本质上是一个Servlet。
4、jsp如何运行?
一个jsp在第一次访问时,会被容器(服务器)中的jsp引擎(容器中编译jsp的软件模块)
编译成一个Servlet jsp名字_jsp.java 和 jsp名字_jsp.class并且放在 Tomcat的work目录下。
5、JSP和Servlet的不同
1.编写jsp文件就是编写文本文件一样。编写servlet编写的是java程序。
2.编写jsp以后,直接将jsp拷贝到容器的部署目录就可以了。
3.编写后的servlet要通过web.xml文件加以配置。jsp直接访问就行了。
4.jsp和静态资源放在一起就可以了。-----jsp在使用上更像静态资源。
6、JSP的三种脚本标签
<%! %>这个标签可以用来声明变量,方法 ,类;变量和方法是 成员变量和成员方法;类是成员内部类
一般不用该标签
<% %>在这个标签中编写的java代码,将会出现在 _jspService()
<%= %>在这个标签中写的java代码将会出现在out() 中 向页面输出 该标签中的代码一定不要加分号
7、JSP中的注释
<!-- -->普通注释,会以注释的形式出现在html的代码里
<%-- --%>JSP注释,不会出现在html中
8、运行原理
在tomcat的conf中的web.xml中可以看到本质还是Servlet
原理图解:
9、三大指令标签
1、<%@ page %>
Language |
jsp中可以嵌入的语言 目前为止只能填java |
Import |
用来导包 |
pageEncoding |
设置当前jsp页面的编码方式 |
contentType |
设置浏览器查看这个页面时使用编码方式 |
Session |
默认是true 当前jsp中能否使用session(如果为true,则在这个jsp中就已经可以使用session对象) |
isELIgnored |
当前页面能否使用EL表达式 |
Buffer |
缓存区大小 默认是8kb |
autoFlush |
是否自动刷新 |
errorPage |
指定错误页面 |
isErrorPage |
设置为错误页面 (设置为错误页面,就有处理异常的功能) |
错误页面一般在web.xml中配置
<error-page> <error-code>500</error-code> <location>/error.jsp</location> </error-page> <error-page> <exception-type>java.lang.NullPointerException</exception-type> <location>/error.jsp</location> </error-page>
2、<%@ include file="" %> 在当前页面包含其他页面
这样的包含是静态包含,也叫做编译期包含。两个jsp将被编译成一个class文件。
静态包含时,生成的html的结构被破坏
动态包含:<jsp:include page="include1.jsp"></jsp:include>
重点:动态包含和静态包含的区别
静态包含:是先将整个页面合并然后再生成相应java文件再在tomcat上运行。
动态包含:先编译所有的页面,在使用的时候 jsp:include标签动态的加载。
静态加载包含一些HTML静态的页面,没有动态的操作,编译较快,使用方便,功能欠缺。
动态加载速度会稍稍慢一些,但是所有的页面都是独立的,功能齐全。
3、<%@ taglib prefix="前缀" uri="标签库的路径" %> 引入标签库,使用的最多
10、九大内置对象
(1)out输出流对象 out流的执行是 先把 缓冲区中的内容 输出到 response.getWriter()的缓冲区中,再由
response.getWriter() 这个流统一输出。
<%="aaa"%> <% out.write("bbb");%> <%response.getWriter().write("ccc");%>
输出结果为:ccc aaa bbb
(2)pageContext 页面对象,可以获得其他八个对象,也有作用域(范围为当前页面)
(3)request 请求对象
(4)response 响应对象
(5)session 会话对象
(6)application 项目对象,用法和ServletContext一样
(7)config 配置对象,用法和ServletConfig一样
(8)Page 页面对象=this
(9)exceptino 异常对象,只有jsp的isErrorPage=true时,才会出现这个对象
11、四个作用域
pageContext:页面作用域
request:请求作用域
Session:会话作用域
application:项目作用域
1、在当前页中设置属性值,所有的作用域都可以获取到
2、请求转发 时,pageContext作用域失效,其他的作用域可以获取值
3、再次访问,进行第二次请求时, pageContext和request都失效
4、关闭浏览器,重新打开再次访问,pageContext、request、session 都失效了
5、关闭服务器,全部失效
EL表达式
1、EL是Expression Language的缩写,它是一种简单的数据访问语言。目的是为了使JSP写起来更加简单。
2、EL表达式的作用
1.获取作用域中的值
2.做运算 (数学运算 逻辑运算 关系运算...)
3.EL 提供常用的操作web对象 (11 个)
4.访问java的方法
3、获取作用域中的值
例如:${name} 按照 page,request,session,application(ServletContext)的顺序,查找作用域 找 key是name的 value值
也可以指定查找的范围
${pageScope.key}
${requestScope.key}
${sessionScope.key}
${applicationScope.key}
getAttribute(key); 当key不存在时返回 null
${key} 当key不存在时返回空字符串""
User user = new User(1,"zhaosi",20); request.setAttribute("user", user); /* ${user.id} ${user.name} ${user.age} user----> 保存在request中时的key值 id,name ,age 对象的属性名 要求: 属性必须有get方法 EL表达式才能访问到 */
<% List<String> list = new ArrayList<String>(); pageContext.setAttribute("list", list); %> ${empty list } 判断list中是否有元素 //数组 List Map <% String[] ss = {"aaa","bbb","ccc"}; pageContext.setAttribute("ss", ss); List<String> list = new ArrayList<String>(); list.add("xxx"); list.add("yyy"); list.add("zzz"); request.setAttribute("list",list); List<User> list2 = new ArrayList<User>(); User u1 = new User(1,"qwe",20); User u2 = new User(2,"asd",20); User u3 = new User(3,"zzz",20); list2.add(u1); list2.add(u2); list2.add(u3); request.setAttribute("list2",list2); Map<String,String> map = new HashMap<String,String>(); map.put("aaa-a", "111"); map.put("bbb", "222"); map.put("ccc", "333"); pageContext.setAttribute("map", map); %> ${pageScope.ss[1] }<br> ${requestScope.list[2] }<br> ${list2[0].name}<br> ${map.bbb } <br> ${map["aaa-a"] }
注:EL不能遍历集合结构
4、做运算 注意:两个值必须在一个大括号里,不能分开写
${10+2 } ${10 / 2} ${5==5 } ${5<3 } ${list2[0].name=="aaa" } ${list2[0].age==20 } ${list2[0].age == list2[1].age }
运算符:
操作 |
描述 |
示例 |
结果 |
==(eq) |
是否相等 |
${5==5} |
True |
!=(ne) |
是否不等 |
${5!=5} |
false |
<(lt) |
是否小于 |
${5<7} |
True |
>(gt) |
是否大于 |
${5>7} |
false |
<=(le) |
是否小于等于 |
${5 le 5} |
true |
>=(ge) |
是否大于等于 |
${5 ge 6} |
false |
同样也有逻辑运算符
5、EL提供常用的操作WEB对象
pageScope requestScope sessionScope applicationScope param 相当于 request.getParameter() paramValues 相当于 request.getParameterValues() header 相当于 request.getHeader(); 一个key对应一个value headerValues 相当于 request.getHeaders() 一个key对应多个value initParam 获取初始化参数(全局初始化参数) cookie 获取Cookie的 pageContext 获取其他八个内置对象 访问这个八个对象下的get...方法 |
注:当属性中出现 - 时:会被认为是减号,应该这样写 ${header[“User-Agent”]}