JSP入门总结
文章目录
一、介绍
- JSP 是 Java Server Pages 的缩写,是一种动态网页开发技术
- JSP 是第二代Java Web开发技术,是Servlet的升级版
- JSP 的主要作用是代替Servlet程序回传HTML页面的数据
二、生命周期
JSP生命周期包括以下4个阶段:
- 编译
- 初始化(容器调用jspInit()方法)
- 执行(容器调用 _jspService()方法)
- 销毁(容器调用jspDestory()方法)
这和Servlet生命周期类似,不同的是,JSP需要先被编译成Servlet。
1、编译
当浏览器请求JSP时,JSP容器会首先检查是否需要编译页面。如果该页面从未被编译过,或者自上次编译以来对其进行了修改,则编译该页面。
JSP本质是Servlet,因此JSP容器就是Servlet容器
编译过程包括3个步骤:
- 解析JSP:JSP容器解析JSP文件,查看是否有语法错误
- 翻译JSP:JSP容器把JSP文件翻译为Servlet类
- 编译Servlet
2、初始化
当容器加载JSP时,它将在处理任何请求之前调用jspInit()方法。如果我们需要自定义JSP的初始化内容,可以重写jspInit()方法。
public void jspInit(){
//……
}
3、执行
JSP页面完成初始化后,JSP将会调用_jspService()方法。方法以HttpServletRequest 对象和 HttpServletResponse 对象作为方法参数。
public void _jspService(HttpServletRequest req,HttpServletResponse resp){
//……
}
4、销毁
jspDestory()方法等效于Servlet中的destory()方法。
public void jspDestory(){
……
}
三、入门实例
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%out.print("Hello,JSP");%>
</body>
</html>
代码解释:<%@ page%>用来指定页面配置信息,contentType="text/html;charset=UTF-8"指定该网页类型为html,网页字符编码为UTF-8;language="java"指定该网页编程语言为Java。
<%out.print(“Hello,JSP”);%>是JSP中的输出语句,<% %>中的代码是Java语句,因此以;结尾。
四、基础语法
1、JSP的常用脚本
1.1、声明脚本
格式:<%! 声明语句 %>
作用:用于声明一个或多个变量、方法,以供后面的代码使用。
特点:不会在浏览器的页面上显示出来,仅存在于翻译后的Java类中。
代码实例如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%! int num = 0;%>
<%! Circle a = new Circle(2.0);%>
<%!
public void show(){
//……
}
%>
</body>
</html>
1.2、表达式脚本
格式:<%=表达式 %>
作用:把变量或者表达式输出到网页上,不需要out.print()就能输出数据。用于打印变量和方法的值。
注意点:JSP表达式不能以分号结尾
<%=21 %><br/>
<%="可以输出字符串"><br/>
1.3、代码脚本
格式:<% Java语句 %>
作用:能把写入的Java内容插入到Servlet的service()方法中
<%--1.if语句--%>
<%
int i = 1;
if (i == 1) {
System.out.println("我爱Java!");
} else {
System.out.println("我爱Python!");
}
%> <br/>
<%--2.for循环语句--%>
<%
for (int j = 0 ; j < 3; j++) {
System.out.println("第" + j + "次循环");
}
%> <br/>
2、注释
2.1、HTML注释
HTML注释会被翻译到JSP文件对应的Java类的_jspService()方法中,以out.write()输出到客户端,write()方法会自动识别标签,执行标签对应的功能,不会在浏览器的页面上输出注释
2.2、Java注释
- 单行注释//
- 多行注释 /**/
2.3、JSP注释
<%–JSP注释内容–%>
JSP注释中的内容不会在JSP文件翻译后的Java类中出现,即注释的内容没有任何功能。
五、JSP的三大指令
JSP 指令用来告诉 Web服务器如何处理JSP页面的请求和响应。
1、page指令
page指令用来定义当前页面的相关属性。
<%@ page attribute = "value"%>
相关属性如下:
- contentType属性:表示JSP返回的数据类型是什么,即response.setContentType()的参数值
- language属性:表示JSP翻译之后是什么语言文件(目前只支持Java)
- pageEncoding属性:表示当前JSP文件本身的字符集
- import属性:导包,和Java一致
- autoFlush属性:设置当out输出流缓冲区满了之后是否自动刷新缓冲区,默认值是true
- buffer属性:设置out缓冲区的大小,默认是8kb
- errorPage属性:设置当JSP页面运行出错时自动跳转到的页面(错误信息页面)的路径
- isErrorPage属性:设置当前JSP页面是否是错误信息页面,默认是false,如果是true可以 获取错误信息
- session属性:设置访问当前JSP页面时是否会创建HttpSession对象,默认值是true
- extends属性:设置JSP页面翻译出来的Java类默认继承谁
2、include指令
include指令用于在JSP页面引入其它内容,可以是JSP文件、html文件和文本文件等,相当于把文件的内容复制到JSP页面。引入的文件和JSP页面同时编译运行。
格式:
<%@ include file="URL"%>
file指定需要引入文件的相对路径。
优点:
- 增加代码复用性
- 使JSP页面的代码结构清晰易懂
- 维护简单
实例:在index.jsp页面使用include指令引入head.jsp。head.jsp代码如下:
<p>
我爱Java
</p>
index.jsp代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<body>
<%@ include file="head.jsp" %>
<p>我也爱Python</p>
</body>
</html>
3、taglib指令
Java API允许在页面中自定义标签,标签库就是自定义标签的集合。
在JSP中,我们可以使用taglib指令声明并引入标签库。
语法:
<%@ taglib uri="tagliburl" prefix="tagPre"%>
uri指定自定义标签库的存放位置;prefix指定标签库的前缀。
六、JSP的六大动作
1、include动作
include动作的作用和include指令相同。不同的是,include动作的语法是:
<jsp:include page="relativeURL"/>
2、forward动作
JSP的forward动作与Servlet的转发相似。
jsp:forward 动作用来将请求转发到另一个页面中,请求的参数数据会被一起转发到目标页面。语法如下:
<jsp:forward page="url"/>
示例:在login.jsp页面中使用jsp:forward跳转到index.jsp页面。login.jsp页面代码如下:
<%@ page language="java" contentType="text/html;charset=utf-8"%>
<html>
<head>
<title>Title</title>
</head>
<body>
<jsp:forward page="index.jsp" />
</body>
</html>
index.jsp页面代码如下:
<%@ page language="java" contentType="text/html;charset=utf-8"%>
<html>
<head>
<title>主页</title>
</head>
<body>
Hello,JSP
</body>
</html>
3、param动作
jsp:param动作用来传递参数信息,将本页面中的参数传递给目标页面。
语法如下:
<jsp: param name="param_name" value="param_value"/>
示例:在login.jsp中传递参数,并转发到index.jsp页面。login代码如下:
<%@ page language="java" contentType="text/html;charset=utf-8"%>
<html>
<head>
<title>登录</title>
</head>
<body>
<%
// 设定传递参数的编码格式
request.setCharacterEncoding("UTF-8");
%>
<jsp:forward page="index.jsp">
<jsp:param name="username" value="root" />
</jsp:forward>
</body>
</html>
index.jsp页面代码如下:
<%@ page language="java" contentType="text/html;charset=utf-8"%>
<html>
<head>
<title>主页</title>
</head>
<body>
<%=req.getParameter("username")%>同学,夜深了,早点休息吧,校园网将于明天早上6:00恢复!
</body>
</html>
4、useBean动作
jsp:useBean用于获取Bean对象。
jsp:useBean首先会在指定范围内查找Bean对象,如果Bean对象不存在,则创建Bean对象。
语法如下:
<jsp:useBean id="name" class="package.class" scope="page|request|session|application"
- id:表示Beand实例化对象的变量名
- class:实例化Bean的类路径,指定的类必须包含public且无参数的构造方法
- scope,Bean的作用域,取值有:
- page:只能在当前页面使用该Bean对象
- request:只能在一次请求范围内使用
- session:只能在一次会话范围内使用
- application:可以在整个应用范围内使用
示例:创建一个简单的Java类,代码如下:
package com.chen.Jsp
public class myTest{
public String hello(){
return "Hello JSP!";
}
}
index.jsp代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Title</title>
</head>
<body>
<jsp:useBean id="test" class="com.chen.Jsp.myTest" />
<%
out.print(test.hello());
%>
</body>
</html>
5、setProperty动作
setProperty动作用于设置Bean的属性值:
<jsp:setProperty name="beanName" property="attributeName" value="attributeValue"/>
- name:需要修改属性的Bean的名称
- property:指定Bean的属性
- value:属性值
setProperty动作经常和useBean动作一起使用,分为两种情况:
-
在<jsp.useBean>标签外使用jsp:setProperty,例如:
<jsp:useBean id="User" .../> ... <jsp:setProperty name="User" property="attributeName" value="attributeValue"/>
这种情况,无论jsp:useBean是否实例化了User对象,jsp:setProperty都会执行
-
在<jsp.useBean>标签里使用
<jsp:useBean id="User"...> ... <jsp:setProperty name="User" property="attributeName" value="attributeValue"/> </jsp:useBean>
这种情况,只有实例化了User对象,jsp:setProperty才会执行
6、getProperty动作
getProperty动作用于获取Bean的属性值。
<jsp:getProperty name="beanName" property="attributeName"/>
七、JSP的九大内置对象
JSP的内置对象指的是Tomcat服务器将JSP页面翻译为Java类之后内部提供的九大对象,这些对象在客户端和服务器端交互的过程中分别完成不同的功能。
- request对象:获取用户请求信息
- response对象:响应客户端请求,并将处理信息返回给客户端
- out对象:输出内容到HTML中
- session对象:用来保存用户信息
- application对象:所有用户共享信息
- config对象:Servlet配置对象,用于Servlet和页面的初始化参数
- pageContext对象:JSP的页面容器,用于访问page、request、application和session的属性
- page对象:表示JSP页面
- exception对象:处理JSP文件执行时发生的错误和异常;只有在JSP页面的page指令中指定isErrorPage的取值true中,才可以在本页面使用exception对象
八、JSP的四大域对象
在JSP九大内置对象中,包含四个域对象:pageContext、reqeust、session和application。
域对象是指可以像Map一样存储数据的对象
相同点是这四个域对象都能通过以下3个方法,对属性进行保存、获取和删除操作。
不同点是它们的作用域不同:
- page只在当前页面有效,跳转页面后就失效
- request只在当前请求范围内有效
- session只在当前会话范围内有效
- application在整个应用范围内有效,服务器重启后失效