JSP的使用

1、jsp的介绍:

JSP全称是Java Server Page,它和Servlet一样,也是sun公司推出的一套开发动态web资源的技术,称为JSP/Servlet规范。JSP的本质其实就是一个Servlet。

2、JSP和HTML以及Servlet的适用场景

类别使用场景
HTML开发静态资源
CSS美化页面
JavaScript给网页添加一些动态效果
Servlet编写Java代码,实现后台功能处理
JSP包含了显示页面技术,也具备Java代码功能

 

3、JSP的执行过程

 

4、JSP的.java文件内容分析

当我们打开index.jsp翻译的java文件看到的就是public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase类的声明,然后我们在Tomcat的源码中找到类的声明,如下图:

 这张图一出场,就表明我们写的JSP它本质就是一个HttpServlet了。

同时,我们在index_jsp.java文件中找到了输出页面的代码,并且在浏览器端查看源文件,看到的内容是一样的。这也就是说明,我们的浏览器上的内容,在通过jsp展示时,本质都是用out.write()输出出来的。

讲到这里,我们应该清楚的认识到,JSP它是一个特殊的Servlet,主要是用于展示动态数据。它展示的方式是用流把数据输出出来,而我们在使用JSP时,涉及HTML的部分,都与HTML的用法一致,这部分称为jsp中的模板元素,在开发过程中,先写好这些模板元素,因为它们决定了页面的外观。

5、JSP语法

1)Java代码块

 在jsp中,可以使用java脚本代码。形式为:<% 此处写java代码 %>

但是,在实际开发中,极少使用此种形式编写java代码。同时需要注意的是:

<%
    在里面写java程序脚本需要注意:这里面的内容由tomcat负责翻译,翻译之后是service方法的成员变量
%> 

示例:

<!--Java代码块-->
<% out.println("这是Java代码块");%>
<hr/> 

 2)JSP表达式

在jsp中,可以使用特定表达式语法,形式为:<%=表达式%> 

jsp在翻译完后是out.print(表达式内容);

所以:<%out.print("当前时间);%>和<%="当前时间"%>是一样的。

在实际开发中,这种表达式语法用的也很少使用。

 示例:

<!--JSP表达式-->
<%="这是JSP表达式"%><br/>
就相当于<br/>
<%out.println("这是没有JSP表达式输出的");%>

3)JSP声明

 在JSP中也可以声明一些变量,方法,静态方法,形式为:<%! 声明的内容 %>

使用JSP声明需要注意:

<%! 
    需要注意的是: 写在里面的内容将会被tomcat翻译成全局的属性或者类方法。
%>      

示例:  

<!--JSP声明-->
<%! String str = "声明语法格式";%>
<%=str%> 

4)JSP注释

 在使用JSP时,它有自己的注释,形式为:<%--注释--%>

需要注意的是:

在Jsp中可以使用html的注释,但是只能注释html元素,不能注释java程序片段和表达式。同时,被html注释部分会参与翻译,并且会在浏览器上显示

jsp的注释不仅可以注释java程序片段,也可以注释html元素,并且被jsp注释的部分不会参与翻译成.java文件,也不会在浏览器上显示。  

示例:  

<%--JSP注释--%>
<!--HTML注释--> 

5)完整示例代码 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>jsp语法</title>
</head>
<body>
    <%--
        1. 这是注释
    --%>

    <%--
        2.java代码块
        System.out.println("Hello JSP"); 普通输出语句,输出在控制台
        out.println("Hello JSP");
            out是JspWriter对象,输出在页面上
    --%>
    <%
        System.out.println("Hello JSP");
        out.println("Hello JSP<br>");
        String str = "hello<br>";
        out.println(str);
    %>

    <%--
        3.jsp表达式
        <%="Hello"%>  相当于 out.println("Hello");
    --%>
    <%="Hello<br>"%>

    <%--
        4.jsp中的声明(变量或方法)
        如果加!  代表的是声明的是成员变量
        如果不加!  代表的是声明的是局部变量
    --%>
    <%! String s = "abc";%>
    <% String s = "def";%>
    <%=s%>
    <%! public void getSum(){}%>
    <%--<% public void getSum2(){}%>--%>
</body>
</html>

6、JSP指令

1)page指令

 language:告知引擎,脚本使用的是java,默认是java,支持java。不写也行。

extends:告知引擎,JSP对应的Servlet的父类是哪个,不需要写,也不需要改。  

 import:告知引擎,导入哪些包(类)。

        注意:引擎会自动导入:java.lang.*,javax.servlet.*,javax.servlet.http.*,javax.servlet.jsp.*

                 导入的形式:

 <%@page import=”java.util.Date,java.util.UUID”%>或者:

<%@page import=”java.util.Date”%>

