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");
String time = sdf.format(new Date());
%>
<h1>
当前系统时间:<%out.println(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:动作名称 动作属性1="属性值1"...../> 例如: <jsp:include page="test.txt"/> | 将一些常用的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>格式:<%@page 属性1="属性值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>例如:<%@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--启用【默认值】,true--禁用</h1>
<h2>测试EL表达式100+12.3:${100+12.3}</h2>
<h1>idErrorPage="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>Insert title here</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>
<!--<jsp:include page=""></jsp:include>-->
<%@include file="test.html" %>
<h2>包含一个jsp网页</h2>
<%@include file="test1.jsp" %>
</body>
</html>
2.2Java代码片段
格式:<% java程序 %>
作用:嵌套在html中的java程序【提供动态数据】
例如:
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.util.Date"%>
<%@ 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 sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = sdf.format(new Date());
%>
<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+11.5=<%= 100+12.5 %></h1>
<h2>关系表达式-100>12=<%= 100>12%></h2>
<h1>逻辑表达式-100>12||100<12=<%=100>12||100<12 %></h1>
<%-- --%>
<%!
String name = "zhangsan";
public String getinfo(){
return "hello,word";
}
public class Student{
public String getStudentName(){
return "网星软件";
}
}
%>
<h1>测试jsp声明中的变量name==<%=name %></h1>
<h1>测试jsp声明中的方法getinfo==<%=getinfo() %></h1>
<h1>测试jsp声明中的类==<%=new Student().getStudentName() %></h1>
<hr>
<h1>JSP声明语句:<%!声明语句%>通常声明全局变量、常量、方法、类</h1>
<h1>JSP Scriptlet:<%java代码%>,其中可包含局部变量、java语句</h1>
<h1>JSP表达式:<%=java 代码%></h1>
</body>
</html>
2.5jsp动作
格式:<jsp:动作名称 动作属性.....></jsp:动作名称>或者
<jsp:动作名称 动作属性1="属性值1".../>
作用:将一些常用的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>位置:通常出现在body中</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"/>
<h2>测试能否包含css文件</h2>
<jsp:include page="test.css"/>
</body>
</html>
include指令[<%@include file=”” %>]与include动作[<jsp:include page=""></jsp:include>]有什么区别?
| include指令[<%@include file=”” %>] | include动作[<jsp:include page=""></jsp:include>] |
语法格式 | <%@include file=””%> | <jsp:include page=””> |
发生作用的时间 | 页面转换期间 | 请求期间 |
包含的内容 | 文件的实际内容 | 页面的输出 |
转换成的Servlet | 主页面和包含页面转换为一个Servlet | 主页面和包含页面转换为独立的Servlet |
编译时间 | 较慢——资源必须被解析 | 较快 |
执行时间 | 稍快 | 较慢——每次资源必须被解析 |
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>作用:跳转到其他的资源【servlet/html/jsp】</h1>
<h1>位置:通常出现在body中</h1>
<h1>常用属性:</h1>
<h1>page="目标文件路径":跳转到的目标文件</h1>
<!-- 测试跳转到html -->
<%--<jsp:forward page="test.html"></jsp:forward> --%>
<!-- 测试跳转到jsp -->
<%--<jsp:forward page="test1.jsp"></jsp:forward>--%>
<!-- 测试跳转到servlet -->
<jsp:forward page="/test"></jsp:forward>
</body>
</html>
3.JSP页面的执行过程?
1.jsp本质上就是一个Servlet程序。
Jsp在执行的时候会被转换成Servlet程序。
保存位置
F:\20200728\javawebworkspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\TestJSP1\org\apache\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的区别?
| Servlet | JSP |
自定义标签 | 不提供自定义标签 | 提供了自定义标签 |
定义 | Servlet是一个Java类,它按照请求-响应模型扩展了承载应用程序的服务器的功能。 | JSP是包含静态和动态数据的文本文档 |
轻松编码 | Java程序 | 网页脚本语言 |
实作 | 单个Servlet文件包含业务逻辑和表示逻辑 | JSP中使用JavaBeans将业务逻辑与表示逻辑分离 |
修改 | 修改Java Servlet需要大量时间 | JSP修改很快。 |
MVC模式 | Servlet在MVC模式中扮演控制器角色 | JSP充当视图,即用于显示输出 |
包 | Java Servlet中使用的任何软件包都必须导入到Servlet的顶部 | JSP没有强制性的条件,在该程序包中,可以在顶部,中间或底部的任何位置导入软件包 |
性能 | Servlet以预编译形式出现[快] | JSP生命周期中的第一步是将JSP转换为Java代码,然后进行编译[慢] |
在客户端运行JavaScript | Java servlet不支持。 | JSP支持在客户端运行JavaScript以实现某些功能
|
会话管理 | 默认情况下禁用Java Servlet中的会话管理。 需要显式启用它。 | JSP中,会话管理是自动启用的 |
支持请求 | Java Servlet可以接受所有类型的协议请求 | JSP仅接受HTTP请求 |
用例 | 需要大量数据操作和处理时,Java Servlet最适合使用 | 不需要大量数据处理时,首选JSP |