jsp中可以写java代码
jsp脚本
作用: 在jsp中创建局部变量,使用流程控制语句,使用if等等,类似于java中方法的内容
语法: <%java脚本%>
<%
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String now = sdf.format(new Date());
%>
注意:
jsp输出表达式
作用: 将java脚本运行结果输出到浏览器
语法: <%=表达式%>
当前时间是:<%=now%>
println()方法中能写什么这个表达式就能写什么
注意:java输出表达式后面不能写;
jsp声明
作用: 声明java成员变量和成员方法
语法: <%!成员变量或者成员方法%>
<%!
//声明成员变量
private String sname;
private int age;
%>
<%!
//声明成员方法
public void setAge(int age){
this.age = age;
}
public void setSname(String sname){
this.sname = sname;
}
%>
注意:声明标签可以写多个
jsp的注释
语法: <%-- --%>
<%--jsp注释--%>
注意:
jsp的使用原则: jsp中尽量不写java代码
作用: 将一个jsp包含在当前jsp中
语法: <%@ include file= “被包含页面的路径”%>
<h1>外部页面上</h1>
<%@ include file="haha.jsp"%>
<h1>外部页面下</h1>
注意:
作用: 告诉web服务器如何编译jsp,很重要,但一般不需要我们写,用默认的就好
语法: <%@ page 属性1=值1 属性2=值2 …%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
属性:
pageContext
第一个作用是获取其他8个内置对象
第二个作用是作为域对象使用的
这个三个参数的方法可以将键值对保存在指定的域对象
<%
// public static final int PAGE_SCOPE = 1;
// public static final int REQUEST_SCOPE = 2;
// public static final int SESSION_SCOPE = 3;
// public static final int APPLICATION_SCOPE = 4;
pageContext.setAttribute("age","20",PageContext.SESSION_SCOPE);
%>
使用pageContext简化版获取指定域对象中的值
其他举例
<%
session.setAttribute("user","admin");
pageContext.setAttribute("pass","123");%>
<%=session.getAttribute("user")%><br>
<%=pageContext.getAttribute("pass")%><br>
<%=session.getAttribute("age")%><br>
<%=pageContext.getAttribute("age",PageContext.SESSION_SCOPE)%><br>
<%=pageContext.findAttribute("age")%><br>
<%
request.setAttribute("sname","张三");
session.setAttribute("sname","李四");
// 使用el表达式从域对象中取数组属性
String[] names = {"haha","hehe","heihei"};
session.setAttribute("names",names);
// 使用el表达式从域对象中取map属性
Map<String,Object> student = new HashMap<>();
student.put("sname","王五");
student.put("sage",30);
request.setAttribute("student",student);
// map类型的属性,获取值的方式: map["key"] 或者 map.key
// 使用el表达式获取自定义数据类型的属性
Student s1 = new Student();
s1.setSname("admin1");
s1.setSage(20);
session.setAttribute("s1",s1);
// 使用el表达式获取自定义数据类型的集合的属性
Student s2 = new Student();
s2.setSname("admin2");
s2.setSage(30);
Student s3 = new Student();
s3.setSname("admin3");
s3.setSage(40);
List<Student> ss = new ArrayList<>();
ss.add(s1);
ss.add(s2);
ss.add(s3);
request.setAttribute("ss",ss);
%>
${10}<br>
${10 + 10}<br>
${"哈哈"}<br>
张三的姓名是: ${sname}<br>
李四的姓名是: ${sessionScope.sname}<br>
第一个人的名字是: ${names[0]}<br>
第二个人的名字是: ${names[1]}<br>
第三个人的名字是: ${names[2]}<br>
学生的名字是: ${student["sname"]}<br>
学生的年龄是: ${student["sage"]}<br>
学生的名字是: ${s1.sname}<br>
学生的年龄是: ${s1.sage}<br>
第一个学生的名字是: ${ss[0].sname}<br>
第一个学生的年龄是: ${ss[0].sage}<br>
第二个学生的名字是: ${ss[1].sname}<br>
第二个学生的年龄是: ${ss[1].sage}<br>
第三个学生的名字是: ${ss[2].sname}<br>
第三个学生的年龄是: ${ss[2].sage}<br>
作用: 实现转发操作
语法:
<jsp:forward page="转发的资源路径">
<jsp:forward page="index.jsp">
<jsp:param name="user" value="admin"/>
<jsp:param name="pass" value="123"/>
</jsp:forward>
注意:转发时可以携带请求参数(必须使用请求参数标签)
作用: 将一个jsp包含进当前jsp
语法: <jsp:include page=“被包含的资源路径”>
<h1>外部页面上</h1>
<jsp:include page="haha.jsp">
<jsp:param name="user" value="admin"/>
<jsp:param name="pass" value="123"/>
</jsp:include>
<h1>外部页面下</h1>
<%--haha.jsp文件获取请求参数--%>
帐号是: <%=request.getParameter("user")%><br>
密码是: <%=request.getParameter("pass")%><br>
注意:这个include标签效果与编译指令的include是一样的,但是实现机制不同
动态include与静态include的区别?
使用步骤:
先导入jar
在需要使用标签的页面上,使用taglib编译指令导入标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
在jsp中使用标签
作用: 设置域对象中的属性值
语法:
<c:set>
注意: 工作中使用不多,了解即可
作用: 输出表达式结果到浏览器
语法:
<c:out value="表达式">
注意: 功能与el表达式相同,使用el表达式替代
作用: 类似于if语句
语法:
<c:if test="表达式"></c:if>
作用: 类似于switch语句
语法:
<c:choose>
<c:when test="表达式"></c:when>
......可以写多个
<c:otherwise></c:otherwise>
</c:choose>
<%@ page import="com.bjpowernode.pojo.Student" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
Student s = new Student();
s.setSname("哈哈");
s.setSage(20);
// 1 = 男 0 = 女
s.setGender(5);
request.setAttribute("stu",s);
%>
<%-- 1)可以直接修改域对象中的数据的属性 --%>
学生姓名是: ${stu.sname}<br>
<c:set target="${stu}" property="sname" value="呵呵"></c:set>
学生姓名是: ${stu.sname}<br>
<%-- 2) 直接在域对象中添加一个键值对 --%>
<c:set var="user" value="嘿嘿" scope="request"></c:set>
学生姓名是: ${requestScope.user}<br>
<%-- 3) 使用out标签输出域对象中的属性值 --%>
学生姓名是: <c:out value="${requestScope.user}"></c:out> <br>
<%-- 4) 根据域对象中学生的性别的值,默认选中单元按钮的值 --%>
性别: <input type="radio" name="gender" value="0"
<c:if test="${stu.gender == 0}">checked = "checked"</c:if>
>女<input type="radio" name="gender" value="1"
<c:if test="${stu.gender == 1}">checked = "checked"</c:if>
>男<br>
<%-- 5) 根据域对象中学生的性别的值,转换显示结果 --%>
学生性别:
<c:if test="${stu.gender == 1}">男</c:if><c:if test="${stu.gender == 0}">女</c:if>
<%-- 6) 根据域对象中学生的性别的值,转换显示结果 --%>
<br>学生性别:
<c:choose>
<c:when test="${stu.gender == 1}">
男
</c:when>
<c:when test="${stu.gender == 0}">
女
</c:when>
<c:otherwise>不男不女</c:otherwise>
</c:choose>
</body>
</html>
作用: 执行for循环
语法:
<c:for var="变量名" items = "需要迭代的集合或者数组"></c:for>
<c:forEach var="student" items="${list}" varStatus="sta">
<tr
<c:if test="${sta.count % 2 == 1}"> style="background-color:pink;"</c:if>
>
<td>${sta.count}</td>
<td>${student.sname}</td>
<td>${student.sage}</td>
<td>
<c:if test="${student.gender == 1}">男</c:if>
<c:if test="${student.gender == 0}">女</c:if>
</td>
</tr>
</c:forEach>
作用: 根据指定字符将字符串分割为字符串数组然后迭代
例子: “sd,fs,df,sd,fs,df”,将字符串取出子串 “sd” “fs”
实现:
语法:
<c:forTokens items="sd,fs,df,sd,fs,df" delims="," var="s" varStatus="sta">
第${sta.count}个字符是${s}<br>
</c:forTokens>
作用: 实现重定向
语法:
此处实现重定向:<c:redirect url="index.jsp"></c:redirect>