Java Server Pages
根本是一个简化的Servlet设计。
在传统html文件中插入Java程序段和JSP标记,从而形成JSP文件。JSP = HTML + Java + JSP tag
jsp会将jsp转译为html展现给用户,但是这样的数据量一大之后就造成了服务器端的压力巨大,因此需要前后端分离,静态资源单独拉出来。
JSP vs Servlet
jsp主要是展示,Servlet是逻辑控制;
JSP有内置对象;
本质上JSP是Servlet的简化 。
第一个JSP程序
new Dynamic Web Project
target runtime — new runtime
选择相应的tomcat版本,勾选create a new local server
module version和tomcat版本有对应关系。
生成了两个目录:
WebContent是用于发布与应用的位置,在其下面新建一个jsp文件
把HTML文件改写为jsp,头部需要有如下代码:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
如果此时在body中写一个Hello World。那么去127.0.0.1:8080/HelloWeb/将看到如下信息:
此时如果body里写中文会有问题:
save as utf-8之后依然有问题
此时需要在头部文件中把charset和pageEncoding改一下
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
动态项目的结构
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程序 — >类文件
编译后的servlet文件【即.java文件和class文件】会放置在tomcat的work目录下的Catalina下的local host下的同名项目目录中
JSP基本语法
![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”; %>
只能定义成员变量以及方法,不能直接包含程序语句。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%!
String str = "Hello World";
String getStr(){
return "Hello World2";
}
%>
<hr>
<% out.println(this.str); %>
<hr>
<%= this.getStr() %>
</body>
</html>
JSP程序脚本
包括变量的声明、表达式和程序逻辑;
声明的变量转换为_service方法中的变量,因而是局部变量;
语句块可以自由地与页面代码结合使用
<%代码片段%>
<% int i =100;%>
<% if (i>10)
{%>
<h1> Hi~ i>10 </h1>
<%}else{%>
<h1> Hello~ i<=10 </h1>
<%}
%>
JSP脚本注释
语法格式:
<%— 代码 —%>
%和—之间没有 空格,在jsp中的代码块中,java的注释语法依然有效,//和/**/
JSP内容输出表达式
可以包含任何符合Java语言规范的表达式
可以对变量的值和方法进行输出,不需要分号
<%=变量名/方法名 %>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%! int i=10; %>
i的值为:<%=i %>
<br>
i的值是:<%out.println(i); %>//这个是使用系统的方法
</body>
</html>
JSP指令
page指令
定义页面的依赖属性,比如脚本语言、error页面、缓存需求等
包引入语法
语法格式:
<%@page import =”java.util.Date” %>
<%@page import =”java.io.“ %>
不同的包引用可以被都好分开,作为一个整体字符串
<%@page import =”java.util.Date,java.io.“ %>
<%@page import="java.text.SimpleDateFormat"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page import = "java.util.Date,java.io.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%!
public String getNow(){
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
Date currentTime = new Date();
return formatter.format(currentTime);
}
%>
<%=getNow() %>
</body>
</html>
include指令
包含其他文件
taglib指令
相邻两个jsp页面传递数据的时候,通过url参数的方式来传递参数
规则:资源?key=value&xxx
JSP 内置对象
一共有9个。