JSP简介及基本用法

JSP简介

  • JSP全称是Java Server Pages,它和Servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术
  • JSP这门技术的最大的特点在于,写JSP就像写html,但:
    • 相比html而言,(html只能为用户提供静态数据)JSP技术允许在页面中嵌套java代码,为用户提供动态数据。
    • 相比servlet而言,jsp更容易对数据进行排版
  • Servlet和jsp都是动态网页技术
    • Servlet:代码+网页 servlet更多的是实现java部分功能
    • Jsp: 代码+网页 jsp更多的是负责页面展示

Jsp本质上就是servlet,Jsp源文件的后缀名是.jsp


Jsp基础语法

Jsp基础语法:

  • 1.脚本元素
  • 2.指令元素
  • 3.动作元素

1. 脚本元素

Jsp的脚本元素包括: 1.声明脚本    2.普通脚本    3.表达式脚本

声明脚本:声明成员变量和成员方法在声明脚本中进行定义
语法: <%! %>

<%!
   int c;
   public int sum(int a,int b){
	   return a+b;
   }
%>

等价于Servlet中:

public class servletDemo1 extends HttpServlet {
   private static final long serialVersionUID = 1L;
     //成员变量
      int c;
      public int sum(int a,int b) {
   	return a+b;
   }
 ...
 }

普通脚本 (不可定义方法)
声明局部变量和方法调用
语法: <% %>

<%
 int m=100;
 int result=sum(8,8);
 //out是JSP的内置对象之一
 out.print("result:"+result+"<br/>");
%>

等价于Servlet中:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   	int m=100;
   	int result=sum(8, 8 );
   	response.getWriter().print(result+"<br/>");
   }

表达式脚本
用来计算和显示表达式的结果
语法:<%=表达式 %>

<%--表达式脚本:用来计算和表达式结果的显示 --%>
c=<%=c%>
result=<%=sum(8,9) %>

2.指令元素

  • JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分
  • Jsp页面所有的指令元素都是以<%@ 开头 %>结束

JSP指令的基本语法格式:
<%@指令 属性名="值" %>

常见的指令元素包括:

  • 1.page指令
  • 2.include指令
  • 3.taglib指令

1.page指令

作用:用来设置当前JSP页面的相关属性和配置信息
语法:<%@page 属性名=“属性值”%>
例:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" import="java.util.List" errorPage="error.jsp"%>

  • language:当前jsp文件用何种语言进行解析,赋值java说明当前jsp由java语言来负责解析。
  • contentType:设置jsp页面的上下文类型,主要是设置响应文件类型和字符集。
  • import:在当前页面引入其他类
  • errorPage:设置当前页面出现异常后,处理异常的页面
  • isErrorPage:当前页面是否是处理异常或者错误的页面,取值true和false ,true表示当前页面是负责处理异常的页面 false表示当前页面不是处理异常的页面。默认值是false
    当isError为true时我们可以使用exception来获取异常消息。当isErrorPage是false时,页面不能使用exception

例:当访问页面出现问题时
问题页面:

<%@ page language="java" contentType="text/html; charset=utf-8"
   pageEncoding="utf-8" errorPage="error.jsp"%>
   ......
<%
 int m=100;
 int num=10/0;
 int result=sum(8,8);
 //out是JSP的内置对象之一
 out.print("result:"+result+"<br/>");
%>
......

异常处理页面:

<%@ page language="java" contentType="text/html; charset=utf-8"
   pageEncoding="utf-8" isErrorPage="true"%>
   ......
   <body>
<%=exception.getMessage()%>
页面异常!
</body>
......

页面显示:
/ by zero 页面异常!

2.include指令
作用:在当前页面包含另一个页面
语法:<%@include file=“地址” %>

@include包含也叫静态包含,在一个页面将另外一个页面的代码完整的包含进来。静态包含在编译后产生1个class文件

原理: include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入

其实就是相当于把两个JSP中的内容翻译到一个servlet中从生成的jspServlet文件中可以看出其实相当于把所有的信息原封不动的拿了过来。这就有可能导致当定义两个相同名称的变量是会出现错误

