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的成员位置!
语法格式:
-
Java代码执行区
指的是Servlet的service方法. 用于每次请求都会执行
语法格式:
1 2 3
| <% 编写Java逻辑代码,生成到service方法中 %>
|
-
输出表达式
用于快速的将Java代码中的变量,输出到网页中
语法格式:
上述语法格式中的值,其实是被生成到了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=值 %>
|
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>
|
详情请去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,并编写发生异常时页面的代码