Servlet Class5
JSP:
1.定义:JSP(全称Java Server Pages)是由 Sun Microsystems 公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成 HTML、XML 或其他格式文档的Web网页的技术标准。
JSP 技术是以 Java 语言作为脚本语言的,JSP 网页为整个服务器端的 Java 库单元提供了一个接口来服务于HTTP的应用程序。
简单来说,JSP可以在html中写JAVA代码,JSP文件会被编译为Servlet文件,所以JSP本质上就是Servlet,相比Servlet,可以更简单的输出html标签。
2.三大指令
(1)page,定义网页依赖属性,例如脚本语言,erro页面等
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
(2)taglib,引入标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
(3)include,嵌入其他JSP文件
指令包含另一个页面,将另一个JSP插入当前JSP运行,编译为一个Servlet
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%@include file="footer.jsp" %>
</body>
</html>
3.基本语法
<% JAVA代码 %> 用来编写JAVA代码
<%! 字段或者方法%>用来声明成员变量或者方法
<%=%> 用于输出文字或者html标签,相当于response.getWriter().println()
<%=%>和 <%out.println()%>:
out是jsp的隐式对象,可以直接使用,<%=%> 不需要分号结尾,<%%> 需要以分号结尾,和java代码一样
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%> <%="hello jsp"%> <br> <% out.println("hello jsp");%>
注释:
<%-- --%>JSP注释,HTML源码中不显示 Servlet文件中不显示 只在JSP内可见
<!-- -->HTML注释,JSP、HTML源码、编译后的Servlet中都可见,不建议使用
<%//单行注释 /*多行注释*/%> html源码中不显示,编译后的Servlet JSP中可见
导包:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%>
错误代码跳转:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" errorPage="catch.jsp"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% int[] a = new int[2]; a[3] = 0; %> </body> </html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false" isErrorPage="true"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%=exception %>
</body>
</html>
可以根据报错码来定义报错后跳转的页面:
XML配置:
规定404报错跳转的位置
<error-page> <error-code>404</error-code> <location>/errorCatch.jsp</location> </error-page>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false" isErrorPage="true"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%="你访问的资源不存在!" %>
</body>
</html>
4.Servlet三个域对象、JSP四个域对象、JSP九个隐式对象
(1)Servlet三个域对象:
request(HttpServletRequest)
session(HttpSession):
application(ServletContext)
(2)JSP四个域对象:
pageContext(pageContext)
request(HttpServletRequest)
session(HttpSession)
application(ServletContext)
(3)JSP九个隐式对象:
request 代表请求
response 代表响应
out 代表 输出:
有缓冲区,缓冲区的大小是8kb
当满足以下条件之一,缓冲区内容写出:
1)缓冲区满了
2)刷新缓存区
3)关闭缓存区
4)执行完毕jsp页面
<%="a"%>
<%="b"%>
resonse.getWriter().print("c");
c会第一个被输出!
response.setBufferSize(0);//缓冲区大小为0
pageContext 代表当前页面作用域:pageContext.setAttribute(),只有当前页面才能访问到!
另外,pageContext可以获取、设置其他域对象内的值以及其他隐式对象:
<%pageContext.getAttribute("name",pageContext.REQUEST_SCOPE);//获取其他域的值%> <%pageContext.findAttribute("name");//依次从pagecontext request session application中寻找%> <%pageContext.getRequest();//获取其他隐式对象%>
session 代表当会话作用域
application 代表当全局作用域
page 对象即表示当前对象
JSP 会被编译为一个Servlet类 ,运行的时候是一个Servlet实例。 page即代表this
config可以获取一些在web.xml中初始化的参数。
exception 对象只有当前页面的<%@page 指令设置为isErrorPage="true"的时候才可以使用。
同时,在其他页面也需要设置 <%@page 指令 errorPage="" 来指定一个专门处理异常的页面。
5.JSP动作
动作包含,可以传参,编译为两个Servlet文件
<jsp:include page="footer.jsp"> <jsp:param name="year" value="2018"/> </jsp:include>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<hr>
<%-- 读取传来的参数--%>
<p style="text-align:center">copyright@<%=request.getParameter("year")%></p>
</body>
</html>
服务端跳转:
<jsp:forward page="footer.jsp"/>