JSP基础语法

本文介绍了JSP的基础语法,包括JSP的特点、执行过程、生命周期,以及JSP脚本元素、注释、三大指令等内容。此外,还详细讲解了JSP内置对象的功能和使用方法。

JSP基础语法

什么是JSP

Java Server Page:运行在服务器中的Java写的HTML页面。

  • JSP的特点:

    有HTML的优点,看起来是一个页面,方便美化同时又可以在页面中写Java代码,有动态页面的功能。只要Servlet可以实现的功能,JSP都可以实现。

JSP的执行过程

image

  • JSP的生命周期的方法:
生命周期方法作用
实例化构造方法创建一个JSP对象
初始化_jspInit()调用1次,执行_jspInit()
服务_jspService()用来处理每次请求,每次都会调用
销毁_jspDesotry()Web容器关闭的时候执行1次

- 过程:
1. 翻译:将JSP页面翻译成Servlet代码
2. 编译:将Servlet编译成字节码文件
3. 运行的是字节码文件

image

JSP文件中的HTML代码和Java代码在翻译后的Servlet中是如何分别被执行的?

查看工作目录:c:\apache-tomcat-7.0.70\work\Catalina\localhost\day40-jsp\org\apache\jsp\

image

其实JSP就是一个Servlet,继承了HttpServlet

public abstract class HttpJspBase extends
HttpServlet

也就是在Servlet中:
- HTML代码: 原来的HTML代码,使用out.write来输出
- Java代码:直接放在了翻译以后的Servlet中


学习目标:
  1. JSP的脚本元素
  2. JSP的注释
  3. JSP的三大指令
  4. JSP的九个内置对象
  5. JSP的动作标签

1. 总结四个作用域

JSP的脚本元素

JSP页面的七个组成部分:

  • 静态内容

    • 写在JSP上面的HTML 与之前一样
JSP脚本
  • 在JSP页面上写Java代码
 <%
    Java代码;
 %>

1) 语法: <% Java代码; %>
2) 作用:直接在JSP中运行Java代码

JSP表达式
  • 在JSP页面上直接输出变量或表达式
<%
    String str  ="元旦快乐"; 
%>

<%=str%><br/>
<%=3 * 8 %><br/>

1) 语法:<%= 变量名或表达式 %>
2) 作用: 直接在页面上输出变量名或表达式
3) 格式:前面有等于号,后面没有分号。。在Servlet中翻译成了out.print输出

JSP声明
  • 在JSP上声明全局变量或方法(加个感叹号)
<%!
   声明变量或方法
%>
  • 演示:
    1. 在脚本中创建一个字符串,使用表达式输出。
    2. 在声明中也创建一个同名的字符,表达式输出,会不会有问题?
    3. 在声明中创建一个方法,输出一句话。
<!-- JSP脚本 -->
<%
    String str  ="元旦快乐"; 
%>

<!-- 声明部分 -->
<%!
    String str = "新年快乐";

    /**
        声明方法,使用不多,以后我们主要将方法写在业务层
    */
    public String sayHello(String name) {
        return "Hello! " + name;
    }
%>

<%=str%><br/>
<%=this.str%><br/>
<%=sayHello("Rose")%><br/>

4) 结论:
JSP脚本中的变量都是写在_jspService()方法中的局部变量,而声明中的变量是类中的成员变量。
- JSP指令
- 设置JSP页面的属性

<%@指令名 属性名="属性值" %>

- JSP动作
- action,每个动作都有自己的功能,用来代替部分Java代码。也叫内置标签。

<jsp:动作名 属性名="属性值" />

- JSP注释
- 注释的作用
“`
<%– 注释文本 –%>

“`

JSP中的三种注释:

  1. HTML:
    与HTML一样

    <!-- 注释 -->

    • 在浏览器的源代码和生成的Servlet中都存在
  2. Java:与Java中的注释一样

    // 单行注释

    /* 多行注释 */

    • 在浏览器上不存在,在生成的Servlet中存在
  3. JSP:

    <%-- 注释 --%>

    • 在浏览器与生成的Servlet中都不存在

面试题:如果使用HTML注释JSP脚本元素会怎么样?

如:<!-- <% session.setAttribute("key", "value");%> -->

Java代码还是会执行,但执行结果被注释了。HTML的注释,不会影响Java代码的执行。

不让运行要这种注释<%-- Java代码 --%>


JSP的三大指令

  • 作用:设置JSP页面的属性

    • 三大指令分别是:page、taglib、include
    • 指令的格式:<%@指令名 属性名=”属性值” %>
  • taglib指令
    1) 作用:导入标准标签库,在页面上使用外部的标签
    2) 格式:<%@taglib uri=”固定URI地址” prefix=”前缀” %>

  • include指令
    1) 作用:用于在当前的JSP中包含另一个JSP页面
    静态包含:如果A页面包含B页面,相当于把B页面中的源代码复制到A页面中。包含的是B中的代码。

    2) 语法:<%@include file=”被包含的页面地址” %>

  • page指令
    1. 作用:告诉JSP如何翻译成Servlet,设置JSP页面上的各种属性
    2. 位置:可以再现在JSP页面中的任意部分,建议放在页面最开始的位置。
