3. JSP指令 | JSP 啊 哦 嗯 嘻嘻
2022-05-31 17:09:59

JSP指令

JSP指令

JSP 指令的作用是为当前页面做一些基本的属性设置,为当前的页面的运行提供基本的环境。
在JSP中包含三类指令:

  • page,页面指令        页面     [peɪdʒ]
  • include,包含指令
  • taglib,标签库指令(此页不讲先 详看后面【  ___  页】)

这些指令的使用的语法格式均为如下形式:

<%@ 指令名称  属性名=属性值 ... %>

一 一 介 绍:

page指令:

page指令用于设置当前JSP页面的相关信息, 一个 JSP中可以包含多个 page 指令,有以下几个常用的属性:【page 属性 有很多很多 但具体用的到的自己去百度 这里讲最基本的】:

 

记住啊 是当前页面有效!!!

pageEncoding 属性

pageEncoding属性用于设置当前JSP页面的字符编码格式。

例如:

<%@ page pageEncoding="UTF-8" %>

该属性被翻译到java源码里面的_jspService()方法中的 response.setContentType(“text/html;charset=UTF-8”)  你可以自己去查看一下!

如果你每次创建一个JSP文件都要改编码的话, 你嫌麻烦 你可以在Eclipse 把它设置为 默认是UTF-8的编码:

在eclipse中新建JSP时默认的使用ISO8859-1的编码,此时可以通过下列步骤修改创建JSP文件的默认编码:
windows–>preference–>Web–>JSP files,将encoding修改为utf-8即可。

 

contentType 属性
contentType属性用于设置当前 JSP 页面在浏览器中的内容类型,通常为”text/html”,若在 JSP 页面中设置如下:

<%@ page contentType="text/html;charset=utf-8" %>
作用是服务器向客户端发送数据的时候指定的文件格式是text/html,字符编码是utf-8。

 

你新建文件他默认头部会自动创建好 pageEncoding 和 contentType 属性 ,而且指定好了编码,默认编码上面已经给出教程修改~~

 

import 属性
该属性主要用于在JSP中导入java包

<%@ page import="java.util.*" %>

在Java源码中被翻译为:    import java.util.*;

你也可以一条指令导入很多类包,用逗号隔开即可例如:

<%@ page import="java.util.*,java.sql.SQLData" %>

记得逗号分隔开即可

 

errorPage 属性
该属性主要用于指定当前页面运行过程中发生异常时所要跳转到的页面。

<%@ page errorPage="/error.jsp" %>

我们测试一下 新建两个jsp 其中一个故意抛出异常 他就会调到异常(error.jsp里面了!!)

该属性会被翻译到 Servlet 的_jspService()方法中。

但是:要配合这个属性一起用:

isErrorPage 属性
如果一个页面中指定了发生异常后所要跳转的页面,这时将会出现一个问题:异常信息被隐藏。在控制台看不到异常信息,在所跳转的页面中也看不到异常信息,这样不利于开发者定位错误的原因。此时可以在发生异常后所要跳转的页面中将isErrorPage属性设置为true,将其声明为错误处理页面:

什么意思呢 就是说 你异常了 跳到了 error.jsp 页面 然后你要打印异常栈 就需要exception对象变量,默认情况下exception对象变量是不存在的

在编译后的java中也找不到,所以你要打印异常栈的话 你就必须得在那个页面弄个指令 然后将isErrorPage设置为true,才能召唤出 exception 对象 ! 因为默认是false的!!!

注意:一个页面别出现两个errorPage属性 不然不报错报si你!

即配合起来两个jsp源码就是:

index.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
    <%-- 让其出现异常时 我们跳到 error 的页面!! --%>
    <%@ page errorPage="/error.jsp" %>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

        <%-- 现在故意让其出现允许时异常:  记住啊 只有允许时异常我才能 其他异常被检测到了你就直接报错的!!!--%>
        <% 
            System.out.print(8/0);
        %>
