8、JSP
8.1、什么是JSP
Java Server Pages : Java服务器端页面,也和Servlet一样,用于动态Web技术!
最大的特点:
写JSP就像在写HTML
区别:
HTML只给用户提供静态的数据
JSP页面中可以嵌入JAVA代码,为用户提供动态数据;
8.2、JSP原理
思路:JSP到底怎么执行的!
代码层面没有任何问题
服务器内部工作
tomcat中有一个work目录;
IDEA中使用Tomcat的会在IDEA的tomcat中生产一个work目录
我的mac电脑的位置是
/Users/xubainan/Library/Caches/JetBrains/IntelliJIdea2020.3/tomcat/1fde7373-527e-4067-a7e6-d52caf2d6165/work/Catalina/localhost/com_mytest_hello_war/org/apache/jsp
所以JSP文件最终还是转换成java->class文件执行。
浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet!
JSP 本质上就是一个Servlet
jsp的几个方法
//初始化
public void _jspInit() {
}
//销毁
public void _jspDestroy() {
}
//JSPService
public void _jspService(.HttpServletRequest request,HttpServletResponse response)
内置的一些对象
final javax.servlet.jsp.PageContext pageContext; //页面上下文
javax.servlet.http.HttpSession session = null; //session
final javax.servlet.ServletContext application; //applicationContext
final javax.servlet.ServletConfig config; //servlet配置文件
javax.servlet.jsp.JspWriter out = null; //writer
final java.lang.Object page = this; //this 当前页面
final javax.servlet.http.HttpServletRequest request //请求
final javax.servlet.http.HttpServletResponse response //响应
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;
在JSP页面中;
只要是 JAVA代码就会原封不动的输出;
如果是HTML代码,就会被转换为:
out.write("<html>\r\n");
这样的格式,输出到前端!
8.3、JSP基础语法
任何语言都有自己的语法,JAVA中有,。 JSP 作为java技术的一种应用,它拥有一些自己扩充的语法(了解,知道即可!),Java所有语法都支持!
jsp基础阶段的maven依赖
<dependencies>
<!--servlet依赖-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<!--jsp依赖-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<!--JSTL表达式的依赖-->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!-- standard 标签库 -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
JSP表达式
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>Hello World!</h2>
<% String name ="王大力" ;%>
<%--JSP表达式
作用:用来将程序的输出,输出到客户端
<%= 变量或表达式%>
--%>
<%= new java.util.Date()%>
<br>
<%= name %>
</body>
</html>
jsp脚本片段
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>jsp脚本片段</title>
</head>
<body>
<%--jsp脚本片段--%>
<%--打印0-100--%>
<%
for (int i = 0; i <= 100; i++) {
out.println(i);
}
%>
</body>
</html>
脚本片段的再实现
<%--
Created by IntelliJ IDEA.
User: xubainan
Date: 2021/3/3
Time: 1:30 下午
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>jsp片段的再实现</title>
</head>
<body>
<%
int x = 20;
out.println(x);
%>
<h2>这是一个jsp文档</h2>
<%
int y =39;
out.println(y);
%>
<%--jsp片段的在实现--%>
<% for (int i = 0; i < 6; i++) { %>
<h2>中国万岁 <%=i%> </h2><br>
<% } %>
</body>
</html>
JSP声明-全局变量声明和注释
<%--
Created by IntelliJ IDEA.
User: xubainan
Date: 2021/3/3
Time: 1:37 下午
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>jsp注释</title>
</head>
<body>
<%--jsp的注释,不会出现在客户端的源码中--%>
<!-- html的注释,会出现在客户端的源码中 -->
<%! final double pi =3.14;%>
<%--<%!的声明,会出现在class文件的方法体的声明部分顶端,供全局使用--%>
</body>
</html>
<html>
<head>
<title>jsp注释</title>
</head>
<body>
<!-- html的注释,会出现在客户端的源码中 -->
</body>
</html>
jsp指令
主页
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>jsp指令与引用-include引用</title>
</head>
<body>
<%--引用头部--%>
<%@include file="common/head.jsp"%>
我是jsp页面本身<br>
<%--引用底部--%>
<%@include file="common/footer.jsp"%>
</body>
</html>
头部
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
我是jsp公共头部。。。。。。。<br>
底部
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
我是jsp公共底部<br>
生成的html
<html>
<head>
<title>我是头部</title>
</head>
<body>
我是jsp公共头部。。。。。。。<br>
<title>jsp指令</title>
我是jsp页面本身<br>
我是jsp公共底部<br>
</body>
</html>
jsp标签
<%--
Created by IntelliJ IDEA.
User: xubainan
Date: 2021/3/3
Time: 2:01 下午
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--jsp标签拼接,本质还是三个页面,include会将页面合并--%>
<jsp:include page="/common/head.jsp"/>
我是本体<br>
<jsp:include page="/common/footer.jsp"/>
</body>
</html>