2.1 JSP基础

2.1.1 JSP简介

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

JSP部署在服务器上,可以处理客户端发送的请求,并根据请求内容动态生成 Html,Xml或其它格式文档的Web网页,然后在响应给客户端。

2.1.2 JSP和HTML以及Servlet的适用场景

类别 适用场景
css 美化页面
javaScript  给网页添加一些动态效果
HTML

只能开发静态资源,不能包含java代码,无法添加动态数据。

Servlet 写java代码,可以输出页面内容,但是很不方便,开发效率极低。
JSP 它包括了HTML的展示技术,同时具备Servlet输出动态资源的能力。但是不适合作为控制器来用。

2.1.3 JSP简单入门

创建JavaWeb工程

1.创建一个web项目

2.在web目录下创建一个index.jsp文件

3.在文件中写一句内容为:这是我的第一个jsp

4.部署并启动项目

5.通过浏览器测试

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JSP的入门</title>
</head>
<body>
这是第一个JSP页面
</body>
</html>

部署项目

沿用会话管理工程的部署方式即可。

测试运行

JSP的执行过程

JSP文件内容介绍

Tomcat中的HttpJspBase类声明

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

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

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

2.2 JSP应用

2.2.1 JSP语法

4)JSP注释

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

需要注意的是:

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

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

示例:

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

  

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%>

5)语法的示例

JSP语法完整示例代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JSP语法</title>
</head>
<body> <!--Java代码块-->
<% out.println("这是Java代码块");%>
<hr/> <!--JSP表达式-->
<%="这是JSP表达式"%><br/>
就相当于<br/>
<%out.println("这是没有JSP表达式输出的");%> <hr/>
<!--JSP声明-->
<%! String str = "声明语法格式";%>
<%=str%> <hr/> <%--JSP注释--%>
<!--HTML注释--> </body>
</html>

JSP指令

 page指令

  <%@ page 属性名=属性值 属性名=属性值...%>

属性名 作用
contentType           响应正文支持的类型和设置编码格式                                
language 使用的语言,默认是java
errorPage   当前页面出现异常后跳转的页面
isErrorPage 是否抓住异常,如果为true则页面中就可以使用异常对象,默认是false
import 导包import="java.util.ArrayList"
session 是否创建HttpSession对象,默认是true
buffer 设定JspWriter输出jsp内容缓存的大小,默认是8kb
pageEncoding 翻译jsp时所用的编码格式
isElgnored 是否忽略EL表达式,默认是false

include指令

include指令:可以包含其他页面

<%@include file="" %>该指令是包含外部页面。

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

<%--
1.page指令
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="error.jsp"%>
<%@ page import="java.util.ArrayList" %>
<%--
2.include指令
--%>
<%@ include file="/include.jsp"%> <html>
<head>
<title>jsp指令</title>
</head>
<body>
<%--<%int result=1/0;%>--%>
<%ArrayList list=new ArrayList();%>
<%=s%>
</body>
</html>

taglib指令:可以引入外部标签库

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

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

属性:

uri:外部标签的URI地址。

prefix:使用标签时的前缀。

2.2.3 JSP细节

1)九大隐式对象

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

九大隐式对象

隐式对象名称 类型 备注
request javax.servlet.http.HttpServletRequest  
response javax.servlet.http.HttpServletResponse  
session javax.servlet.http.HttpSession Page指令可以控制开关
application javax.servlet.ServletContext  
page Java.lang.Object 当前jsp对应的servlet引用实例
config javax.servlet.ServletConfig  
exception java.lang.Throwable page指令有开关
out javax.servlet.jsp.JspWriter 字符输出流,相当于printwriter
pageContext javax.servlet.jsp.PageContext 很重要

 

2)PageContext对象

简介

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

生命周期

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

常用方法

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

3)四大域对象

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

 

2.2.4 JSP最佳实战-MVC模型

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

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

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

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

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

例如:

  

  

  

