JSP入门总结

JSP入门总结

一、介绍

  1. JSP 是 Java Server Pages 的缩写,是一种动态网页开发技术
  2. JSP 是第二代Java Web开发技术,是Servlet的升级版
  3. JSP 的主要作用是代替Servlet程序回传HTML页面的数据

二、生命周期

JSP生命周期包括以下4个阶段:

  1. 编译
  2. 初始化(容器调用jspInit()方法)
  3. 执行(容器调用 _jspService()方法)
  4. 销毁(容器调用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注释
  1. 单行注释//
  2. 多行注释 /**/
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指定需要引入文件的相对路径。

优点:

  1. 增加代码复用性
  2. 使JSP页面的代码结构清晰易懂
  3. 维护简单

实例:在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动作一起使用,分为两种情况:

  1. 在<jsp.useBean>标签外使用jsp:setProperty,例如:

    <jsp:useBean id="User" .../>
    ...
    <jsp:setProperty name="User" property="attributeName" value="attributeValue"/>
    

    这种情况,无论jsp:useBean是否实例化了User对象,jsp:setProperty都会执行

  2. 在<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在整个应用范围内有效,服务器重启后失效
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值