java_JSP_1
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指令---常见属性
- language="java"---指定语言
- contentType="text/html; charset=utf-8":设置当前jsp页面的内容类型
- pageEncoding="utf-8":设置当前jsp页面的字符编码
- import="java.util.Date":导入java类库的依赖包【可以出现多个】
- isELIgnored="false"---是否启用EL表达式语言 “${表达式}”,false可用,true不可以
- 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>格式<@page 属性1="属性值"...></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>例如:<%@page import="java.util.Date" import="java.text.SimpleDateFormat"%></h2>
<h2>2.不同的page指令中可以出现一次/多次</h2>
<h2><%@page import="java.util.Date"%></h2>
<h2><%@page import="java.text.SimpleDateFormat"%></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>格式:<%@include 属性1="属性值1"...%></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>12.5=<%= 100>12.5 %></h1><h1>逻辑表达式 --100>12.5 || 100<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>格式:<jsp:include 动作属性....></jsp:include >
</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>格式:<jsp:forward 动作属性...></jsp:forward>
</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相关推荐
最新文章
- “中药资源创新院士团队”诚聘结构、合成和计算生物学博士后5-10名
- oracle修改数据高性能,oracle数据库的性能调整
- 13-linux定时任务不起作用到的问题解决办法
- 【Qt】数据库实战之QSqlQueryModel
- 【Pytorch神经网络实战案例】11 循环神经网络结构训练语言模型并进行简单预测
- 如何彻底关闭windows defender
- Python之网络爬虫(Xpath语法、Scrapy框架的认识)
- python上三角九九乘法表_用5行Python代码打印九九乘法表
- Android之帮助文档
- Sun Virtualbox说明文件的Bug
- MYSQL存储过程,错误处理机制
- android数据线接口分类,安卓手机数据线接口类型
- 计算机快捷截图方式,Windows系统电脑快速屏幕截图方式
- UVCCamera AndroidUSBCamera示例运行错误的解决办法
- 听精品教学展示课后感
- java筆試題,Java筆試題及答案
- 【7047】北京游:知乎、百度、豆瓣、新浪微博
- centos7安装python3.7.4_基于centos7 安装python3.6.4出错的解决方法
- 抖音、美团等大厂千万级用户的Android客户端架构演进之路—
- word ppt中设置TAB缩进量