4. JSP指令
<%@ page args...%> <%@ include file="" %>
- 例子:自定义错误页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <%--定制错误页面--%> <%@ page errorPage="error/500.jsp" %> <head> <title>Title</title> </head> <body> <% int x = 1/ 0; %> </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%--定制错误页面--%> <html> <head> <title>Title</title> </head> <body> <img src="../img/500.png" alt="500"> </body> </html>
web.xml中配置
<error-page> <error-code>500</error-code> <location>/error/500.jsp</location> </error-page>
- 例子:包含
<%--@include会将两个页面合二为一--%> <%@include file="common/header.jsp%> <h1>我是主体</h1> <%@include file="common/foot.jsp%> <%--jsp标签:jsp:include它是拼接页面本质还是三个--%> <jsp:include page="common/header.jsp"/> <h1>我是主体</h1> <jsp:include page="common/foot.jsp"/>
5. 九大内置对象
- PageContext 存东西
- Request 存东西
- Response
- Session 存东西
- Application(ServletContext)存东西
- config(ServletConfig)
- out
- page
- Exception
<%--内置对象--%> <% pageContext.setAttribute("na1","11");//保存的数据只在一个页面中有效 request.setAttribute("na2","12");//保存的数据只在一次请求中有效,请求转发会携带这个数据 session.setAttribute("na3","13");//保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器 application.setAttribute("na4","14");//保存的数据在服务器中有效,从打开服务器到关闭服务器 %> <%--脚本片段中的代码,会被原封不动生成到.JSP.java 要求:这里面的代码;必须保证Java语法的正确性 --%> <% //从pageContext取出,我们通过寻找的方式来 //从底层到高层(作用域),page->request->session->application String na1 = (String) pageContext.findAttribute("na1"); String na2 = (String) pageContext.findAttribute("na1"); String na3 = (String) pageContext.findAttribute("na1"); String na4 = (String) pageContext.findAttribute("na1"); String na5 = (String) pageContext.findAttribute("na1"); %> <%--使用EL表达式输出${}--%> <h1>取出的值是:</h1> <h2>${na1}</h2> <h2>${na2}</h2> <h2>${na3}</h2> <h2>${na4}</h2> <h2>${na5}</h2> <%--这里的这个5是不显示的,但是如果用之前的<%=na5%>会显示成为null--%>
request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用的;
session:客户端向服务器发送请求,产生的数据,用户用完一会还有用,比如:购物车
application:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可能使用,比如:聊天数据;
6. JSP标签、JSTL标签、EL表达式
<!--JSTL表达式的依赖--> <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <version>1.2</version> </dependency> <!--standard标签库--> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency>
6.1 EL表达式${}
- 获取数据
- 执行运算
- 获取web开发的常用对象
- 调用Java方法
6.2 JSP标签
<jsp:forward page="jsp2.jsp"> <jsp:param name="name" value="hxl"/> <jsp:param name="age" value="22"/> </jsp:forward>
可以在另一个页面进行取出参数
<%--取出参数--%> 名字:<%=request.getParameter("name")%> 年龄:<%=request.getParameter("age")%>
6.3 JSTL表达式
JSTL标签库的使用就是为了弥补HTML标签的不足;他自定义了许多标签,可以供我们使用,标签的功能和Java代码一样
JSP标准标签库https://www.runoob.com/jsp/jsp-jstl.html
核心标签(掌握部分即可)
格式化标签
sql标签
xml标签
- JSTL标签库使用步骤
- 引入对应的taglib
- 使用其中的方法
- c:if
<%@ page contentType="text/html;charset=UTF-8" language="java" %>\ <%--引入JSTL核心标签库,我们才能使用JSTL标签 core--%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>Title</title> </head> <body> <h4>if测试</h4> <hr> <form action="coreif.jsp" method="get"> <%-- EL表达式获取表单中的数据 ${param.参数名} --%> <input type="text" name="username" value="${param.username}"> <input type="submit" value="登录"> </form> <%--判断如果要提交的用户名是管理员,则登录成功--%> <%--这个里面的test是必须写的--%> <c:if test="${param.username=='admin'}" var="isAdmin"> <c:out value="管理员欢迎你!"></c:out> </c:if> <c:out value="${isAdmin}"></c:out> </body> </html>
- 在Tomcat也需要引入jstl的包,否则就会报错“JSTL解析错误
- 出现了500错误,比如下面这个
- 这个我们需要查看tomcat服务器中是否存在jstl和standard的jar包。如果没有就很有可能出现这个问题,我们将这两个jar包复制到tomcat下
- 这个可以快速定位到jar包
- 例题:使用判断c:when c:choose
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <%--定义一个变量score,值为80--%> <c:set var="score" value="80"></c:set> <c:choose> <c:when test="${score>=90}"> 你的成绩为优秀 </c:when> <c:when test="${score>=80}"> 你的成绩为良好 </c:when> <c:when test="${score>=60}"> 你的成绩为合格 </c:when> <c:when test="${score<60}"> 你的成绩为不合格 </c:when> </c:choose> </body> </html>
- 例题:使用foreach遍历
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page import="java.util.ArrayList" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% ArrayList<String> people = new ArrayList<>(); people.add(0,"老大"); people.add(1,"老er"); people.add(2,"老三"); people.add(3,"老四"); people.add(4,"老王"); request.setAttribute("list",people); %> <%-- var,每次遍历出来的变量 items,要遍历的东西 begin,哪里开始 end,哪里结束 step,步长 --%> <%--当前这个list中进行遍历--%> <c:forEach var="people" items="${list}"> <c:out value="${people}"></c:out> <br> </c:forEach> </body> </html>