JSP

  • 简介

    JSP(Java Server Pages) -Java的动态网页技术

  • JSP引擎

    引擎原理:JSP引擎用于将JSP文件,转换为Servlet

    原理步骤:

    1
    2
    3
    1.在服务器启动时,JSP引擎读取JSP文件
    2.将文件转换为Servlet , 并给Servlet添加映射地址为原JSP文件名称.
    3.当用户访问xxxx.jsp时,请求的不是jsp文件,而是JSP引擎根据文件转换的Servlet
  • JSP语法结构

    JSP文件保存在.jsp文件中 .保存的路径: web(idea的是webContent)目录下.

    JSP语法存在三大语法结构:1.HTML代码、2.Java代码、3.JSP特有的一些语法结构.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ 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>
<%
for(int i=0;i<100;i++){
%>
<h1>从前有座山</h1>
<%} %>
</body>
</html>

JSP代码

  • Java代码声明区

    指的是Java类的成员位置,在JSP文件中的Java代码声明区中编写的Java代码,会原封不动的生成到Servlet的成员位置!

    语法格式:

    1
    2
    3
    <%!
    编写声明区的Java代码
    %>
  • Java代码执行区

    指的是Servlet的service方法. 用于每次请求都会执行

    语法格式:

    1
    2
    3
    <%
    编写Java逻辑代码,生成到service方法中
    %>
  • 输出表达式

    用于快速的将Java代码中的变量,输出到网页中

    语法格式:

    1
    <%=变量名%>

    上述语法格式中的值,其实是被生成到了out的print方法中,

    例如:<%=count%> 生成的Servlet: out.print(count);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ 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">
<title>Insert title here</title>
</head>
<body>
<%!
private int count = 0;
%>
<%
count++;
%>
<h1>您是网页的第<%=count %>个用户</h1>
</body>
</html>
  • JSP中的注释:

    因为JSP包含了三种语法结构.

    所以三种结构的注释, 都可以使用.

    HTML注释:

    1
    2
    语法: <!-- 注释 -->
    注意: 在JSP中,只能编写在HTML代码的位置,只能用于注释HTML部分.编写的HTML注释会被JSP引擎认为是HTML代码,转换为:out.write("<!-- 注释 -->");

    Java注释:

    1
    2
    语法: //单行  /*多行*/ /**文档*/
    注意: 在JSP中,只能编写在Java代码的位置,只能用于注释Java部分.编写Java注释会被JSP引擎认为是Java代码,原封不动的转换到Servlet中

    JSP注释:

    1
    2
    语法: <%-- JSP的注释 --%>
    注意: 指的是JSP文件的注释,被JSP注释的内容,在JSP引擎转换时期被忽略.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%@ 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">
<title>Insert title here</title>
</head>
<body>
<!-- HTML注释, 会被当做HTML代码 -->
<%
//Java注释 .
int x = 100;
%>
<%-- JSP注释 --%>
<div>床前明月光 , </div>
<div>玻璃好上霜 . </div>
<div>要不及时擦 , </div>
<div>整不好得脏 . </div>
</body>
</html>

JSP三大指令

指令的格式:

1
<%@ 指令名称 属性名1=值 属性名2=值 ... 属性名n=值 %>
  • page指令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%@ page
language="java"
contentType="text/html;charset=utf-8"
pageEncoding="UTF-8"
extends="继承的类"
buffer="数字|none" -- 是否允许缓存,以及允许缓存的大小.默认缓存,大小为8kb
autoFlush="true|false" -- 缓冲器是否自动清除,默认为true
session="true|false" -- 是否在service方法中,提前创建好session,默认true
isThreadSafe="true|false" -- service方法是否是线程安全的.默认false
errorPage="网址" -- 当JSP中的代码出异常时,页面自动跳转到网址,通常用语提示BUG.**
isErrorPage="true|false" -- 用于处理错误的页面,通常isErrorPage=true的页面,会被其他页面通过errorPage引入.**
-- 为true时,会在service中提前准备好,异常对象exception
import="导包列表" -- 属性值是导包的内容,多个包之间使用逗号隔开**
%>

导包和发生空指针异常的页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage="demo5.jsp"%>
<%@page import="java.util.HashMap,java.util.ArrayList"%>
<!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">
<title>Insert title here</title>
</head>
<body>
<%
String s = null;
s.toString();
%>
<%
ArrayList<String> data = new ArrayList<String>();
HashMap<String,Object> data2 = new HashMap<>();
%>
</body>
</html>

被引入的异常页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true"%>
<!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">
<title>Insert title here</title>
<style type="text/css">
div{
position: fixed;
top:0px;
left:0px;
bottom:0px;
right:0px;
background-color: #ccc;
color:#fff;
font-size:200px;
text-align: center;
padding-top: 100px;
font-weight: 700;
}
</style>
</head>
<body>
<%
if(exception != null)
System.err.println("异常信息: "+exception.toString());
%>
<div>
4 0 4
</div>
</body>
</html>
  • taglib指令

详情请去JSP内置对象、el表达式、taglib指令jstl标签和自定义标签查看上一篇博客Java_web(6)。

  • include指令

    用于将一个JSP或HTML文件,引入到另一个JSP文件中

    1
    格式: <%@ include file="地址" %>
  • include动作

    用于将一个JSP或HTML文件引入到另一个JSP文件中.

    1
    格式: <jsp:include page="地址" flush="true" />
  • include指令与动作的区别

    include指令: 在JSP的转换时期,将引入的JSP文件嵌入到了include指令的位置(合并为了一个文件),然后转换为Servlet!最终生成的是一个.java文件
    include动作: 在JSP程序的转换时期,引入的JSP文件会独立转换为Servlet,到访问时,在将响应体合并,(将被引入文件的响应体,动态加载在文件中)!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ 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">
<title>Insert title here</title>
</head>
<body>
<h1>include动作</h1>
<jsp:include page="demo3.jsp" flush="true"/>

<h1>include的指令</h1>
<%@ include file="demo3.jsp" %>
</body>
</html>
  • 扩展

jsp:forward/jsp:param

forward动作用于在JSP中实现转发,将请求转发到另一个指定的JSP程序或者Servlet中处理

1
2
3
4
5
<jsp:forward page=“urlSpec” flush=“true”/>
<jsp:forward page=“urlSpec”>
<jsp:param name=“key” value=“value”/>
</jsp:forward>
<jsp:param>用于指定参数和其对应的值

指定项目全局错误码的处理页面

  • 先打开项目的 web.xml文件
  • 在根节点中, 加入子节点:
1
2
3
4
5
6
<error-page>
<error-code>错误码</error-code>
<location>处理的页面地址</location>
</error-page>

注意:error-page可以编写多个
1
2
3
4
5
6
7
8
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
  • 在web目录下创建error.jsp,并编写发生异常时页面的代码