前言
本文为JavaWeb基础JSP相关知识详细介绍~,Java全栈学习路线可参考: 【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
一、什么是JSP
Java Server Pages:Java服务器端页面,也和Servlet一样,用于动态web技术!
JSP的主要作用是代替Servlet程序回传HTML页面的数据
JSP的特点:
写JSP就像在写HTML
JSP与HTML的区别:
HTML只给用户提供静态的数据
JSP页面中可以嵌入JAVA代码,为用户提供动态数据
二、JSP原理
1.JSP原理简介
- JSP是在服务器内部工作的
- IDEA中使用Tomcat会在IDEA的Tomcat中产生一个work目录,在电脑中的地址:
C:\Users\J\AppData\Local\JetBrains\IntelliJIdea2020.3\tomcat\bd396c0d-06d6-4a53-b293-bb717de8947c\work\Catalina\localhost\ROOT\org\apache\jsp
JSP页面本质上是一个Servlet程序,第一次访问JSP页面时(运行Tomcat服务器后在浏览器地址栏输入路径),Tomcat服务器会将此JSP页面翻译成为一个Java源文件,并对其进行编译成为.class字节码文件(一个.java,一个.class),如下图:
当打开.java文件时发现其中的内容如下图(继承了HttpJsBase类):
而HttpJspBase类直接继承于HttpServlet类,即JSP翻译出来的Java类间接继承于HttpServlet类,证明JSP页面是一个Servlet程序JSP页面实际上会转变成java程序。
浏览器向服务器发送请求,不管访问什么资源,其实都在访问Servlet!JSP最终也会被转换成java类!
JSP本质上就是Servlet!包含以下方法:
//初始化 public void _jspInit() { } //销毁 public void _jspDestroy() { } //JSPService public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
2.一个JSP做了什么
(1)判断请求
(2)内置一些对象
final javax.servlet.jsp.PageContext pageContext; //页面上下文 javax.servlet.http.HttpSession session = null; //session final javax.servlet.ServletContext application; //application final javax.servlet.ServletConfig config; //config javax.servlet.jsp.JspWriter out = null; //out final java.lang.Object page = this; //当前 page HttpServletRequest request //请求 HttpServletResponse response //响应
(3)输出页面前增加的代码
response.setContentType("text/html"); //设置响应的页面类型 pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out;
(4)以上的这些对象可以在JSP页面中直接使用
- 在JSP页面中只要是JAVA代码就会原封不动的输出
- 如果是HTML代码,就会被转换为:
out.write("<html>\r\n"); // 以这样的格式,输出到前端
三、JSP基础语法
1.JSP表达式
<%--JSP表达式 <%= 变量或者表达式%> 作用:用来将程序的输出,输出到客户端 --%> <%= new java.util.Date()%>
2.JSP脚本片段
<%--jsp脚本片段--%> <% int sum = 0; for (int i = 0; i <= 100; i++) { sum += i; } out.println("<h1>Sum=" +sum+ "<h1>" ); %>
脚本片段的再实现
<% int x = 10; out.println(x); %> <p>这是一个JSP文档</p> <% int y = 20; out.println(y); %> <%--在代码中嵌入HTML元素--%> <% for (int i = 0; i < 5; i++) { %> <h1>Hello world <%=i%></h1> <% } %>
3.JSP声明
- JSP声明:在JSP中嵌入Java代码即可,会被编译到JSP生成Java的类中!非JSP声明的代码会被生成到_jspService方法中!
<%! static{ System.out.println("Loading Servelet!"); } private int globalVar = 0; public void oi(){ System.out.println("进入了方法oi"); } %>
JSP的注释不会在客户端显示,HTML的注释会显示!
<%片段%> <%=表达式%> <%!声明%> <%--JSP注释--%> <!--HTML注释-->
四、JSP指令
1.page指令
page指令用来定义JSP文件中的全局属性,它描述了与页面相关的一些信息,其作用域被它所在的JSP页面和其包含的文件。页面指令一般位于JSP页面的顶端,但是可以放在JSP页面的任何位置,无论把<%@page%>指令放在JSP文件中的哪个地方,它的作用范围都是整个JSP页面。
以定制错误页面为例使用JSP指令
<%--定制错误页面--%> <%@ page errorPage="error/500.jsp" %>
2.include指令
- include指令用于在当前JSP页面中加载需要插入的文件代码,即为页面插入一个静态文件,如JSP页面、HTML页面、文本文件或一段Java程序,这些加载的代码和原有的JSP代码合并成一个新的JSP文件。
<%-- @include:会将两个页面合二为一 --%> <%@include file="common/header.jsp"%> <hr> <h1>网页主体</h1> <hr> <%@include file="common/footer.jsp"%>
3.taglib指令
- taglib指令用来指定页面中使用的标签库以及自定义标签的前缀。taglib指令语法格式:
<%@taglib uri="tagLibraryURI" prefix="tagPrefix" %>
uri(统一资源标识符)属性用于指定标记库的存放位置,并告诉JSP引擎在编译JSP程序时如何处理指定标签库中的标签,无默认值。uri属性可以是在TLD(标记库描述符)文件或web.xml文件中定义的标记库的符号名,也可以是TLD文件或JAR文件的相对路径。
prefix属性用于指定标记库中所有动作元素名中使用的前缀,无默认值。
五、9大内置对象
request:请求对象
response:响应对象
pageContext:JSP的上下文对象
session:会话对象
application:ServletContext对象
config:ServletConfig对象
out:JSP输出流对象
page:指向当前JSP的对象
exception:异常对象
4大域对象
pageContext:客户端向服务器发送请求,产生的数据只在当前的页面中有效
request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用的
session:客户端向服务器发送请求,产生的数据,用户用完一会还有用,比如:购物车
application:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可能使用,比如:聊天数据
<% pageContext.setAttribute("name1","oi1号");//保存的数据只在一个页面中有效 request.setAttribute("name2","oi2号");//保存的数据只在一次请求中有效,请求转发会携带这个数据 session.setAttribute("name3","oi3号");//保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器 application.setAttribute("name4","oi4号");//保存的数据只在服务器中有效,从打开服务器到关闭服务器 %>
后记
Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~