简介
JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。
JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。
JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。
生命周期
JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成servlet。
以下是JSP生命周期中所走过的几个阶段:
编译阶段:
servlet容器编译servlet源文件,生成servlet类
- 初始化阶段:
加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法
- 执行阶段:
调用与JSP对应的servlet实例的服务方法
- 销毁阶段:
调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例
编译过程
当浏览器请求JSP页面时,JSP引擎会首先去检查是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件。
编译的过程包括三个步骤:
- 解析JSP文件。
- 将JSP文件转为servlet。
- 编译servlet。
jsp比较灵活,可以获取Java代码和HTML代码的随意组合
jsp的注释:<%--注释--%>
jsp的本质:就是servlet
jsp原理:当编写一个jsp页面之后,当讲该jsp部署到web容器中时,会将jsp翻译成一个.Java文件(就是一个servlet)
文件名称:_jsp.java
再通过Java编译器编译成.class文件
九大隐式对象:在jsp页面不用显式声明,就可以直接使用的对象,这些对象被称为隐式对象/内置对象
在jsp转换成为servlet时,是被声明在servlet的_jspService()方法中的
out 是JspWriter的对象,用于将对象相应在页面上
pageContext 是PageContext对象,表示当前jsp中的所有对象
session HttpSession 是一次会话
page 是Object对象,表示当前页面对象,类似Java中的this
config 是ServlretConfig 表示当前servlet的配置信息
application 是ServletContext对象,表示当前应用,在一个应用程序中只有一个application对象
request 是HttpServletRequest对象 用于封装请求信息
response 是HttpServletResponse对象 用于封装响应信息
exception 是Exception对象 表示当前页面的异常对象
域对象 request pageContext session application
域对象属性 :
getAttribute(String name)
setAttribute()
removeAttribute(String name),
以上的四个域对象都有这些属性
对象的作用范围:
pageContext:属性的作用范围仅限于当前页面
request:属性的作用范围仅限同一次请求
session:限于一次会话,浏览器从打开到关闭称为一次会话
application:作用于整个web应用,是作用范围最大的对象,一次设置,在web整个应用的jsp和servlet中都可以访问到
从以下实例可以看出四个域对象的作用范围
实例:
index.jsp文件如下:
<%--
Created by IntelliJ IDEA.
User: lenovo
Date: 2018/7/11
Time: 16:50
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>
<%
pageContext.setAttribute("pageAttr","pageValue");
request.setAttribute("requestAttr","requestValue");
application.setAttribute("appAttr","appValue");
session.setAttribute("sessionAttr","sessionValue");
%>
pageContextAttribute:<%=pageContext.getAttribute("pageAttr")%><br>
requestAttribute:<%=request.getAttribute("requestAttr")%><br>
applicationAttribute:<%=application.getAttribute("appAttr")%><br>
sessionAttribute:<%=session.getAttribute("sessionAttr")%><br>
<a href="AttrServlet.jsp">attrServlet.jsp</a><br>
<a href="/AttributeServlet">attrServlet.java</a>
</body>
</html>
AttrServlet.jsp文件如下:
<%--
Created by IntelliJ IDEA.
User: lenovo
Date: 2018/7/11
Time: 16:51
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>AttributeServlet</title>
</head>
<body>
pageContextAttribute:=====<%=pageContext.getAttribute("pageAttr")%><br>
requestAttribute:=====<%=request.getAttribute("requestAttr")%><br>
applicationAttribute:=====<%=application.getAttribute("appAttr")%><br>
sessionAttribute:=====<%=session.getAttribute("sessionAttr")%>
</body>
</html>
AttributeServlet.java文件如下:
package org.lanqiao.web;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet( "/AttributeServlet")
public class AttributeServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
out.println(session.getAttribute("sessionAttr"));
out.println(request.getAttribute("requestAttr"));
}
}