一、前言
什么是JSP?
就是Java Server Pages:java服务器端页面,也是也和servlet一样,开发动态web技术
最大的特点:
- 写JSP代码就如同写HTML代码
区别:
- HTML只给用户提供静态数据
- JSP页面中可以嵌入java代码,为用户提供动态数据
二、通过阅读原码剖析JSP原理
思路:JSP到底怎么执行的?
- 代码层面没有任何问题
- 服务器内部工作
tomcat中有一个work目录,IDEA中使用Tomcat的会在IDEA的Tomcat中生产一个work目录
浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet
JSP最终也会被转换为Java类,JSP本质上就是一个Servlet!
- 判断请求
- 内置一些对象
- 输出页面前增加的代码
- 以上这些对象我们可以在JSP页面中直接使用
访问jsp页面流程图如下:
我们先来一段JSP代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
String name = "徐志斌";
%>
name:<%=name%>
</body>
</html>
在JSP页面中,只要是java代码,就会原封不动的输出。
如果是HTML代码,就会被被转换为:out.write(“name:”)这样的格式输出到前端页面
三、JSP基础语法(重点)
任何语言都有自己的语言,JSP作为java技术的一种应用,它有一些自己扩充的语法(了解即可),java所有的语法都支持。
1.JSP表达式:
<%--jsp表达式
作用:用来将程序的输出,输出到客户端
<%= 变量或者表达式%>
--%>
<%= new java.util.Date()%>
2.JSP脚本片段:
<%--jsp脚本片段--%>
<%
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
out.println("<h1>Sum = " + sum + "</h1>");
%>
JSP脚本片段的再实现:
<%
int x = 10;
out.println(x);
%>
<p>这是一个jsp文档</p>
<%
int y = 20;
out.println(y);
%>
<hr>
<%--再代码中,嵌入HTML元素--%>
<%
for (int i = 0; i < 5; i++) {
%>
<h1>Hello World <%=i%> </h1>
<%
}
%>
3.JSP声明:
<%!
static{
System.out.println("Loading");
}
private int globalVar = 0;
public void jspInit(){
System.out.println("进入了方法!");
}
%>
jsp声明:会被编译到jsp生成的java类的类中,其他的就会被生成到 _jspService方法中
四、JSP指令(了解)
<%@page args...%>
<%@include file=""%>
@include会将两个页面合二为一
<%@include file="common/header.jsp"%>
<h1>网页主体</h1>
<%@include file="common/footer.jsp"%>
jsp标签:
jsp:include:拼接页面,本质还是三个
<jsp:include page="/common/header.jsp"/>
<h1>网页主体</h1>
<jsp:include page="/common/footer.jsp"/>
五、九大内置对象
- PageContext 可存储数据
- Request 可存储数据
- Response
- Session 可存储数据
- Application (ServletContext) 可存储数据
- config (ServletConfig)
- out
- page 基本没人用
- exception
// 内置对象,存储数据
pageContext.setAttribute("name1","徐志斌1号"); //保存的数据只在一个页面中有效
request.setAttribute("name2","徐志斌2号"); //保存的数据只在一次请求中有效,请求转发会携带这个参数
session.setAttribute("name3","徐志斌3号"); //保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("name4","徐志斌4号"); //保存的数据只在服务器中有效,从打开服务器到关闭服务器
request:客户端向服务器发送请求,产生的数据用户看完就没用了。比如:新闻,用户看完没用了
session:客户端向服务器发送请求,产生的数据用户看完就没用了还有用。比如:购物车
application:客户端向服务器发送请求,产生的数据用户用完了,其他用户还可能使用。比如:聊天数据