JSP基础语法
一、JSP的注释
1、显示注释:
查看网页源代码能够看到的注释
a、继承HTML风格的注释: <!-- 这是HTML的注释 -->
2、隐式注释
查看网页源代码能够看不到的注释
a、JSP自己的注释: <%-- 这是JSP的注释 --%>
<%-- 这是JSP的注释 --%>
b、继承Java风格的注释: // 单行注释 /多行注释/
<%
// 单行注释
/* 多行注释 */
%>
Scriptlet脚本小程序
所有嵌入在 HTML 代码中的 Java 程序都必须使用 Scriptlet 标记出来。
JSP一共有三种scriptlet:
1、java脚本段
语法:<% // 这里面可以写Java代码,声明局部变量、编写java语句等 %>
代码会生成在编译后的Servlet源码中的service方法体中
<%
int a = 1;
System.out.println(a);
System.out.println(str);
%>
2、声明全局变量、方法、类
语法: <%! // 声明全局变量、方法、类 %>
代码会生成在编译后的Servlet源码的类体中
<%!
String str = "Hello JSP";
%>
3、输出表达式
语法: <%=变量或字面量、表达式 %>
代码会生成在编译后的Servlet源码中的service方法体中
<%=a %> <br>
<%=100 %> <br>
<%=request.getMethod() %><br>
<%
String txt = "Hello JSP";
%>
<%=txt %>
<%
out.print(txt);
%>
===========================================================
Page指令
语法: <%@ page 属性名1=“属性值1” 属性名2=“属性值2” %>
language:当前语言,目前只支持java
contentType:设置响应类型及编码格式
pageEncoding:编码格式
import:导包;只有该属性可以被设置多次
isErrorPage:是否是处理错误的页面,默认是false; 如果设置true表示当前页面是用来处理报错的;一般与errorPage一起使用
errorPage:报错时跳转的页面
JSP的编码取决于contentType属性中的charset的值,如果charset未设置,则使用pageEncoding的值,若两者都未设置,使用默认编码ISO-8859-1
<%
List<String> list = new ArrayList<>();
int a = 1/0;
%>
==========================================================
include静态包含
语法:<%@include file=“要包含的页面路径” %>
将一个页面包含在另一个页面中
1、静态包含就是将内容进行了直接的替换
2、只会生成一个源码文件
3、不能有同名变量
特点:
运行效率高一点点
耦合度高,不够灵活
include动态包含
语法:<jsp:include page=“要包含的页面或资源路径”></jsp:include>
相当于方法的调用,会生成两个源码文件,可以出现同名变量。降低耦合度低。
注:<jsp:include>双标签之间不能写任何内容,包括空格和换行。(除非有参数)
动态包含可以传递参数:
<jsp:param value="参数值" name="参数名"/>
value属性支持表达式
name属性不支持表达式
获取参数通过 request.getParameter("name属性值");
===========================================================
九大内置对象:
当前页的域对象pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的 out. request. reponse. session. application
pageContext.getAttribute("");
pageContext.getRequest();
pageContext.getResponse();
//request域对象
request.getAttribute("");
// session域对象
session.getAttribute("");
// application域对象
application.getAttribute("");
// 输出对象
response.getWriter();
out.write("");
// 配置对象
config.getServletContext();
// 当前JSP页面本身
page.getClass();
// 异常对象 只要在页面中设置过isErrorPage=true时才能使用
=========================================================
EL表达式:
<%
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 }获取session作用域的值:${sessionScope.uname }
获取JavaBean对象:${myUser }
获取JavaBean对象的属性:${myUser.userName } ----- ${myUser.getUserName() }
获取普通变量名(取不到):${a }
获取字面量的值:${1 }
EL使用字符串方法
获取字符串中是指定字符的下标:${uname.indexOf("a") }字符串截取:${uname.substring(0,2) }
EL表达式判断为空 ${empty 域变量 }
判断空字符串:${empty str1 }判断null:${empty str2 }
判断字符串:${empty str3 }
判断字符串:${str3 != null && str3 != "" }
<%
//集合
List list1 = new ArrayList<>();
list1.add(“aaa”);
list1.add(“bbb”);
list1.add(“ccc”);
List list2 = new ArrayList<>();
List 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 }判断集合为空:${empty list1 } -- ${empty list2 } -- ${empty list3 }
获取集合的值:${list1[0] }
获取集合中对象的属性:${userList[0].userName }
获取集合的长度:${userList.size() }
<%
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 }获取map对象:${map }
获取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 }减法:${num1 - num2 }
乘法:${num1 * num2 }
除法:${num1 / num2 } -- ${num1 div num2 }
大小比较:${num1 > num2 } -- ${num1 >10 } --- ${(num1+num2) <= 10 }
等值比较:${aa == ab } -- ${aa eq ac }
${(num1+num2) > 10 && aa == ab }
${(num1+num2) > 10 || aa == ab }
<%
// 通过pageContext对象设置指定域范围的值
pageContext.setAttribute(“userName”, “Lisa”, PageContext.REQUEST_SCOPE);
String userName = (String) pageContext.getAttribute("userName", PageContext.REQUEST_SCOPE);
System.out.println(userName);
%>
======================================================
JSTL的使用:
1、将jstl相关的jar包拷贝到项目的lib目录下
jstl.jar和standard.jar
2、在页面引入想要使用的库
<%@taglib uri=“要使用的库的路径” prefix=“前缀名” %>
3、使用标签
<前缀名:标签名 属性名=“属性值”></前缀名:标签名>
4、标签一般通过el表达式操作域对象
if标签
条件判断
有两种形式
1、有主体内容
<c:if test=“判断条件,返回true或false” var=“限域变量名,用户接收判断条件的返回值” scope=“限域变量名的域范围 page|request|session|application”>
// 当满足条件时,执行的代码
</c:if>
2、无主体内容
<c:if test=“判断条件,返回true或false” var=“限域变量名,用户接收判断条件的返回值” scope=“限域变量名的域范围 page|request|session|application”>
</c:if>