JSP的基本指令及九大内置对象和语法

一、概念:何为JSP✧

JSPJava Server Pages脚本表达式

JSP部署于服务器上 可以响应客户端发送的请求根据请求内容动态地生成HTML XML或其他格式文档的Web网页然后返回给请求者

JSP技术以Java语言作为脚本语言来为用户的HTTP请求提供服务 并能与服务器上的其它Java程序共同处理复杂的业务需求

二、指令✧

用于配置JSP页面和导入资源文件
格式:<%@ 指令名称 属性名1=属性值1 属性名2=属性值2%>
通常加在页面的头部

指令名称的类型:

1、page

用途:配置JSP页面的属性

常用属性:

✧、contentType

等同于response.setContentType()
用途:

  • 设置响应体的mime类型以及字符集类型
  • 设置当前jsp页面的字符集编码
    (由于本质是高级IDE读取contentType属性并且自动设置
    因此只有高级IDE例如IDEA Eclipse才能做到
    低级开发工具例如记事本做不到)

IDE:集成开发工具
若为低级开发工具 则需设置pageEncoding属性来设置当前页面的字符集编码

✧、language

用途:设置当前页面使用的语言(只支持java)
未来可能会支持更多语言

✧、buffer

用途:设置当前页面的缓冲区大小
默认为8kb

✧、import

用途“当页面中需要用到java包时 导入外部包

例:

<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
✧、isErrorPage和errorPage

当用户访问页面时 若看到的是错误页面 则用户体验会很不友好
用途:
errorPage当前页面发生异常后 会自动跳转到指定的错误页面
例:

errorPage="500.jsp"

如此配置之后 当页面发生错误 不显示错误页面 而是跳转到500.jsp页面

isErrorPage标识当前页面是否为错误页面
默认为false 若改为true 则在页面内可使用内置对象exception
exception里的getMessage()方法可获取错误信息 以打印到日志中

例:

throw new RuntimeException("我发生错误啦!这里的文字会被以exception.getMessage()的方式获得");
✧、isELIgnored

用途:是否允许EL表达式不被解析

默认:false 即被解析
若不被解析 则页面中的EL表达式会被原原本本地展示出来

✧、session

用途:设置是否允许创建session
属性值:true和false
默认为true


2、include

用途:通过导入页面的资源文件来配置页面包含信息
有些页面的部分是一样的 例如网站顶部栏或底部 则无需重复编写 用包含即可

注:此处为静态包含
即为把包含的页面的所有元素标签都拿来输出

常用属性:

file

用途:填入要引用的页面文件的路径

例:
<%@ include file="top.jsp"%>这么一条语句就相当于整个top.jsp页面里的内容

top.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h1>我是logo我是标题我是标题我是标题我是标题</h1>

home.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ include file="top.jsp"%>
<html>
<head>
    <title>主页</title>
</head>
<body>
    我是内容我是内容
</body>
</html>

则显示效果为:

<h1>我是logo我是标题我是标题我是标题我是标题</h1>
<title>主页</title>
<body>
    我是内容我是内容
</body>

3、taglib

用途:导入资源
通常用于导入标签库
使用前需先导入jar包:javax.servlet.jsp.jstl.jar和jstl-impl.jar

常用属性

prefix

用途:自定义标签的前缀
不过约定俗成最好用"c"来定义前缀

uri

用途:指定标签库的具体位置


三、注释✧

JSP页面支持两种注释方式:分别是html注释和jsp注释

1、html注释

<!-- 内容 -->

该注释方式只能注释html代码片段
无法注释脚本代码内容

注释后 数据会被发送到响应体内 只不过响应体内的代码是被注释过的

2、jsp注释(推荐)

<%-- 内容 --%>

可注释所有代码
使用jsp注释html代码 数据不会被发送到响应体内


四、内置对象✧

内置对象 就是在jsp页面中无须创建 直接可使用的对象

JSP九大内置对象

