目录
一、JSP快速入门
1.基本介绍 :
2.运行原理 :
二、JSP语法
1.page指令 :
2.声明脚本 :
3.表达式脚本 :
4.Java代码脚本 :
5.JSP注释 :
三、JSP对象
1.九大内置对象 :
2.四大域对象 :
1° 基本介绍
2° 应用实例
3.关于请求转发标签 :
一、JSP快速入门
1.基本介绍 :
(1) JSP 全称Java Server Pages,即Java服务器页面;JSP是一种基于Servlet的服务器渲染技术,可以理解为JSP就是对Servlet的包装。
(2) HTML只能为用户提供静态数据,而JSP允许在页面中嵌套 java代码,为用户提供动态数据。注意:JSP页面不能像HTML页面一样直接通过浏览器运行, 而必须先启动Tomcat,再通过浏览器地址栏的URL进行访问。
(3) Servlet很难对数据进行排版,而JSP在用Java代码产生动态数据的同时,也很容易对数据进行排版。
2.运行原理 :
(1) JSP页面本质是一个Servlet程序(即本质就是Java程序),性能与Java关联。
(2) 第一次访问JSP时,Tomcat服务器会把JSP页面先解析成.java的源文件,并进一步编译成.class的字节码文件,实际执行的就是.class字节码程序。eg : index.jsp ---> index_jsp.java 和 index_jsp.class。
如下图所示 :
二、JSP语法
1.page指令 :
1° language 表示JSP解析后是什么语言文件, 目前只支持java语言。
2° contentType 表示JSP返回的数据类型,对应源码中 response.setContentType()中的参数值。
3° pageEncoding 属性,表示当前JSP页面文件本身的字符集。
4° import 属性的使用与java源代码中类似,可用于导包,导类。
2.声明脚本 :
声明脚本的格式是 : <%! java声明 %>;可以用Java代码在声明脚本中定义JSP需要的属性、方法、静态代码块和内部类等,即给该JSP文件对应的java类定义成员。
demo.jsp代码如下 :
<%--
User : Cyan_RA9
Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JSP demo</title>
</head>
<body>
<h1>demo.jsp</h1>
<%!
private String name;
private int age;
private String gender;
private static String color;
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public String getGender() {
return this.gender;
}
static {
color = "Cyan";
}
%>
</body>
</html>
对应生成的.java文件如下图所示 :
3.表达式脚本 :
(1) 表达式脚本的格式是:<%=表达式%>
(2) 表达式脚本的作用是:在JSP页面上输出数据
(3) 表达式脚本的注意事项 : 表达式不能以分号结束。
expression.jsp代码如下 :
<%--
User : Cyan_RA9
Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Expression</title>
</head>
<body>
<%
String name = "Cyan_RA9";
%>
public : <%=141 + 130%> <br/>
name : <%=name%> <br/>
job : <%="Java Full Stack Developer"%>
</body>
</html>
运行效果 :
4.Java代码脚本 :
1° 代码脚本的语法格式 :<% java 代码%>。
2° 代码脚本的作用 : 在JSP页面中使用Java代码完成业务需求。
3° 可以由多个代码脚本块组合成一个完整的Java语句,即允许有多个Java代码脚本。
4° 代码脚本还可以和表达式脚本一起组合使用,在JSP页面上输出数据。
首先定义一个JavaBean类,Student类代码如下 :
package script;
/**
* @author : Cyan_RA9
* @version : 21.0
*/
public class Student {
private String name;
private int age;
private String gender;
public Student() {
}
public Student(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
'}';
}
}
在javacode.jsp页面中,利用List集合存入几个Student对象的信息。
javacode.jsp代码如下 :
\<%--
User : Cyan_RA9
Version : 21.0
--%>
<%@ page import="java.util.ArrayList" %>
<%@ page import="script.Student" %> <%--自动导包--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Java Code script</title>
</head>
<body>
<%
ArrayList<Student> students = new ArrayList<>();
students.add(new Student("Cyan", 21, "male"));
students.add(new Student("Five", 22, "female"));
students.add(new Student("Ice", 20, "male"));
%>
<table bgcolor="#e0ffff" border="2px" bordercolor="pink" cellspacing="0" width="300px">
<tr>
<th>Name</th>
<th>Age</th>
<th>Gender</th>
</tr>
<%
for (int i = 0; i < students.size(); i++) {
Student student = students.get(i);
%>
<tr>
<td><%=student.getName()%></td>
<td><%=student.getAge()%></td>
<td><%=student.getGender()%></td>
</tr>
<%
}
%>
</table>
</body>
</html>
运行结果 :
5.JSP注释 :
JSP中不仅支持HTML格式的注释,还支持自己特有的注释格式 : <%-- --%>。
此外,在JSP的Java代码脚本中,也可以使用Java的行注释和段注释。
note.jsp代码如下 :
<%--
User : Cyan_RA9
Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Note demo</title>
</head>
<body>
<!-- 这是HTML格式的注释√ -->
<%
//这是Java代码的行注释;
/*
这是Java代码的段注释。
*/
%>
<%-- 这是JSP特有的注释格式√ --%>
</body>
</html>
三、JSP对象
1.九大内置对象 :
1> JSP 内置对象(指已经创建好的对象, 可以直接使用[inbuild]),即Tomcat在解析JSP页面为Servlet 后,内部提供的九大对象,叫内置对象。
2> 内置对象可以直接使用,不需要手动定义。3> 九大内置对象如下——
① out 向客户端输出数据,out.println("");② request 处理来自客户端的HTTP请求③ response 与回送的HTTP响应相关④ session 会话对象⑤ application 对应 ServletContext⑥ pageContext JSP页面的上下文,是一个域对象,可以使用setAttribue()方法,但 作用范围只是本页面⑦ exception 异常对象 , getMessage()⑧ page 代表JSP 这个实例本身⑨ config 对应 ServletConfig4> 九大内置对象与Servlet的关系图——
2.四大域对象 :
1° 基本介绍
1> pageContext域对象,存放的数据只能在当前页面使用。
2> request域对象,存放的数据在一次Request请求中有效(eg : 请求转发)。
3> session域对象,存放的数据在一次会话有效(sessionId)。
4> application域对象,存放的数据在整个Web应用运行期间有效, 范围更大。
作用域 : pageContext < request < session < application.
2° 应用实例
scope.jsp代码如下 :
<%--
User : Cyan_RA9
Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Scope</title>
</head>
<body>
<%-- 由于四个域对象是不同的对象,因此允许出现相同的name。 --%>
<%
pageContext.setAttribute("color", "cyan");
request.setAttribute("color", "pink");
session.setAttribute("color", "cornflower");
application.setAttribute("color", "lightblue");
//请求转发
// RequestDispatcher requestDispatcher = request.getRequestDispatcher("scope2.jsp");
// requestDispatcher.forward(request, response);
//请求重定向
ServletContext servletContext = config.getServletContext();
String contextPath = servletContext.getContextPath();
response.sendRedirect(contextPath + "/scope2.jsp");
%>
<h1>四个域对象,在本页面获取数据的情况</h1>
pageContext-color : <%=pageContext.getAttribute("color")%> <br/>
request-color : <%=request.getAttribute("color")%> <br/>
session-color : <%=session.getAttribute("color")%> <br/>
application-color : <%=application.getAttribute("color")%> <hr/>
</body>
</html>
运行效果 : (本页面访问域对象)
scope2.jsp代码如下 : (外页面访问域对象)
<%--
User : Cyan_RA9
Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>scope2</title>
</head>
<body>
<h1>在scope2页面获取数据的情况:</h1>
pageContext-color : <%=pageContext.getAttribute("color")%> <br/>
request-color : <%=request.getAttribute("color")%> <br/>
session-color : <%=session.getAttribute("color")%> <br/>
application-color : <%=application.getAttribute("color")%> <hr/>
</body>
</html>
运行效果 : (scope请求转发)
运行效果:(scope请求重定向)
3.关于请求转发标签 :
<jsp:forward page="URL"></jsp:forward>
注意 : 1> 此处的URL是在服务器端解析的。
2> 请求转发标签常用于一个入口页面,转发到其他功能资源。