文章目录
JAVA web
八、JSP
1、什么是JSP
Java Server Page :java服务端页面,也和Servlet一样,用于动态Web技术;
最大的特点:
- 写JSP就像在写HTML;
- 区别:
- Html 只给用户提供静态的数据
- jsp页面中可以嵌入java代码,为用户提供动态数据;
2、JSP原理
-
JSP的执行过程
1、客户端发出请求。
2、Web容器将JSP转译成Servlet源代码。
3、Web容器将产生的源代码进行编译。
4、Web容器加载编译后的代码并执行。
5、把执行结果响应至客户端。
3、JSP的基本语法
-
JSP页面可以嵌入HTML标签、指令、动作、脚本、扩展标签等。
-
这些内容可以分成元素和模板数据。
-
元素是在JSP基本语法中定义的内容,JSP容器在转换阶段将元素翻译成相应的Java代码。
-
JSP页面中其他的所有内容都是模板数据。JSP容器对模板数据不做处理。
-
JSP定义的元素有4种类型。
指令:用于设置整个页面属性
脚本:JSP中嵌入的Java代码
动作:利用XML语法格式的标记来控制JSP容器的行为
表达式语言(EL):$(表达式),计算表达式括号内的表达式的值,将其转换为String类型并进行显示
-
1、脚本元素
<%--jsp表达式
作用:将程序的输出结果,输出到客户端
--%>
<%= new java.util.Date()%>
<%--声明--%>
<%!
static {
System.out.println("Loading...");
}
private int globVar =0;
public void myMethod{
System.out.println("我进入到没有myMethod方法里了");
}
%>
<%
java代码
%>
2、指令元素
<%@page args.... %>
<%@include file=""%>
<%--@include会将两个页面合二为一--%>
<%@include file="file/header.jsp"%>
<h1>网页主体</h1>
<%@include file="file/footer.jsp"%>
<hr>
<%--jSP标签
jsp:include:拼接页面,本质还是三个
--%>
<jsp:include page="/file/header.jsp"/>
<h1>网页主体</h1>
<jsp:include page="/file/footer.jsp"/>
3、动作元素
JSP的动作利用XML语法格式的标记来控制JSP容器的行为。
<jsp:action_name attribute="value"/>
与JSP指令不同的是,JSP动作元素在请求处理阶段起作用
4、EL表达式 ${ }
计算表达式括号内的表达式的值,将其转换为String类型并进行显示
- 获取数据
- 执行运算
- 获取web开发的常用对象
注释
<!--html注释内容-->
<%--jsp注释--%>
<%//单行注释%>
<%/*
多行
注释
*/%>
JSP的注释,不会在客户端显示,HTML就会!
4、九大内置对象和四大作用域
1、九大内置对象
- **输出输入对象:**request、response、out
- **通信控制对象:**pageContext、session、application
- **Servlet对象:**page、config
- **错误处理对象:**exception
2、四大作用域
<%--内置对象--%>
<%
//存入数据
pageContext.setAttribute("name1","马龙");//只在一个页面中有效
request.setAttribute("name2","张继科");//保存的数据只在一次请求中有效,请求转发会携带这个数据
session.setAttribute("name3","陈梦");//保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("name4","孙颖莎");//保存的数据只在服务器中有效,从打开服务器懂啊关闭服务器
%>
<%
//从底层到高层(作用域):page——》request——》session——》application
String name1 = (String) pageContext.findAttribute("name1");
String name2 = (String) pageContext.findAttribute("name2");
String name3 = (String) pageContext.findAttribute("name3");
String name4 = (String) pageContext.findAttribute("name4");
String name5 = (String) pageContext.findAttribute("name5");//不存在的数据
%>
<%--输出数据到页面--%>
<h1>乒乓球运动员有哪些</h1>
<p>${name1}</p>
<p>${name2}</p>
<p>${name3}</p>
<p>${name4}</p>
<p>${name5},来自EL表达式</p>
<p><%=name5%>,来自EL表达式</p>
**
5、JSP标签、JSTL标签
在web.xml中导入依赖
<!-- JSTL表达式依赖 -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!-- standard 标签库 -->
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>1.2.5</version>
</dependency>
JSP标签
<%--转发,转发的时候可以传递参数--%>
<jsp:forward page="file/jsptag02.jsp">
<jsp:param name="name" value="马龙"/>
<jsp:param name="age" value="33"/>
</jsp:forward>
JSTL表达式
JSTL标签库的使用就是为了弥补HTML标签的不足,它自定义了许多标签供我们使用,标签的功能和java代码一样!根据JSTL标签所提供的功能,可以将其分为5个类别:
JSTL标签库使用步骤
-
引入对应的 taglib
-
使用其中的方法
-
在Tomcat 也需要引入 jstl的包,否则会报错:JSTL解析错误
c:if 判断
<%@ 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>
<h3>if测试</h3>
<hr>
<form action="coreif.jsp" method="get">
<input type="text" name="username" value="${param.username}">
<input type="submit" value="登录">
</form>
<%--判断如果提交的用户是管理员,则登录成功--%>
<c:if test="${param.username=='admin'}" var="isAdmin">
<c:out value="登录成功,欢迎您!!"></c:out>
</c:if>
<c:out value="${isAdmin}"/>
</body>
</html>
c:choose c:when 选择
<%--定义一个变量score,值为85--%>
<c:set var="score" value="55"/>
<c:choose>
<c:when test="${score>=90}">
你的成绩为优秀
</c:when>
<c:when test="${score>=80}">
你的成绩为一般
</c:when>
<c:when test="${score>=70}">
你的成绩为良好
</c:when>
<c:when test="${score<=60}">
你的成绩为不及格
</c:when>
</c:choose>
c:forEach 循环
<%
ArrayList<String> people = new ArrayList<>();
people.add("张三");
people.add("李四");
people.add("王五");
people.add("赵六");
people.add("田六");
request.setAttribute("list",people);
%>
<%--
var , 每一次遍历出来的变量
items, 要遍历的对象
begin, 哪里开始
end, 到哪里
step, 步长
--%>
<c:forEach var="people" items="${list}">
<c:out value="${people}"/> <br>
</c:forEach>
<hr>
<c:forEach var="people" items="${list}" begin="1" end="3" step="1" >
<c:out value="${people}"/> <br>
</c:forEach>