1.JSP是什么?

例如:

<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>当前系统时间</title>
</head>
<body>
<center><%SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");  String time = sdf.format(new Date());%><h1>当前系统时间:<% out.write(time); %>></h1></center>
</body>
</html>

JSP--Java Server Pages[java服务器页面]

运行在服务器上,包含java语言代码,动态网页就是JSP

在这里我们所说的动态网页,不是值网页中的元素形状/位置变化,而是值网页中元素的内容发生变化

2.JSP页面中的元素?

元素名称

表示

作用

静态元素

html标签

提供页面的显示效果

jsp指令

<%@指令名称  属性1=”属性值1”......%>

例如:

<%@ page

language="java"

contentType="text/html; charset=utf-8"

pageEncoding="utf-8"%>

常用page指令 / include指令 / taglib指令

在jsp页面中声明的一些由浏览器执行的附加信息

Java

代码片段

<%  java程序 %>

例如:<% out.write(datetime); %>

嵌套在html中的java程序【提供动态数据】

jsp表达式

<%= 表达式/变量/方法 %>

例如:<%= datetime %>

计算某种表达式的结果,或者变量/方法的结果。

jsp声明

<%! 定义的变量/方法/类 %>

例如:

<%!

String name="zhangsan";

public  String  getInfo(){

return "这是一个jsp声明";

}

public class  Student{

public  String  getStudentInfo(){

return "这是一个java类中的实例方法";

}

}

%>

在jsp页面中定义一些自己需要的java变量/方法/类

jsp动作

<jsp:动作名称 动作属性.....></jsp:动作名称>

例如:

<jsp:include page="test.txt"></jsp:include>

将一些常用的java程序封装,方便调用

JSP注释

<%--  --%>

<!--  --> html静态元素注释

<%-- --%> jsp动态元素的注释

2.1 指令

格式:<%@指令名称  属性1=”属性值1”......%>

作用:在jsp页面中声明的一些由浏览器执行的附加信息.

常用指令:page指令 / include指令 / taglib指令

1.page指令---常见属性

  1. language="java"---指定语言
  2. contentType="text/html; charset=utf-8":设置当前jsp页面的内容类型
  3. pageEncoding="utf-8":设置当前jsp页面的字符编码
  4. import="java.util.Date":导入java类库的依赖包【可以出现多个】
  5. isELIgnored="false"---是否启用EL表达式语言 “${表达式}”,false可用,true不可以
  6. isErrorPage="false"---是否是一个错误页面,如果是那么就可以使用exception的JSP内置对象
<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"isELIgnored="false"isErrorPage="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>page指令</title>
</head>
<body>
<h1>page指令</h1>
<h1>格式&lt;@page 属性1="属性值"...&gt;</h1>
<h1>作用:在jsp页面中声明的一些由浏览器执行的附加信息。</h1>
<h1>位置:通常在jsp页面的首行</h1>
<h1>常用属性</h1>
<h1>language="java":指定编程语言[固定java]</h1>
<h1>contentType="text/html";charset="utf-8":设置当前jsp页面的内容类型</h1>
<h1>pageEncoding="utf-8":设置当前jsp页面的字符编码</h1>
<h1>import="java.util.Date":导入java程序包</h1>
<h2>1.同一个page指令中可以出现多次</h2>
<h2>例如:&lt;%@page import="java.util.Date" import="java.text.SimpleDateFormat"%&gt;</h2>
<h2>2.不同的page指令中可以出现一次/多次</h2>
<h2>&lt;%@page import="java.util.Date"%&gt;</h2>
<h2>&lt;%@page import="java.text.SimpleDateFormat"%&gt;</h2>
<h1>isELIgnored="false":是否启用EL表达式语言【${表达式}】false【默认值】--启用(将EL表达式中当作表达式处理) true【不启用】--将表达式中的内容当作字符串处理</h1>
<h2>测试EL表达式100+12.5:${100+12.5} </h2>
<h1>isErrorPage="false":是否是一个错误页面,如果是那么就可以使用exception的JSP内置对象</h1>
</body>
</html>

2.include指令[包含其他的资源进入本jsp页面]---常见属性

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>include指令</title>
</head>
<body>
<h1>include指令</h1>
<h1>格式:&lt;%@include 属性1="属性值1"...%&gt;</h1>
<h1>作用:包含其它资源【文本/html/jsp】进入本jsp页面</h1>
<h1>位置:通常出现在body中</h1>
<h1>常用属性</h1>
<h1>file="被包含的文件路径":被包含进入本jsp页面的文件</h1>
<h2>包含一个html网页</h2>
<%@include file="../test.html" %>
<h2>包含一个jsp网页</h2>
<%@include file="test1.jsp"%>
</body>
</html>

3.taglib指令--在jsp页面中使用JSTL【jsp的标准标签库】标签的时候,用来导入标签库

