Java Server Pages
根本是一个简化的Servlet设计。
在传统html文件中插入Java程序段和JSP标记,从而形成JSP文件。JSP = HTML + Java + JSP tag

jsp会将jsp转译为html展现给用户,但是这样的数据量一大之后就造成了服务器端的压力巨大,因此需要前后端分离,静态资源单独拉出来。

JSP vs Servlet

jsp主要是展示,Servlet是逻辑控制;
JSP有内置对象;
本质上JSP是Servlet的简化 。

image.png

第一个JSP程序

new Dynamic Web Project
target runtime — new runtime
选择相应的tomcat版本,勾选create a new local server

image.png

module version和tomcat版本有对应关系。
image.png
image.png
生成了两个目录:
image.png

WebContent是用于发布与应用的位置,在其下面新建一个jsp文件

image.png
把HTML文件改写为jsp,头部需要有如下代码:

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>

如果此时在body中写一个Hello World。那么去127.0.0.1:8080/HelloWeb/将看到如下信息:
image.png
此时如果body里写中文会有问题:
image.png
save as utf-8之后依然有问题
image.png
此时需要在头部文件中把charset和pageEncoding改一下

  1. <%@ page language="java" contentType="text/html; charset=utf-8"
  2. pageEncoding="utf-8"%>

再刷新网页就正常了。
image.png

动态项目的结构

Java Resources文件夹
包含项目的Java源代码

WebContent文件夹
放置所有web资源,包括HTML,jsp和图形文件
其下的WEB-NIF 包含所支持的Web资源,包含web.xml文件已经classes和lib目录。
/classes目录:java编译器产生的类文件输出目录,应用程序类载入器使用此目录中的类来装载运行时所需要的功能。
/lib:包含了Web应用程序所引用的支持性JAR文件,是综合的资源文件目录。
web.xml:标准Web应用程序部署描述符。

JSP程序的执行过程

jsp —> servlet程序 — >类文件

image.png

编译后的servlet文件【即.java文件和class文件】会放置在tomcat的work目录下的Catalina下的local host下的同名项目目录中
image.png

JSP基本语法

  1. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/1597025/1599296704047-dc7c6679-22d3-4b1b-bd83-aadf00879d18.png#height=408&id=Fpkw6&margin=%5Bobject%20Object%5D&name=image.png&originHeight=816&originWidth=1100&originalType=binary&ratio=1&size=296346&status=done&style=none&width=550)

JSP声明语法

一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。
语法格式:
<%! String str = “Hello World”; %>
只能定义成员变量以及方法,不能直接包含程序语句。

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <meta charset="ISO-8859-1">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <%!
  11. String str = "Hello World";
  12. String getStr(){
  13. return "Hello World2";
  14. }
  15. %>
  16. <hr>
  17. <% out.println(this.str); %>
  18. <hr>
  19. <%= this.getStr() %>
  20. </body>
  21. </html>

效果:
image.png

JSP程序脚本

包括变量的声明、表达式和程序逻辑;
声明的变量转换为_service方法中的变量,因而是局部变量;
语句块可以自由地与页面代码结合使用
<%代码片段%>

  1. <% int i =100;%>
  2. <% if (i>10)
  3. {%>
  4. <h1> Hi~ i>10 </h1>
  5. <%}else{%>
  6. <h1> Hello~ i<=10 </h1>
  7. <%}
  8. %>

JSP脚本注释

语法格式:
<%— 代码 —%>
%和—之间没有 空格,在jsp中的代码块中,java的注释语法依然有效,//和/**/

JSP内容输出表达式

可以包含任何符合Java语言规范的表达式
可以对变量的值和方法进行输出,不需要分号
<%=变量名/方法名 %>

  1. <%@ page language="java" contentType="text/html; charset=utf-8"
  2. pageEncoding="utf-8"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <meta charset="ISO-8859-1">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <%! int i=10; %>
  11. i的值为:<%=i %>
  12. <br>
  13. i的值是:<%out.println(i); %>//这个是使用系统的方法
  14. </body>
  15. </html>

JSP指令

page指令

定义页面的依赖属性,比如脚本语言、error页面、缓存需求等

包引入语法

语法格式:
<%@page import =”java.util.Date” %>
<%@page import =”java.io.“ %>
不同的包引用可以被都好分开,作为一个整体字符串
<%@page import =”java.util.Date,java.io.
“ %>

  1. <%@page import="java.text.SimpleDateFormat"%>
  2. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  3. pageEncoding="ISO-8859-1"%>
  4. <%@ page import = "java.util.Date,java.io.*" %>
  5. <!DOCTYPE html>
  6. <html>
  7. <head>
  8. <meta charset="ISO-8859-1">
  9. <title>Insert title here</title>
  10. </head>
  11. <body>
  12. <%!
  13. public String getNow(){
  14. SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
  15. Date currentTime = new Date();
  16. return formatter.format(currentTime);
  17. }
  18. %>
  19. <%=getNow() %>
  20. </body>
  21. </html>

include指令

包含其他文件

taglib指令

引入标签库的定义

相邻两个jsp页面传递数据的时候,通过url参数的方式来传递参数
规则:资源?key=value&xxx

JSP 内置对象

一共有9个。
image.png
image.png