其中 有四个属于作用域对象:pageContext 和 request 和 session 和 application
它们的用途是共享数据
让我们挨个来看一看:

1、第一个内置对象:pageContext

真实类型:PageContext

作用域:仅限于当前页面共享数据
数据在当前页面存入 在当前页面获取
只要跳转到其它页面 那么这个域中存的值就没有了

PageContext类的实例一般用于存取值以及获取其它八个内置对象

存取值:
setAttribute()getAttribute()
它能获取其它八个内置对象:

pageContext.getRequest()
pageContext.getSession()
pageContext.getServletContext()
pageContext.getResponse()
pageContext.getPage()
pageContext.getOut()
pageContext.getException()
2、第二个内置对象:request

真实类型:HttpServletRequest

作用域:仅限于一次请求访问的多个资源
通过请求转发进行服务器内部跳转
只要服务器对该请求作出响应 那么这个域中存的值就没有了

HttpServletRequest类的实例一般用于存取值以及跳转

存取值:
setAttribute()getAttribute()
跳转:

request.getRequestDispatcher("").forward(request,response)
3、第三个内置对象:session

真实类型:HttpSession

作用域:仅限于一次会话的多个请求与响应
只要关闭浏览器 那么这个域中存的值就没有了

HttpSession类的实例一般用于存取值

存取值:
setAttribute()getAttribute()
有个"开关"来控制是否可使用该内置对象:page指令的session属性(true/false)

4、第四个内置对象:application

真实类型:ServletContext

作用域:整个工程都可以访问 所有用户间共享数据
服务器开启 该类被创建 服务器关闭 该类被销毁
只要关闭服务器 那么这个域中存的值就没有了
ServletContext类的实例一般用于存取值

存取值:
setAttribute()getAttribute()


5、第五个内置对象:response

真实类型:HttpServletResponse
HttpServletResponse类的实例一般用于执行跳转 当然也可以执行页面内容输出

跳转:

response.sendRedirect("");
6、第六个内置对象:page

真实类型:Object
即这个jsp翻译成的java类的实例
表示当前页面的对象 相当于this
也相当于当前页面的Servlet

7、第七个内置对象:out

真实类型:JspWriter输出流对象
JspWriter类的实例 可将数据输出到页面上

输出顺序:
先把out对象输出的内容放置到response的缓冲区去
先输出response本身要输出的内容 然后才是out里面的内容

8、第八个内置对象:config

真实类型:ServletConfig
ServletConfig类的实例
Servlet的配置对象

用途是获取Servlet配置的一些参数

9、第九个内置对象:exception

只有页面声明了isErrorPage="true"才有此对象
真实类型:throwable异常对象
Throwable类的实例
异常对象

可以在错误的页面上 输出该错误的信息


五、语法✧

1、<%= %>

用于输出一种表达式 把结果输出到页面上

2、<% %>

Java代码片段 用于定义0-n条语句 只是一般的语句

例:

<%
    int a=10;
这里定义局部变量
    System.out.println(a);

    out.print(a);
这里输出的是局部变量(10)

    out.print(this.a);
这里输出的是成员变量(100)
%>

3、<%! %>

用于创建类的全局变量和成员方法
该语法用的较少

<%!
    int a=100;
这里定义全局变量

    public static void aaa()
    {

    }
这里定义方法
%>

特点是两个Java代码片段可自动连接:

<table border="1" align="center" width="40%">
    <tr>
        <td>姓名</td>
        <td>年龄</td>
    </tr>

    <%
        for (int i=0;i<10;i++) //这里定义Java遍历语句
        { //前半部分括号
    %>

    <tr>
        <td>张三</td>//被循环10次的部分
        <td>18</td>
    </tr>

    <%
        } //后半部分括号
    %>

</table>

在这里插入图片描述


发布了174 篇原创文章 · 获赞 5 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/Piconjo/article/details/104915754
今日推荐