【这个指令暂时不处理,我们在后面学习JSTL时候,会详细介绍】

2.2Java代码片段

格式:<%  java程序 %>

作用:嵌套在html中的java程序【提供动态数据】

<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>java代码片段</title>
</head>
<body>
<% SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");String time = dateFormat.format(new Date());out.write("<h1>"+time+"</h1>");%>
</body>
</html>

2.3jsp表达式

格式:<%= 表达式/变量/方法 %>

作用:计算某种表达式的结果,或者变量/方法的结果。

2.4jsp声明

格式:<%! 类/变量/方法 %>

作用:在jsp页面中定义一些自己需要的java变量/方法/类

例如:

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>JSP表达式/JSP声明</title>
</head>
<body><h1>算数表达式 --100+12.5=<%= 100+12.5 %>></h1><h1>关系表达式 --100&gt;12.5=<%= 100>12.5 %></h1><h1>逻辑表达式 --100&gt;12.5 || 100&lt;12.5=<%=100>12.5 || 100<12.5 %></h1><%!String name = "zhangsan";int age = 22;public String getinfo(){return "HELLO,WORLD";}public class Student{public String getStudentName(){return "网星软件";}}%><h1>测试jsp声明中的变量name==<%= name %></h1><%--  错误 <%= System.out.println(name),name %> JspWriter is not applicable for the arguments (void, String)JspWriter类型中的print(String)方法不适用于参数(void, String)--%><h1>测试jsp声明中的变量int==<%= age %></h1><h1>测试jsp声明中的方法getinfo()==<%= getinfo() %></h1><h1>测试jsp声明中的类==<%= new Student().getStudentName() %></h1>
</body>
</html>

2.5jsp动作

格式:<jsp:动作名称 动作属性.....></jsp:动作名称>

作用:将一些常用的java程序封装,方便调用

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>include动作</title>
</head>
<body>
<h1>include动作</h1>
<h1>格式:&lt;jsp:include 动作属性....&gt;&lt;/jsp:include &gt;
</h1><h1>作用:包含其它资源【文本/html/jsp】进入本jsp页面</h1><h1>常用属性</h1>
<h1>page="被包含的文件路径":被包含进入本jsp页面的文件</h1>
<h2>包含一个html网页</h2>
<jsp:include page="../test.html"></jsp:include>
<h2>包含一个jsp网页</h2>
<jsp:include page="test1.jsp"></jsp:include><div><%-- <%@include file="mm.jpg" %> 错误--%>
<%-- <jsp:include  page="mm.jpg"></jsp:include>错误 --%>
</div>
</body>
</html>

include指令[<%@include file=”” %>]与include动作[<jsp:include page=""></jsp:include>]有什么区别?

include指令:

include指令包含的资源为静态的。被包含的资源和当前JSP页面是一个整体,资源相对路径的解析发生在当前页面被请求转换为Servlet时。

需要注意的是,源文件和被包含文件中的变量和方法名不能发生冲突,因为它们最终是会生成同一个文件的,这样将会导致编译错误!

 <%@ include file = "test.jsp" %>

include动作:

include动作指令可以对动态资源进行包含。当前页面和被包含的资源是两个独立的实体,在资源解析时,当前页面会对被包含的JSP页面发送请求,被包含的JSP页面对该请求对象进行处理,然后将处理结果返回。

 <jsp:include page = "test.jsp" flush = "true" ><jsp:param name = "name" value = "value" /></jsp:include>

include指令

include动作

定义

<%@include file = "test.jsp" %>

<jsp:include page = "test.jsp" flush = "true" >

<jsp:param name = "name" value = "value" />

</jsp:include>

区别

include指令

编译阶段指令,即在编译时,(也就是jsp被转化成servlet的阶段进行的)

编译器会把指令所指向目标文件的内容复制到指令所在的位置,替换指令,最终形成一个文件在运行时只有一个文件。

即include指令所包含文件的内容是在编译时插入到JSP文件中的,当文件内容有变化时就需要重新编译,所以适合于包含静态页面的情况;

include动作

是运行时的语法,在主页面被请求时,才将用到的页面包含进来,涉及两个文件,类似于方法调用,因此更适用于包含动态页面的情况

选择

考虑到include动作在维护上的优势,优先选择include动作

forward的jsp动作

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>forward动作</title>
</head>
<body>
<h1>forward动作</h1>
<h1>格式:&lt;jsp:forward 动作属性...&gt;&lt;/jsp:forward&gt;
</h1>
<h1>作用:跳转到其它资源【html/jsp/Servlet】</h1>
<h1>位置:通常出现在body中</h1>
<h1>常用属性</h1>
<h1>page="目标文件路径":跳转到目标文件</h1><%-- <h2>跳转到test.html--<jsp:forward page="../test.html"></jsp:forward></h2> --%>
<%-- <h2>跳转到test2.jsp--<jsp:forward page="test2.jsp"></jsp:forward></h2> --%>
<%-- <a href="#"><jsp:forward page="test2.jsp"></jsp:forward></a> --%>
<jsp:forward page="../test"></jsp:forward></body>
</html>

