今天回顾一下JSP的知识点
JSP:是一种动态网页编程技术,是java web 服务器端的动态资源.
一.基础语法
JSP支持两种注释的语法操作,显示注释:允许客户端看见.隐式注释,客户端无法看到.
1.显示注释语法:从HTML继承而来.
2)<!-- HTML 风格的注释 -->
2.隐式注释语法:从Java中继承,JSP自己的注释
// 注释,单行注释 /* 多行注释*/
<%-- JSP 注释 --%>
二.Scriptlet
所有嵌入在HTML代码中的java程序都必须要使用Scriptlet标记出来.
JSP中一共有3种scriptlet:
第一种:<% %>: java脚本段,可以定义局部变量,编写语句
代码会生成在编译后的Servlet源码中的service方法体中
<%
int a = 1;
System.out.println(a);
%>
第二种<%! %>: 可以定义全局(成员变量),方法,类.
代码会生成在编译后的Servlet源码的类体中
<%!
String str = "Hello JSP";
%>
第三种<%= %>:输出表达式,数据一个变量或具体内容
代码会生成在编译后的Servlet源码中的service方法体中
<%=a %>
<%=100 %>
<%=request.getMethod() %>
<%
String txt = "Hello JSP";
%>
<%=txt %>
<%
out.print(txt);
%>
三.JSP的指令标签
Page指令
语法: <%@ page 属性名1="属性值1" 属性名2="属性值2" %>
language:当前语言,目前只支持java
contentType:设置响应类型及编码格式
pageEncoding:编码格式
import:导包,只有该属性可以被设置多次
isErrorPage:是否是处理错误的页面,默认是flase,如果设置true表示当前页面是用来处理报错的
errorPage:报错时跳转的页面
JSP的编码取决于contentType属性中的charset的值,如果charset未设置,则使用pageEncoding的值,若两者都未设置,所有默认编码ISO-8859-1.
4.include静态包含:
语法:<%@include file=“要包含的页面路径”%>;
将一个页面包含在另一个页面中
1.静态包含就是将内容进行了直接的替换
2.只会生成一个源码文件
3.不能有同名变量
特点:
运行效率高一些
耦合度高,不够灵活
<!-- 静态包含页面 -->
<%@include file="header.jsp" %>
<h2>----主体内容 --- </h2>
<h3>我是底部信息!</h3>
五.动态包含:
语法:<jsp:include page="要包含的页面或资源路径"></jsp:include>
相当于方法的调用,会生成两个源码文件,可以出现同名变量.降低了耦合度.
ps:jsp:include双标签之间不能写任何内容,包括空格和换行.(除非有参数)
动态包含可以传递参数:
<jsp:param value=“参数值” name = “参数名”/>
value属于支持表达式
name属性不支持表达式
获取参数通过 request.getparameter(“name属性值”);
<jsp:include page="header.jsp"></jsp:include>
<h2>----主体内容 --- </h2>
<%
String val = "zhangsan";
String name = "uname";
%>
<jsp:include page="footer.jsp">
<jsp:param value="<%=val %>" name="uname"/>
</jsp:include>
六.9大内置对象
当前页的域对象pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的 out. request. reponse. session. application .
域对象
1.requset对象
2.application对象
3.seesion 对象
输出对象
4.response对象
5.out 对象
前页的域对象
6.pageContext对象
配置对象
7.config对象
当前JSP页面本身
8.page对象
异常对象:只有在页面中设置过isErrorPage=true时才能使用
9.exception对象
七.EL表达式
EL表达式语法:
${key} key代表的是存在域对象中的键
EL表达式一般操作的是域对象或字面量,不能操作变量.
取值范围:从小范围开始找,找到即可,如果都未找到,返回空字符串.page . request . session . appilcation .
如果想要获取指定域范围中的值,使用pageScope.requestScope.sessionScope.applicatonScope
ps:要获取JavaBean中的属性时,属性需要提供get方法
pageContext.setAttribute("uname", "zhangsan");
request.setAttribute("uname", "lisi");
session.setAttribute("uname", "wangwu");
application.setAttribute("uname", "zhaoliu");
// 定义JavaBean对象
User user = new User();
user.setUserName("admin");
user.setUserPwd("123456");
request.setAttribute("myUser", user);
String a = "Hello";
// 域对象存空值
request.setAttribute("str1", "");
request.setAttribute("str2", null);
request.setAttribute("str3", "Hello");
EL表达式取值
获取指定名称的域对象:${uname } <br/>
获取session作用域的值:${sessionScope.uname } <br/>
获取JavaBean对象:${myUser }<br/>
获取JavaBean对象的属性:${myUser.userName } ----- ${myUser.getUserName() } <br/>
获取普通变量名(取不到):${a }<br/>
获取字面量的值:${1 }<br/>
EL使用字符串方法
获取字符串中是指定字符的下标:${uname.indexOf("a") }<br/>
字符串截取:${uname.substring(0,2) }<br/>
EL表达式判断为空 ${empty 域变量 }
判断空字符串:${empty str1 } <br/>
判断null:${empty str2 } <br/>
判断字符串:${empty str3 } <br/>
判断字符串:${str3 != null && str3 != "" } <br/>
//集合
List<String> list1 = new ArrayList<>();
list1.add("aaa");
list1.add("bbb");
list1.add("ccc");
List<String> list2 = new ArrayList<>();
List<String> list3 = null;
request.setAttribute("list1", list1);
request.setAttribute("list2", list2);
request.setAttribute("list3", list3);
List<User> userList = new ArrayList<>();
userList.add(user);
request.setAttribute("userList", userList);
EL操作集合
判断集合不为空:${!empty list1 } <br/>
判断集合为空:${empty list1 } -- ${empty list2 } -- ${empty list3 } <br/>
获取集合的值:${list1[0] }<br/>
获取集合中对象的属性:${userList[0].userName }<br/>
获取集合的长度:${userList.size() }<br/>
Map<String,Object> map = new HashMap<>();
map.put("uname","zhansgan");
map.put("uage",18);
map.put("usex",true);
request.setAttribute("map", map);
%>
EL操作Map
判断map是否为空:${empty map }<br/>
获取map对象:${map }<br/>
获取map中指定的key对应的value:${map.uname } -- ${map["uage"] }
request.setAttribute("num1", 10);
request.setAttribute("num2", 2);
request.setAttribute("aa", "aaa");
request.setAttribute("ab", "aaa");
request.setAttribute("ac", "bbb");
EL运算
加法:${num1 + num2 } <br/>
减法:${num1 - num2 }<br/>
乘法:${num1 * num2 }<br/>
除法:${num1 / num2 } -- ${num1 div num2 }<br/>
大小比较:${num1 > num2 } -- ${num1 >10 } --- ${(num1+num2) <= 10 }<br/>
等值比较:${aa == ab } -- ${aa eq ac }<br/>
${(num1+num2) > 10 && aa == ab }<br/>
${(num1+num2) > 10 || aa == ab }<br/>
通过pageContext对象设置指定域范围的值
pageContext.setAttribute("userName", "Lisa", PageContext.REQUEST_SCOPE);
String userName = (String) pageContext.getAttribute("userName", PageContext.REQUEST_SCOPE);
System.out.println(userName);