博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSP简介
阅读量:4102 次
发布时间:2019-05-25

本文共 3532 字,大约阅读时间需要 11 分钟。

 JSP简介

JSP全称是Java Server Pages, 它和Servlet技术一样,都是SUN公司定义的一种用于开发动态WEB页面的技术

 为什么JSP也是一种动态WEB资源的开发技术呢?

写JSP虽然就像是在写html,但JSP技术允许在页面中编写java代码,并且允许开发人员在页面中获取request、response等WEB开发常用对象,实现与浏览器的交互,所以JSP也是一种动态WEB资源的开发技术。

JSP页面的基本结构

JSP页面的组成:
1.HTML标记
2.JSP标记(分为指令标记、动作标记)
3.成员变量与成员方法<%!%>
4.Java程序片<%%>
5.Java表达式<%=%>
6.注释
JSP页面举例
<%@ page contentType="text/html;Charset=GB2312" %>  	
<%@ page import="java.util.Date" %>
<%! Date date = null; // 变量声明 int sum = 0; public int add(int m, int n) // 方法声明 { return m + n; } %>

程序片创建Date对象:

<% date=new Date(); //java程序片 out.println(date); sum=add(12,34); %>

在下一行输出和:
<%= sum+100 %>

例:在jsp页面中输出当前时

JSP调用和运行原理

 IE浏览器访问jsp页面时,web服务器是如何调用并执行一个JSP页面的?
无论访问html或者jsp都是在访问servlet
当我们访问index.jsp时,服务器会将index.jsp翻译成一个servlet
我们进入服务器查看(
找到项目存储路径
)
D:\lessons\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\
work\Catalina\localhost\jd(我们的项目名称)\org\apache\jsp
我们打开index_jsp.java查看
我们发现它继承的是org.apache.jasper.runtime.HttpJspBase
我们继续查看 org.apache.jasper.runtime.HttpJspBase
我们便发现HttpJspBase继承自HttpServlet
那么现在我们可以确认当浏览器访问jsp时,服务器会将它翻译成servlet,然后再访问这个servlet

WEB服务器在执行JSP页面时,是如何把JSP页面中的html排版标签输出给浏览器的?

我们可以通过index_jsp.java中的service方法查看到
我们可以通过index_jsp.java中的service方法查看到
浏览器显示的jsp页面时通过index_jsp.java中的service方法输出的

JSP页面中的java代码服务器是如何执行的?

通过index_jsp.java中的service方法我们发现   jsp页面中的java代码原封不动的写人了service方法中

WEB服务器在调用JSP时,会给JSP提供一些什么java对象?

 通过index_jsp.java中的service方法我们发现  下面的便是为JSP准备的java对象 
 这些对象我们可以在jsp中直接使用 

通过下面的图我们不难发现 