3.taglib指令
语法:<%@ taglib uri=" " prefix=" "%>
uri:表示标签库的地址
prefix:表示标签的前缀

  • 使用标签库之前要先添加标签库的jar包

    • jstl.jar
    • standard.jar
  • 在页面使用taglib指令引入标签库

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"  prefix="fmt"%>
......
 <fmt:formatDate value="<%=new Date()%>" pattern="yyyy-MM-dd HH:mm:ss"/><br/>

3.动作元素
Jsp动作元素:1.动态包含 2.请求转发

  1. 动态包含
    作用:在当前页面将另一个页面也包含进来(只包含结果)
    语法:<jsp:include page="地址"></jsp:include>

动态包含编译后会产生多个class文件
静态包含和动态包含区别?

  • 静态包含源代码 编译后产生1个class文件
  • 动态包含包含结果 编译后产生多个class文件
    ```<jsp:include page=“a.jsp”/>``

注意: 前面已经介绍过include指令,它是在JSP文件被转换成Servlet的时候引入文件,而这里的jsp:include动作不同,插入文件的时间是在页面被请求的时候

  1. 请求转发
    jsp:forward动作把请求转到另外的页面
    语法:<jsp:forward page="相对 URL 地址" />

例:以下实例我们使用了两个文件,分别是: date.jsp 和 main.jsp
date.jsp 文件代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"

   pageEncoding="UTF-8"%><p>

  今天的日期是: <%= (new java.util.Date()).toLocaleString()%></p>

main.jsp文件代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鸟教程(runoob.com)</title></head><body>

<h2>forward 动作实例</h2><jsp:forward page="date.jsp" /></body></html>

现在将以上两个文件放在服务器的根目录下,访问main.jsp文件。显示结果如下:

今天的日期是: 2016-6-25 14:37:25

Jsp页面的几种注释
Jsp页面注释:1.java注释 2.html注释 3.jsp注释

  1. java注释 :单行注释 、多行注释、文档注释
  2. Html注释:
  3. Jsp注释: <%-- --%>
    Html和jsp注释区别?
    Html注释的内容会被编译、jsp注释的内容不会被编译

JSP执行过程
.jsp—> 翻译—.java---->编译----->class---->执行class文件

  • a)浏览器访问JSP页面,tomcat扫描到JSP文件,在%tomcat%/work把jsp文件翻译成java源文件(翻译)

  • b)Tomcat服务器把java源文件编译成class字节码文件(编译)

  • c)Tomcat服务器构造该jsp对象

  • d)Tomcat服务器调用该jsp类中的方法,返回内容显示到浏览器
    注意:
    只在第一次访问时需要 a,b ,c,d四步骤
    第二次到n次只需要执行 d步骤。当jsp文件修改或零时文件被删除了需要重新走翻译(a)和编译(b)的过程。
    在这里插入图片描述


JSP的生命周期(重点)

Servlet的生命周期:
 1)构造方法(第1次访问)
  2)init方法(第1次访问)
  3)service方法
 4)destroy方法
Jsp的生命周期
  1)翻译: jsp->java文件
 2)编译: java文件->class文件(servlet程序)
  3)构造方法(第1次访问)
  4)init方法(第1次访问):_jspInit()
  5)service方法:_jspService()
 6)destroy方法:_jspDestroy()


Jsp的9大内置对象(记住)
request 表示请求对象 作用域对象
response 表示响应对象
pageContext 表示当前页面的上下文,作用域对象之一,通过pageContext可以获取其他内置对象
注意 pageContext对象的类型是PageContext,叫jsp的上下文对象
session 表示会话对象
application 表示WEB应用,作用域对象
out 表示输出流对象
config 表示jsp页面配置对象
exception 表示异常对象
page 表示当前页面,相当于java中的this的关键字

详细:https://blog.csdn.net/qq_26676207/article/details/53484515

发布了56 篇原创文章 · 获赞 6 · 访问量 7769

猜你喜欢

转载自blog.csdn.net/ly823260355/article/details/88929952