3.JSP页面的执行过程?

1.jsp本质上就是一个Servlet程序。

Jsp在执行的时候会被转换成Servlet程序。

保存位置

D:\1wangxing\javawebwork\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\TestJSP1\org\apache\jsp\jsp

public final class test5_jsp extends org.apache.jasper.runtime.HttpJspBase

implements org.apache.jasper.runtime.JspSourceDependent,

org.apache.jasper.runtime.JspSourceImports {

     org.apache.jasper.runtime.HttpJspBase继承过javax.servlet.http.HttpServlet

当我们请求一个jsp页面的时候,服务器收到jsp页面的请求以后,会先将被访问的jsp文件转换成Servlet文件继续编译转换以后的Servlet文件得到Servlet文件对应的字节码文件,接着执行这个编译以后的字节码文件,将运行结果封装到响应对象中,返回给客户端浏览器

缺点:第一次访问jsp页面会比较慢一些。

Servlet与JSP的区别?

通俗的说:

jsp就是在html里面写java代码,servlet就是在java里面写html代码

其实jsp经过容器解释之后就是servlet.

Servlet

JSP

Java Servlet或简称Servlet

JSP的完整形式是Java Server Pages

Servlet 是由 Java 提供用于开发 web 服务器应用程序的一个组件,运行在服务端,由 servlet 容器管理,用来生成动态内容。一个 servlet 实例是实现了特殊接口 Servlet 的 Java 类,所有自定义的 servlet 均必须实现 Servlet 接口

jsp 本质上就是一个 Servlet,它是 Servlet 的一种特殊形式(由 SUN 公司推出),每个 jsp 页面都是一个 servlet实例

Servlet 是 html 代码和 Java 代码分离,侧重逻辑控制

jsp 是 html 页面中内嵌的 Java 代码,侧重页面显示

Servlet更注重于逻辑控制

JSP更加擅长页面的显示

Servlet中没有内置对象

JSP中有内置对象HttpServletRequest对象和HttpServletResponse对象,且其内置对象都是通过HttpServletRequest对象和HttpServletResponse对象或HttpServlet调用得到

JVM 只能识别 Java 类,并不能识别 jsp 代码,web 容器收到以.jsp 为扩展名的 url 请求时,会将访问请求交给tomcat 中 jsp 引擎处理,每个 jsp 页面第一次被访问时,jsp 引擎将 jsp 代码解释为一个 servlet 源程序,接着编译servlet 源程序生成.class 文件,再有 web 容器 servlet 引擎去装载执行 servlet 程序,实现页面交互

JSP请求—>web服务器---->JSP引擎------>Servlet引擎------>Web服务器----->客户端

java_JSP_1相关推荐

最新文章

  1. “中药资源创新院士团队”诚聘结构、合成和计算生物学博士后5-10名
  2. oracle修改数据高性能,oracle数据库的性能调整
  3. 13-linux定时任务不起作用到的问题解决办法
  4. 【Qt】数据库实战之QSqlQueryModel
  5. 【Pytorch神经网络实战案例】11 循环神经网络结构训练语言模型并进行简单预测
  6. 如何彻底关闭windows defender
  7. Python之网络爬虫(Xpath语法、Scrapy框架的认识)
  8. python上三角九九乘法表_用5行Python代码打印九九乘法表
  9. Android之帮助文档
  10. Sun Virtualbox说明文件的Bug
  11. MYSQL存储过程,错误处理机制
  12. android数据线接口分类,安卓手机数据线接口类型
  13. 计算机快捷截图方式,Windows系统电脑快速屏幕截图方式
  14. UVCCamera AndroidUSBCamera示例运行错误的解决办法
  15. 听精品教学展示课后感
  16. java筆試題,Java筆試題及答案
  17. 【7047】北京游:知乎、百度、豆瓣、新浪微博
  18. centos7安装python3.7.4_基于centos7 安装python3.6.4出错的解决方法
  19. 抖音、美团等大厂千万级用户的Android客户端架构演进之路—
  20. word ppt中设置TAB缩进量

热门文章

  1. Word临时文件怎么恢复?可持续的文件恢复方法
  2. git tag怎么使用_这才是真正的Git——Git内部原理揭秘!
  3. VMwar虚拟机安装winXP教程
  4. ES6(ECMAScript6)学习笔记
  5. 汉克时代 签2份合同_在动荡的时代找到一份工作
  6. 搭建游戏平台有哪些优势?
  7. h5应用缓存及收藏时Icon显示
  8. Android:AppBarLayout设置elevation为0,结果消失
  9. Docker+Jenkins+GIT+Tomcat实战持续化集成
  10. DevOps 工具链图 汇总