目录
六、JSP技术
6.1 JSP概述
在动态网页开发中,经常需要动态生成HTML内容,例如,-篇新闻报道的浏览次数需要动态生成。这时,如果使用Servlet来实现HTML页面数据的统计,需要调用大量的输出语句,使静态内容和动态内容混合在一起, 导致程序非常臃肿。为了克服Servet的这些缺点,Oracie(Sun)公司推出了JSP技术。
6.1.1 什么是JSP
JSP英文全称Java Server Pager ava服务端页面,它是建立在servlet规范基础上的动态网页开发技术。
jsp文件中,HTML 代码和Java代码共同存在。JSP文件的扩展名为.jsp
6.1.2 编写第一个 JSP文件
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
HelloWorld!!!
<%response.getWriter().print("大数据2005"); %>
</body>
</html>
修改jsp编码:
6.1.3 JSP运行原理
JSP的运行过程具体如下:
(1)客户端发出请求,请求访问JSP文件。
(2 )JSP容器先将JSP文件转换成一个Java源文件( Java Serlet源程序),在转换过程中,如果发现JSP文件申存在任何语法错误,则中断转换过程,并向服务端和客户端返回出错信息。
(3)如果转换成功,则JSP容器将生成的Java源文件编译成相应的字节码文件*.classo该class文件就是一个Servlet, Servlet 容器会像处理其他Servlet 一样来处理它。
(4) 由Servlet 容器加载转换后的 Servlet类( class 文件)创建一个该Servlet (JSP页面的转换结果)实例,并执行Servlet的jsplnit()方法。jsplnit()方法 在Servlet的整个生命周期中只会执行一次。
(5)执行jspService()方法来处理客户端的请求。
生成的 .java .class文件在
D:\JavaWeb\class\apache-tomcat-8.5.71\work\Catalina\localhost\chapter07\org\apache\jsp
目录下
6.2 JSP基本语法
6.2.1 JSP脚本元素
JSP脚本元素主要包含如下三种类型:
- JSP Scriptlets
- JSP 声明语句
- JSP 表达式
JSP Scriptlets
JSP Scriptlets是一段代码段。当需要使用Java实现一些复杂操作或控制时,可以使用它。
JSP Scriptlets格式:
<% java代码(变量、方法、表达式等) %>
JSP 声明语句
JSP的声明语句用于声明变量和方法,它以“<%!”开始,以“%>”结束:
<%!
定义的变量或方法等
%>
JSP 表达式
对应的位置生成在 _jspService方法内部。
在jsp页面,可以输入一个结果,基本语法:<%=表达式 %>,其实就等同于out.print();
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%!
int a=1;
int b=2;
%>
<%!
public String dashuju(){
String str="dashuju";
return str;
}
%>
<% out.print(a+b); %>
<br/>
<% response.getWriter().print("huagong"); %>
<br/>
<% out.print(dashuju()); %>
<br/>
<br/><br/><br/>
<%=a+b %>
<br/>
<%=dashuju() %>
</body>
</html>
6.2.2 JSP注释
格式:<%-- 注释信息 --%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" session="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
html内容
<!-- html注释 -->
<%
//java注释
System.out.print("java 注释");
%>
<%--jsp注释 --%>
</body>
</html>
6.3 JSP指令
在JSP页面中,经常需要对页面的某些特性进行描述,格式如下:
<%@ page 属性名1="属性值1" 属性名2="属性值2" …… %>
在上述语法中,page 用于声明指令名称,属性用来指定JSP页面的某些特性。
6.3.2 include指令
在jsp页面通常会需要显示其它页面的信息,所以可以通过这个include指令把其它页面包含过来。
格式:
<%@ include file="被包含文件的url" %>
创建date.jsp页面,include.jsp页面。
- 把多个页面的内容,合并输出。
- 多个页面对应生成一个java文件,编译后,对应一个class文件。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
date.jps页面用来输出当前时间:
<%out.print(new Date().toLocaleString()); %>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
我是include页面,下面是我包进来的页面:
<%@ include file="date.jsp" %>
</body>
</html>
6.4 JSP隐式对象
6.4.1 隐式对象的概述
在JSP页面中,有一些对象需要频繁使用,如果每次都重新创建这些对象则会非常麻烦。为了简化Web应用程序的开发,JSP2.0规范中提供了9个隐式(内置)对象,它们是JSP默认创建的,可以直接在JSP页面中使用。
6.4.2 out对象
out对象在输出内容到网页上面去,最终是通过reponse缓冲区给输出的。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
out.print("first line");
response.getWriter().print("second line <br/> 2020080605012 杨骏<br/>");
%>
</body>
</html>
6.4.3 pageContext对象
在JSP文件中,使用pageContext对象可以获取JSP的其他8个隐式对象。
pageContext对象不仅提供了获取隐式对象的方法,还提供了存储数据的功能。pageContext对象存储数据是通过操作属性来实现的。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
HttpServletRequest req=(HttpServletRequest) pageContext.getRequest();
//req.setAttribute("dashu", "huagong");
pageContext.setAttribute("dashu11","pageContext",PageContext.PAGE_SCOPE);
pageContext.setAttribute("dashu22","REQUEST",PageContext.REQUEST_SCOPE);
pageContext.setAttribute("dashu33","SESSION",PageContext.SESSION_SCOPE);
pageContext.setAttribute("dashu","APPLICATION",PageContext.APPLICATION_SCOPE);
%>
<%=pageContext.findAttribute("dashu") %>
<hr/>
<%=(String) req.getAttribute("dashu") %>
</body>
</html>
6.4.4 exception对象
exception 对象它是用来捕获异常信息的。
它用于封装JSP中抛出的异常信息,即page指令中指定了属性
<%@ page isErrorPage=“true” %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage="error.jsp"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% int a=3;
int b=0;
%>
输出:<%=(a/b) %>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
用来显示错误信息:<br/>
2020080605012 杨骏
<%=exception.getMessage() %>
</body>
</html>
2020080605012