page  (页面对象) 当前页面有效时间最短
通过下面的图我们不难发现它便是this,jsp页面本身。
request  (请求对象) HTTP请求开始到结束这段时间 
获取客户端传递到服务器的信息
session  
(
会话对象
) HTTP会话开始到结束这段时间
会话失效时间,tomcat中默认是30分钟,可以设置,每个用户的会话空间是隔离的
application  (应用程序对象) 服务器启动到停止这段时间(它就是一个ServletContext)
上面这四个对象又被称为JSP的四大作用域
response  (响应对象)  向客户端浏览器输出信息,对客户的请求做成响应
pageContext  (页面上下文对象)  可以通过它获取其他八个内置对象(例:pageContext.getRequest())
config(配置对象) 主要作用是取得服务器的配置信息
out  
(
输出对象
)  向客户端输出信息
exception  (例外对象在可能产生错误的文件中用page指令设置isErrorPage="true",才能在翻译的servlet中发现这个对象。
例:<%@page errorPage="error.jsp"%>
这九个对象被统称为JSP的九大内置对象
不管是JSP还是Servlet,虽然都可以用于开发动态web资源。但由于这2门技术各自的特点,
在长期的软件实践中,人们逐渐把servlet作为web应用中控制组件来使用,而JSP技术作为数据显示模板来使用。
其原因为,程序的数据通常要美化后再输出:
让jsp即用java代码产生动态数据,又做了美化会导致页面难以维护。
让servlet既产生数据,又在里面嵌套html代码美化数据,同样也会导致程序可读性差,难以维护。
因此最好的办法就是根据这两门技术的特点,让它们各自负责各的,servlet只负责响应请求产生数据,
并把数据通过转发技术带给jsp,数据的显示jsp来做
字节码文件的功能
将HTML标记交给客户的浏览器显示。
将JSP标记、变量和方法声明、Java程序片由tomcat服务器执行
JAVA表达式由Tomcat计算,然后将结果转化为字符串,交给客户浏览器显示。
JSP的成员变量与成员方法
在标记符<%!%>内声明成员变量与成员方法。
成员变量在整个JSP页面内有效
当多个客户请求用一个JSP页面时,Tomcat为每个客户启动一个线程,这些线程共享成员变量,因此每一个线程对成员变量的改动都会影响其他线程。
synchronized关键字
为了防止多个用户同时操作一个成员变量,可以对操作该变量的方法加锁
加锁的方法是用synchronized关键字修饰该方法,当一个线程执行该方法时,其他线程只能等待
例4:synchronized方法举例
<%@ page contentType="text/html;Charset=GB2312" %>    <%! long count = 0;                //被客户共享的count        	synchronized void setCount()  //synchronized修饰的方法       	 {   count++;       	 }    %>    <%  	setCount();        	 out.println("您是第"+count+"个访问本站的客户");       %>
java程序片
在<%%>之间写java程序片
一个JSP页面可以有多个JAVA程序片,这个些程序片被JSP引擎顺序执行。
语法格式如下
<%java程序片%>
页面局部变量
在程序片中声明的变量称之为页面局部变量。
页面局部变量在该页面中后续的所有程序片及表达式部分有效
当多个客户请求一个JSP页面时,一个客户的局部变量和另一个客户的局部变量会被分配不同的内存空间
因此,一个客户对页面局部变量的操作结果不影响其他客户的这个局部变量。
页面局部变量与成员变量的比较
变量的共享性:
成员变量:各个用户共享变量;
页面局部变量:用户间没有联系。
变量的初始化:
页面被激活后,成员变量只被初始化一次;
页面被激活后,每次有用户调用,页面局部变量都被初始化。
JSP中的Java表达式
用于在页面上输出信息,语法格式如下:
<%=表达式%>
表达式的值由服务器计算,并将计算结果以字符串的形式发送到客户端显示。
JSP中的注释
JSP中的注释有两种
1.HTML注释:
<!-- 注释内容-->
这种注释发送到客户端,不直接显示;
但在源代码中可以看到
2.JSP注释
<%-- 注释内容--%>
这种注释发送到客户端,不直接显示;
而且在源代码中也查看不到。
你可能感兴趣的文章
数据库系统思维导图
查看>>
SpringMVC(五):EditorMD编辑器开发与文件上传
查看>>
Java 基础 | Int 和 Integer
查看>>
Android 使用 Socket 连接阿里云服务器
查看>>
JSP与Servlet(四):java实现文件上传下载
查看>>
安全框架shiro(二):shiro进阶
查看>>
Linux(三):Linux文件互传。
查看>>
Linux(二):阿里云CentOS7部署SpringBoot项目
查看>>
JPA(一):十分钟入门 JPA
查看>>
JPA(二):JPA 实体映射关系
查看>>
SpringBoot 2.0 | Log4j2 日志写入数据库
查看>>
Docker $ 第一篇 :Docker 入门
查看>>
斯蒂夫·乔布斯《你必须要找到你所爱的东西》
查看>>
Docker $ 第二篇:Docker 镜像的使用
查看>>
Docker $ 第三篇 :Docker 容器的使用
查看>>
Docker $ 第五篇 :Docker 数据管理
查看>>
Docker $ 第六篇 :Docker 网络功能
查看>>
Docker $ Docker 三剑客:Docker-Compose
查看>>
Docker $ 项目部署 :Docker 部署 SpringBoot + Mysql
查看>>
Docker $ 项目部署 :Docker 部署微服务 + Mysql
查看>>