Jsp授课的更多相关文章

  1. java web(一) 使用sql标签库+tomcat+mysql手动创建一个jsp练习总结

    2016-09-0111:06:53                                     使用sql标签库+tomcat+mysql手动创建一个jsp 1. 1.1安装tomcat ...

  2. day08 JSP

    day08 JSP 1. jsp 入门和 jsp 运行原理 2. jsp 语法 2.1 jsp 模板元素:jsp 页面中的 html 内容.它定义了网络基本骨架,即定义了页面结构和外观. 2.2 js ...

  3. <J2EE学习笔记>续上次Servlet部分提升内容 以及JSP的内容纲要

    以下全部课件均来自于同济大学刘岩老师的<EnterpriseJavaProgramming> 因为授课语言问题,如果翻译有不正确之处欢迎指正 Section 1. 关于Servlet的部分 ...

  4. JSP+SSH+Mysql+C3P0实现的传智播客网上商城

    项目简介 项目来源于:https://gitee.com/2121/shop 本系统是传智播客授课时的开发案例,基于JSP+SSH+Mysql的简单网上商城.在当代开发中,SSH的使用已经逐渐被SSM ...

  5. 学生成绩管理系统(SSM+MySQL+JSP)

    开发工具:Eclipse前端技术:基础:html+css+JavaScript框架:JQuery+H-ui后端技术:Spring+SpringMVC+mybatis模板引擎:JSP数据库:mysql ...

  6. myeclipse学习总结一(在MyEclipse中设置生成jsp页面时默认编码为utf-8编码)

    1.每次我们在MyEclispe中创建Jsp页面,生成的Jsp页面的默认编码是"ISO-8859-1".在这种情况下,当我们在页面中编写的内容存在中文的时候,就无法进行保存.如下图 ...

  7. jsp前端实现分页代码

    前端需要订一page类包装,其参数为 private Integer pageSize=10; //每页记录条数=10 private Integer totalCount; //总记录条数 priv ...

  8. jsp中出现onclick函数提示Cannot return from outside a function or method

    在使用Myeclipse10部署完项目后,原先不出错的项目,会有红色的叉叉,JSP页面会提示onclick函数错误 Cannot return from outside a function or m ...

  9. jsp页面无法识别el表达式的解决方案

    今天在写一个springmvc的小demo时,碰到一个问题,在jsp页面中书写为${user.username}的表达式语言,在浏览器页面中仍然显示为${user.username},说明jsp根本不 ...

随机推荐

  1. 我叫小M,立志建立MySQL帝国。

    我是小M,我在卡拉巴拉星球. 我喜欢数据,我立志成为一个数据管理者. 所以我来 Y 公司应聘,听说他们的数据量挺大的. 面试过程还是挺简单的. 我用 007 这三个数字就轻易打败了一堆吹嘘 996 的 ...

  2. 第18 章 : Kubernetes 调度和资源管理

    Kubernetes 调度和资源管理 这节课主要讲三部分的内容: Kubernetes 的调度过程: Kubernetes 的基础调度能力(资源调度.关系调度): Kubernetes 高级调度能力( ...

  3. [图论]最优布线问题:kruskal

    最优布线问题 目录 最优布线问题 Description Input Output Sample Input Sample Output Hint 解析 代码 Description 学校有n台计算机 ...

  4. Re:从零开始的Git保姆级使用教程

    观前提示: 本文主要介绍了用命令的方式对Git进行操作(全程用的win10系统),而对于TortoiseGit和github desktop等图形化操作知识,只进行简单介绍或提及,详细使用会在提到的地 ...

  5. Spring(七)SpringMVC的文件上传

    1-SpringMVC的请求-文件上传-客户端表单实现(应用) 表单项type="file" 表单的提交方式是post 表单的enctype属性是多部分表单形式,及enctype= ...

  6. Semaphore自白:限流器用我就对了!

    大家好,我是 Semaphore,我的中文名字叫"信号量",我来自 JUC(java.util.concurrent)家族. 我们家族有很多优秀的成员,比如:CountDownLa ...

  7. 由孙悟空的七十二变看Java设计模式:装饰者模式

    目录 应用场景 代码示例 改进代码 装饰者模式 定义 意图 主要解决问题 何时使用 优缺点 孙悟空的七十二变 应用场景 京东.天猫双十一,情人节商品大促销,各种商品有不同的促销活动 满减:满200减5 ...

  8. Git分支及其协同开发

    目录 Git分支 Git是如何保存数据的 Git分支的本质 Git分支的操作 远程仓库与本地仓库分支开发 一个项目多个远程仓库 远程仓库操作命令 协同开发 Git flow工作流 GitLub安装搭建 ...

  9. ES系列(四):http请求分发框架解析

    上一篇讲解了es的网络通信模块实现过程,大致明白其工作原理.再总结一下,就是基于netty编程范式,形成es通信基础.从而,最终我们得到几个重要的handler: Netty4HttpPipelini ...

  10. [ Laravel 5.6 文档 ] 进阶系列 —— 任务调度

    简介 Cron 是 UNIX.SOLARIS.LINUX 下的一个十分有用的工具,通过 Cron 脚本能使计划任务定期地在系统后台自动运行.这种计划任务在 UNIX.SOLARIS.LINUX下术语为 ...