一、JSP(Java Server Pages)
1.1 概念
简化的Servlet设计,在HTML标签中嵌套Java代码,用以高效开发Web应用的动态网页
1.2 作用
替换显示页面部分的Servlet(使用*.jsp文件替换XxxJSP.java)
二、JSP开发【重点】
2.1 创建JSP
在web目录下新建*.jsp文件(与WEB-INF平级)
2.1.1 JSP编写Java代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>This is my first page</title>
</head>
<body>
<%=new java.util.Date() %>
</body>
</html>
2.1.2 访问JSP
在浏览器输入http://ip:port/项目路径/资源名称
2.2 JSP与Servlet
关系
JSP文件在容器中会转换成Servlet执行。
JSP是对Servlet的一种高级封装。本质还是Servlet。
区别
与 Servlet 相比:JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println语句。
| JSP与Servlet区别 |
|---|
![]() |
2.3 JSP实现原理
Tomcat会将xxx.jsp转换成Java代码,进而编译成.class文件运行,最终将运行结果通过response响应给客户端。
| JSP实现原理 |
|---|
![]() |
2.3.1 JSP.java源文件存放目录
使用IDEA开发工具,Tomcat编译后的JSP文件(Xxx_jsp.class 和 Xxx_jsp.java)的存放地点:
C:\用户\账户名\.IntelliJIdea2019.1\system\tomcat\项目名称\work\Catalina\localhost\应用上下文\org\apache\jsp
三、JSP与HTML集成开发
3.1 脚本
脚本可以编写Java语句、变量、方法或表达式。
3.1.1 普通脚本
语法:<% Java代码 %>
<html>
<head><title>Hello World</title></head>
<body>
Hello World!<br/>
<%
//jsp中,使用小脚本嵌入java代码!
out.println("hi");//打印内容在客户端页面
System.out.println("hi");//打印内容在控制台
%>
</body>
</html>
3.1.2 输出脚本
语法:<%=Java表达式 %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp基本使用</title>
</head>
<body>
<p>
今天的日期是: <%= new java.util.Date() %>
</p>
</body>
</html>
3.3 JSP指令
JSP指令用来设置与整个JSP页面相关的属性。
| 指令 | 描述 |
|---|---|
| <%@ page ... %> | 定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等 |
| <%@ include ... %> | 包含其他文件 |
| <%@ taglib ... %> | 引入标签库的定义,可以是自定义标签 |
3.3.1 page指令
语法:<%@ page attribute1="value1" attribute2="value2" %>
Page指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。
| 属性 | 描述 |
|---|---|
| contentType | 指定当前JSP页面的MIME类型和字符编码格式 |
| errorPage | 指定当JSP页面发生异常时需要转向的错误处理页面 |
| isErrorPage | 指定当前页面是否可以作为另一个JSP页面的错误处理页面 |
| import | 导入要使用的Java类 |
| language | 定义JSP页面所用的脚本语言,默认是Java |
| session | 指定JSP页面是否使用session。默认为true立即创建,false为使用时创建 |
| pageEncoding | 指定JSP页面的解码格式 |
3.3.2 include指令
语法:<%@ include file = "被包含的JSP路径"%>
通过include指令来包含其他文件。
被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是当前JSP文件的一部分,会被同时编译执行(静态包含)。
<%@ include file="header.jsp"%>
...
...
<%@ include file="footer.jsp" %>
3.3.3 taglib指令
语法:<%@ taglib uri="外部标签库路径" prefix="前缀" %>
引入JSP的标准标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
3.4 动作标签
语法:<jsp:action_name attribute="value" />
动作标签指的是JSP页面在运行期间的命令
3.4.1 include
语法:<jsp:include page="相对 URL 地址" />
<jsp:include >动作元素会将外部文件输出结果包含在JSP中(动态包含)。
| 属性 | 描述 |
|---|---|
| page | 包含在页面中的相对URL地址。 |
<jsp:include page="index.jsp"/>
3.5 内置对象
由JSP自动创建的对象,可以直接使用
| 对象名 | 类型 | 说明 |
|---|---|---|
| request | javax.servlet.http.HttpServletRequest | |
| response | javax.servlet.http.HttpServletResponse | |
| session | javax.servlet.http.HttpSession | 由session=“true”开关 |
| application | javax.servlet.ServletContext | |
| config | javax.servlet.ServletConfig | |
| exception | java.lang.Throwable | 由isErrorPage=“false”开关 |
| out | javax.servlet.jsp.JspWriter | javax.servlet.jsp.JspWriter |
| pageContext | javax.servlet.jsp.PageContext | |
| page | java.lang.Object当前对象this | 当前servlet实例 |
3.5.1 四大域对象
JSP有四大作用域对象,存储数据和获取数据的方式一样,不同的是取值的范围有差别
pageContext (javax.servlet.jsp.PageContext) 当前JSP页面范围
request (javax.servlet.http.HttpServletRequest) 一次请求有效
session (javax.servlet.http.HttpSession) 一次会话有效(关闭浏览器失效)
application (javax.servlet.ServletContext) 整个Web应用有效(服务器重启或关闭失效)
3.5.2 pageContext 对象
pageContext对象是javax.servlet.jsp.PageContext 类的实例,拥有作用域,用来代表整个JSP页面。
当前页面的作用域对象,一旦跳转则失效
通过setAttribute("name",value);存储值
通过getAttribute("name");获取值
用于获取其他8个内置对象或者操作其他对象的作用域
3.5.4 pageContext操作其他内置对象的作用域
pageContext对象可以操作其他作用域存储和获取。
<%
//操作其他作用域存储
pageContext.setAttribute("name",value);//当前页面有效
pageContext.setAttribute("name",value,PageContext.REQUEST_SCOPE);//request作用域
pageContext.setAttribute("name",value,PageContext.SESSION_SCOPE);//session作用域
pageContext.setAttribute("name",value,PageContext.APPLICATION_SCOPE);//application作用域
%>
<%
//操作其他作用域获取
pageContext.getAttribute("name");//当前页面作用域
pageContext.getAttribute("name",PageContext.REQUEST_SCOPE);//request作用域
pageContext.getAttribute("name",PageContext.SESSION_SCOPE);//session作用域
pageContext.getAttribute("name",PageContext.APPLICATION_SCOPE);//application作用域
pageContext.findAttribute("name");//从pageContext,request ,session ,application依次查找
%>


浙公网安备 33010602011771号