JSP详解
概述
JSP,全称为JavaServer Pages:Java服务端页面,和servlet一样,用于动态web技术。
特点:
JSP语法类似与HTML区别:HTML只给用户提供静态数据;而JSP页面可以嵌入Java代码,用于给用户提供动态数据
原理
服务器内部:tomcat有一个work目录idea中使用tomcat的项目会在idea的tomcat中产生一个work目录jsp页面会转换成java程序浏览器向服务器发送请求时,不管访问什么资源,其实都是在访问servletJSP页面会被转换成一个java类JSP转换成的java程序的类继承了HttpServlet类,JSP本身也是一个servlet类在JSP页面中:只要是java代码就会原封不动的输出,如果是html代码则会转换为形如:out.write(“\n”);的格式,输出到前端。
Jsp的重要结构:
判断请求
内置对象
final javax.servlet.jsp.PageContext pageContext; //页面上下文javax.servlet.http.HttpSession session = null; //sessionfinal javax.servlet.ServletContext application; //applicationContextfinal javax.servlet.ServletConfig config; //configjavax.servlet.jsp.JspWriter out = null; //outfinal java.lang.Object page = this; //page:当前HttpServletRequest request //请求HttpServletResponse response //响应
输出页面前增加的代码
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;
以上的这些个对象我们可以在JSP页面中直接使用!
基础语法
JS作为Java技术的一种应用,拥有自己扩充的一些语法(了解即可),且支持所有原Java语法。
注释
<%-- 注释的内容 --%>
JSP表达式
<%= 变量或表达式%>eg:<%= new Date()%>
JSP脚本片段
<% 正常Java代码 %>eg:<% int sum = 0; for (int i = 0; i < 100; i+=10) { sum+=i; out.println("
sum="+sum+"
"); }%>在脚本片段中嵌入html元素
eg:<% for (int i = 0; i < 5; i++) {%>
第
<%=i+1%>个循环
<% }%>JSP声明 (可以提高代码作用域)
<%! 代码片段,可以定义全局变量 %>eg:<%--JSP生命--%><%! private int globalvar = 0;%>
JSP注释和HTML注释的区别
会在客户端源代码中显示<%-- JSP注释 --%> 不会在客户端源代码中显示
JSP指令(了解即可)
<%@ page args... %><%@ include args... %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%-- @include相当于把所有页面合在了一起 --%> <%@include file="common/header.jsp"%>
body
<%@include file="common/footer.jsp"%><%-- jsp:include相当于页面拼接,本质上还是分为多个页面 --%>
body
Jsp九大内置对象及其作用域
九大JSP内置对象及其作用域如下:
request:该对象封存了当前请求数据的对象,由web服务器创建,作用域为一次请求。response:该对象用于向客户端发送响应,作用域为一次请求。pageContext:该对象提供了对Jsp页面所有对象及命名空间的访问,作用域为当前页面。session:该对象主要用于跟踪会话,作用域为一次会话。application:该对象即ServletContext对象,封存所有用户的共享数据,作用域为整个应用。out:该对象是javax.servlet.jsp.JspWriter的实例,用于向客户端输出内容,作用域为page。config:该对象是javax.servlet.ServletConfig的实例,包含了servlet的初始化参数,作用域为整个servlet生命周期。page:该对象代表了JSP页面,作用域为当前页面。exception:该对象代表了当前页面出现的异常,作用域为当前页面。
这些内置对象在JSP页面中使用,可以使用局部代码块或者脚本段语句来使用,但注意内置对象的作用域限制。
Jsp四大作用域
JSP四大作用域包括:
pageContext:页面的作用域,其范围仅限于当前页面,离开当前Jsp页面后,pageContext中的所有属性就会丢失。request:请求作用域,代表用户的请求,从发送HTTP请求到服务器,一直到服务器返回数据被称为一个完整的用户请求,在此过程中用户可能通过forward方式跳转多个页面,而放入request中的变量可以在跳转的页面间随意使用。session:会话作用域,用户进入浏览器页面时开始会话,关闭浏览器离开时标志着一个会话的结束,session用于存放服务器查询出来的数据,用户可以在自己的这个会话中随意获取session中的数据。application:应用作用域是最大的,只要服务器不停止,则application对象就一直存在,并且为所有会话所共享。
JSP标签、JSTL标签库、EL表达式
EL表达式:${}
作用:获取数据执行运算获取web开发的常用对象
JSP标签:
JSTL标签库:
JSTL标签库的使用是为了弥补HTML标签的不足;它自定义了多个标签以供使用,标签的功能和Java代码一样
JSTL标签库分为:核心标签、格式化标签、SQL标签、XML 标签,主要用的是核心标签
使用JSTL标签库之前需要先导入标签库,如核心标签
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Jsp生命周期
JSP的生命周期指从创建到销毁的整个过程。分为以下几个阶段:
编译阶段:
servlet容器编译servlet源文件,生成servlet类
初始化阶段:
加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法
执行阶段:
调用与JSP对应的servlet实例的服务方法
销毁阶段:
调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例