<%@page import=”java.util.UUID”%> 用Eclipse:Alt+/ 自动导入

session:告知引擎是否产生HttpSession对象,即是否在代码中调用request.getSession()。默认是true。  

buffer:JspWriter用于输出JSP内容到页面上。告知引擎,设定他的缓存大小。默认8kb。  

errorPage:告知引擎,当前页面出现异常后,应该转发到哪个页面上(路径写法:/代表当前应用)  

小贴士:当在errorpage上使用了isErrorPage=true之后,ie8有时候不能正常显示  

配置全局错误页面:web.xml

<error-page>    
    <exception-type>java.lang.Exception</exception-type>                
    <location>/error.jsp</location>
</error-page>
<error-page>
    <error-code>404</error-code>
    <location>/404.html</location>
</error-page>  

当使用了全局错误页面,就无须再写errorPage来实现转到错误页面,而是由服务器负责跳转到错误页面。  

isErrorPage:告知引擎,是否抓住异常。如果该属性为true,页面中就可以使用exception对象,打印异常的详细信息。默认值是false。  

contentType:告知引擎,响应正文的MIME类型。contentType="text/html;charset=UTF-8"

相当于response.setContentType("text/html;charset=UTF-8");

pageEncoding:告知引擎,翻译jsp时(从磁盘上读取jsp文件)所用的码表pageEncoding="UTF-8"相当于告知引擎用UTF-8读取JSP 。

 isELIgnored*:告知引擎,是否忽略EL表达式,默认值是false,不忽略。

 

代码示例 

<%--
    1.page指令
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="/error.jsp" %>

<%--
    2.include指令
--%>
<%@ include file="/include.jsp"%>
<html>
<head>
    <title>jsp指令</title>
</head>
<body>
    <%--<% int result = 1 / 0; %>--%>
    <%=s%>
    <% out.println("aa");
    %>
</body>
</html>

 2)include指令

语法格式:<%@include file="" %>该指令是包含外部页面。  

属性:file,以/开头,就代表当前应用

 

 3)taglib指令

语法格式:<%taglib uri="" prefix=""%> 

作用:该指令用于引入外部标签库。html标签和jsp标签不用引入。  

属性:  

        uri:外部标签的URI地址。

        prefix:使用标签时的前缀。

7、JSP细节

 1)九大隐式对象

 什么是隐式对象呢?它指的是在jsp中,可以不声明就直接使用的对象。它只存在于jsp中,因为java类中的变量必须要先声明再使用。其实jsp中的隐式对象也并非是未声明,只是它是在翻译成.java文件时声明的。所以我们在jsp中可以直接使用。

隐式对象名称类型备注
requestjavax.servlet.http.HttpServletRequest
responsejavax.servlet.http.HttpServletResponse
sessionjavax.servlet.http.HttpSessionPage指令可以控制开关
applicationjavax.servlet.ServletContext
pageJava.lang.Object当前jsp对应的servlet引用实例
configjavax.servlet.ServletConfig
exceptionjava.lang.Throwablepage指令有开关
outjavax.servlet.jsp.JspWriter字符输出流,相当于printwriter
pageContextjavax.servlet.jsp.PageContext很重要

2)PageContext对象
简介

它是JSP独有的对象,Servlet中没有这个对象。本身也是一个域(作用范围)对象,但是它可以操作其他3个域对象中的属性。而且还可以获取其他8个隐式对象。

生命周期

它是一个局部变量,所以它的生命周期随着JSP的创建而诞生,随着JSP的结束而消失。每个JSP页面都有一个独立的PageContext。

常用方法

 

在上图中,我们发现没有页面域操作的方法,其实是定义在了PageContext的父类JspContext中,如下图所示:

 

3)四大域对象

域对象名称范围级别备注
PageContext页面范围最小,只能在当前页面用因范围太小,开发中用的很少
ServletRequest请求范围一次请求或当期请求转发用当请求转发之后,再次转发时请求域丢失
HttpSession会话范围多次请求数据共享时使用多次请求共享数据,但不同的客户端不能共享
ServletContext应用范围最大,整个应用都可以使用尽量少用,如果对数据有修改需要做同步处理

7、JSP最佳实战-MVC模型 

Servlet:擅长处理业务逻辑,不擅长输出显示界面。在web开发中多用于控制程序逻辑(流程)。所以我们称之为:控制器。

JSP:擅长显示界面,不擅长处理程序逻辑。在web开发中多用于展示动态界面。所以我们称之为:视图。

 

M:model ,通常用于封装数据,封装的是数据模型。

V:view ,通常用于展示数据。动态展示用jsp页面,静态数据展示用html。

C:controller ,通常用于处理请求和响应。一般指的是Servlet。

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悠然予夏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值