</body>
</html>

error.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>

    <%-- 1.我们显示给用户说: 我们出现了异常 请联系管理员 BIHU: --%>
    <p style = "margin:10px  auto ;font-size: 30px">异常 500 ! 请联系管理员 BIHU!</p>
    
    <%-- 2.如果我们想要打印异常栈来获取到底是哪里错了  我们就需要配置那个 isErrorPage 为真!!! 不然没有exception对象变量  --%>
    <%@ page isErrorPage="true" %>
    
    <%    
    //    3.在控制台中打印 异常信息:
    exception.printStackTrace();
    
    %>
</body>
</html>

 

这里强调2点!!! 千万千万要是允许时异常才能啊,你语法错了那种 直接报错的啊!

还有就是 一定要是isErrorPage属性设置为true!!!!不然没那个对象变量的!

一个页面中的isErrorPage属性被设置为true之后,在_jspService()方法中,多出了一个变量 exception。这就是内置对象exception,可以通过该对象在控制台打印异常信息。

 

 

session 属性
session属性用于指定当前页面中是否可以直接使用内置对象session,默认为 true。    //意思就是说 如果你先禁用session的话! 那么你才来设置此属性为false即可!!

 

 


include指令

包含指令, 似曾相识啊! C语言的包含头文件的关键字 啊哈哈!

用于将某个文件包含到当前的 JSP 文件中。该指令只有一个属性 file,用于指定要包含的文件。
被包含的文件可以是 JSP 文件,也可以是 HTML文件。

这里要注意include的格式啊: 他没有等于号 直接 空格 file的啊 :

include 包含文件 格式:

 

<%@  include file="/xxxx.jsp" %> 

这里定义一个名为 jsp2.jsp 的文件,其中定义了一个变量 sum  =  10 :

<%@ 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 sum = 10; %>
</body>
</html>

然后我们在index.jsp 包含 jsp2.jsp,看会怎么样:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
  <%-- 这里包含jsp2.jsp 文件   记住include是指令!!!! 不用page!!!!  page 也是一个指令!!!!!    --%>
  <%@  include file="/jsp2.jsp" %> 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<%-- 因为这里导入了jsp2 所以呢 我们要在这访问jsp2定义的sum  值是 10 --%>
        <% out.print(sum); %>
</body>
</html>

上面可知我们成功访问到了 jsp2中定义的 sum !!! 但是注意!include  他是一个指令 不是属性 别加page!!初学者总是那么内个 对吧~~

 静态引入变量名 别 重名!!!! 动态就可以! 后面说为什么

找到生成java文件的目录,里面只生成了一个 index.java 的文件,并没有生成jsp2.java 文件。那是因为 JSP 翻译引擎在翻译时,会将 include 指令所指定的文件内容直接翻译到当前 JSP 的java源码中,形成一个.java 文件 ( 合并 ) 。这个包含操作是在编译之前由 JSP 翻译引擎完成的,不是在程序运行期完成的。这种包含通常被称为静态包含,与之相对的还有动态包含(后面会讲到)。
由于在编译期就将这些文件合并为了一个 java文件,所以,整个过程就一个_jspService()方法。也就是说,这些文件之间是可以相互访问局部变量的,只要满足变量声明与使用的先后顺序即可 (即包含文件和使用变量的顺序 因为他合体为一个java文件 所以先后会排好的.... 不然异常)。

为什么使用 include 指令
在一个web系统中,往往很多页面的头部、底部等内容是相同的,为了减少重复性的工作和便于修改,可以将这些内容相同的内容单独定义为一个jsp文件,在需要的时候直接使用include指令将其引入进来即可,这样不仅大大减少了工作量,还做到了对于页面修改的”一改全改”效果。

 

 


作者:​​咸瑜​​​

本文摘自 :https://blog.51cto.com/u


更多科技新闻 ......