目录
一、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 对应 ServletConfig
4> 九大内置对象与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> 请求转发标签常用于一个入口页面,转发到其他功能资源。