目录
1. JSP简介
JSP(Java Serve Pages),Java服务器页面,即运行在服务器端的页面。
JSP技术是一种动态网页技术,是在HTML文件中插入Java代码片段和JSP标签后形成的一种文件。
使用JSP开发的Web应用是跨平台的,即能在Linux上运行,也能在其他操作系统上运行。
2. JSP与Servlet
JSP的本质是Servlet。所不同的是:JSP是用于进行展示数据的Servlet,而普通Servlet是用于完成业务逻辑处理的。
由于Servlet是运行在单例多线程环境下的,因此JSP也是运行在单例多线程环境下的。
JSP规范:JSP规范中包含了如何将JSP页面翻译为Servlet。JSP页面中的HTML,CSS,JavaScript和普通文本,都会被翻译到out.write()中。而将JSP页面翻译为Servlet的这个过程,是由tomcat中内置的一个JSP翻译引擎所完成的,该翻译引擎遵循JSP规范。在第一次访问JSP页面时,翻译引擎会将JSP页面翻译为Servlet的.java文件,在将其编译为.class文件进行运行。
3. JSP代码片段
(1) Java代码块
Java代码块/JSP小脚本,是以<% %>括起来的部分,其中可以编写Java代码。
Java代码块的Java代码是被翻译到Servlet的_jspService()方法中,以_jspService()方法的Java语句的形式出现。
Java代码块可以放置在JSP页面的任意位置,执行顺序与放置顺序一致。
Java代码块是被翻译到Servlet的_jspService()方法中,因此Java代码块需要注意以下几点:
- 声明的变量不能添加访问控制符(因为这些JSP代码块是被翻译在Service方法中,方法中的变量无法添加访问修饰符)
- 不能不能方法(Java语法中,方法不能嵌套方法)
- 不能定义静态语句块(静态代码块中是放到类中的,不能放在方法中)
first.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
int amount = 6;
%>
<!DOCTYPE html>
<%
double price = 2.0;
%>
<html>
<head>
<meta charset="UTF-8">
<%
double count = 0;
%>
<title>Insert title here</title>
</head>
<body>
Hello,world!
<%
System.out.println("这是Java代码块");
%>
</body>
<%
count = amount * price;
System.out.println("count = " + count);
%>
</html>
(2) 声明语句块
① 声明语句块是被翻译到类中,处于_jspService()方法之外的,因此
- 声明语句块中的变量是成员变量,可以添加访问权限符
- 声明语句块可以定义方法
- 声明语句块可以定义静态语句块
② 声明语句块会出现线程安全问题
first.java
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%!
//声明语句块的变量是成员变量,可以添加权限访问符
private int a = 9;
//声明语句块可以定义方法
public void showData(double data){
System.out.println("data = " + data);
}
//声明语句块可以定义静态语句块
static{
System.out.println("我是静态语句块");
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
Hello,world!
<%
showData(a);
%>
</body>
</html>
(3) 表达式语句块
作用:将数据显示到客户端页面
first.java
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%!
//声明语句块的变量是成员变量,可以添加权限访问符
private int a = 9;
//声明语句块可以定义方法
public void showData(double data){
System.out.println("data = " + data);
}
//声明语句块可以定义静态语句块
static{
System.out.println("我是静态语句块");
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
Hello,world!
<br/>
a = <%= a %>
<%
showData(a);
%>
</body>
</html>