page指令
  • 导包的属性:

    • language=”java” 指定页面使用的语言,默认是Java语言
    • import=”java.util.*” 导入在页面上会使用的包

    1)方式一:
    在一个import属性中一次导入多个包,使用逗号分隔。

    import="java.sql.*,java.util.*"

    2) 方式二:写多个import, 每个import 导入1个包。

    <%@page import="java.util.Date"%>
    <%@page import="java.sql.Timestamp"%>
  • 与编码相关的属性

    • contentType=”text/html; charset=utf-8”

    设置当前JSP使用的MIME类型和字符集,在Servlet中生成

    response.setContentType("text/html; charset=utf-8");
    • pageEncoding=”utf-8”

    设置页面的编码

    1. 功能与contentType相同
    2. 设置JSP文本文件的编码:image
    3. 设置翻译成Servlet的文本文件编码。image
结论: 一般只需要设置pageEncoding属性就可以解决JSP文件汉字乱码的问题
  • 与错误相关的属性
    属性:

    • errorPage=”error.jsp” 指定当前页面出错的时候跳转到的页面,使用的是转发。

    • isErrorPage=”false/true” 指定当前的JSP页面是否是错误页面。与普通页面的区别是:可以使用exception内置对象,普通页面不能使用这个对象的。

错误信息的跳转方式:

1)方式一:使用errorPage=”url” 指定出错跳转到的页面

2)方式二:在web.xml中配置

<!-- 指定错误码和跳转的页面 -->
<error-page>
    <error-code>500</error-code>
    <location>/error.jsp</location>
</error-page>

3)方式三:

<!-- 指定错误类型和跳转的页面 -->
<error-page>
    <exception-type>java.lang.NullPointerException</exception-type>
    <location>/null.jsp</location>
</error-page>

page指令属性小结:

属性名作用
language=”java”指定页面的语言
import=”{package.class | package.*}, …” ]导入包 ,方式一:一条import导入多个包,使用逗号隔开
.方式二:每条import导入1个包
errorPage=”relative_url”指定要跳转的错误页面
isErrorPage=”true|false”当前这个页面是否是错误页面,可以使用exception对象,但是404错误的exception是null,不能使用exception的getmessage方法,会出错
contentType=”mimeType [ ;charset=characterSet ]”指定页面的MIME类型和字符集
isELIgnored=”true | false”页面是否可以使用EL表达式,设置为false表示可用
session=”true|false”当前页面是否可以使用session对象,false表示不可使用
buffer=”none|8k”指定JSP页面的缓存,默认是8k
pageEncoding=”characterSet”1)与contentType的功能相同
.2)指定JSP的文件编码
.3)指定Servlet的文件编码

动作标签

  • jsp的标准动作 action

1) 作用:用于动态包含一个网页

2) 语法:

include动作与include指令的区别

.include指令include动作
语法格式<%@include file=”url” %>
包含的方式静态包含,包含的是页面的内容。先将被包含的页面所有的内容复制到当前的页面来,再编译执行。包含代码动态包含,包含是页面的运行结果。先执行被包含的页面,得到结果,再包含进来。包含结果
生成Servlet个数只生成1个Servlet生成2个Servlet
  • 进行页面的转发,功能与request.getRequestDispatcher(“/url”).forward(request,response)相同
  • 语法:
<jsp:forward page=”地址”/>
  • 用于给forward和include**提供参数**
<!-- 转发还可以传递参数 -->
<jsp:forward page="/05-forward.jsp">
    <jsp:param value="rose" name="aaa"/>
    <jsp:param value="jack" name="bbb"/>
</jsp:forward>
  • 转发到的页面:
<body>
    得到请求的参数:
    <%=request.getParameter("aaa") %><br/>
    <%=request.getParameter("bbb") %><br/>
</body>

JSP的9个内置对象

概念:

在JSP页面上,有9个在Servlet中比较常用的对象,我们可以直接在页面上使用,而不用实例化。称为内置对象。

  • 查看生成的Servlet源码:

所有的内置对象都是在_jspService()方法中进行实例化的。

javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
java.lang.Throwable exception = null;
javax.servlet.ServletContext application;
javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
java.lang.Object page = this;

九个内置对象

对象名对应的类型功能描述
requestHttpServletRequest代表一个请求的对象
responseHttpServletResponse代表响应对象
outJspWriter有缓存的字符输出流
sessionHttpSession会话对象
applicationServletContext上下文对象
configServletConfig得到配置信息
exceptionThrowable异常对象
pagethisServlet实例化的对象
pageContextPageContext页面上下文对象,访问页面中的一些信息
PageContext对象的作用

概述:
1) 作用域对象:页面作用域,可以向页面域中添加和获取数据
2) 通过pageContextget方法得到其它8个内置对象,得它得天下。

输出请求对象:<%=request%><br/>
输出请求对象:<%=pageContext.getRequest()%><br/>
输出上下文对象:<%=pageContext.getServletContext()%><br/>
输出上下文对象:<%=application%><br/>

image


```
---

“`

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值