第2章 JSP基础语法
一.JSP概述
1. 概念
Java Server Pages,Java服务端页面
是一种动态的网页技术, 可以定义 HTML,JS,CSS等静态内容, 还可以的定义Java 动态内容
- 浏览器第一次访问
test.jsp
文件tomcat
会将test.jsp
文件转换为test_jsp.java
的一个Servlettest_jsp.java
文件会被翻译为test_jsp.class
文件tomcat
执行该字节码文件,向外提供响应
导入Tomcat源代码
二. JSP页面元素
脚本
JSP脚本用于在jsp页面中编写java程序
分类
1. 代码脚本
<%java语句%>,定义局部变量,if语句,for循环
<body>
<%--代码脚本案例-- java语句
变量, 常亮
if条件句
while循环, for循环
数组...
--%>
<%
int i =12;
if(i==12){
System.out.println("老师辛苦啦。。。");
}else {
System.out.println("也就那样吧。。。");
}
%>
<%
for(int j=0;j<10;j++){
System.out.println(j);
}
%>
</body>
总结:
- 代码脚本翻译之后在 _jspService()方法中
- 由于代码脚本翻译之后在_jspService()方法中,所以_jspService方法中的现有的对象可以直接使用
- 还可以由多个脚本块组成完成完整的java语句
- 代码脚本可以和表达式脚本一起使用,在jsp页面中输出数据
<html>
<head>
<title>代码脚本演示</title>
</head>
<body>
<%-- 1.代码脚本: 定义变量 --%>
<%
int num = 10;
String name = "张三";
%>
<%-- 2. 代码脚本 - if条件句--%>
<%
int i = 12;
if(i==12){
// 输出快捷键: sout
System.out.println("你好, 我是符合条件的");
}else{
System.out.println("啊哦,程序出问题了~~~");
}
%>
<%-- 3.代码脚本-for循环 --%>
<%
for(int j=0; j<10;j++){
%>
<%
System.out.println(j);//0 1 2...
%>
<%
}
%>
<%
String uname = request.getParameter("name");
System.out.println("用户请求的参数值是:"+uname);
%>
</body>
</html>
2. 声明脚本
<%! 声明java代码%>
作用:可以给jsp翻译出来的java类定义属性和方法甚至代码块以及内部类等…
<html>
<head>
<title>演示声明脚本</title>
</head>
<body>
<%--1.声明类属性--%>
<%!
private Integer id;
private String brand;
private static Map<String,Object> map;
%>
<%--2.声明静态代码块--%>
<%!
static{
map = new HashMap<String,Object>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
}
%>
<%--3.声明类方法--%>
<%!
public int abc(){return 12;}
%>
<%--4.声明内部类--%>
<%!
public static class A{
private Integer id = 12;
private String abc = "hello";
}
%>
</body>
</html>
总结:
声明脚本翻译的JspDemo2.java文件中, 声明脚本语句在JspDemo2_jsp类中
3.表达式脚本
<%=表达式%> : 用来输出 = 后边的表达式的值
作用: 在jsp页面中输出数据
<html>
<head>
<title>表达式脚本</title>
</head>
<body>
<%!
private static Map<String,Object> map;
%>
<%!
static{ map = new HashMap<String,Object>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
}
%>
<%--输出整型--%>
<%=12%> <br>
<%--输出浮点型--%>
<%=3.14%> <br>
<%--输出字符串型--%>
<%="我是字符串"%> <br>
<%--输出对象--%>
<%=map%>
<%--输出12: 输出到 js页面--%>
<%=12%> <br>
<%
// 输出12: 输出到控制台
System.out.println(12);
%>
</body>
</html>
总结:
- 所有表达式脚本都会被翻译到_jspService()方法中
- 表达式脚本都会被翻译成 out.print()输出到页面
- 由于表达式脚本翻译之后在_jspService()方法中,所以_jspService方法中的现有的对象可以直接使用
- 表达式脚本中的表达式不能以分号结尾
综合练习 - 品牌表格
<%@ page import="cn.tedu.java.Brand" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
List<Brand> brands = new ArrayList<Brand>();
brands.add(new Brand(1,"三只松鼠","三只松鼠",100,"三只松鼠,好吃不上火",1));
brands.add(new Brand(2,"优衣库","优衣库",200,"优衣库,服适人生",0));
brands.add(new Brand(3,"小米","小米科技有限公司",1000,"为发烧而生",1));
%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>脚本练习-品牌类表格</title>
</head>
<body>
<input type="button" value="新增"><br>
<hr>
<table border="1" cellspacing="0" width="800">
<tr>
<th>序号</th>
<th>品牌名称</th>
<th>企业名称</th>
<th>排序</th>
<th>品牌介绍</th>
<th>状态</th>
<th>操作</th>
</tr>
<%
// brands是一个集合
// 集合长度: 集合.size()
// 数组长度: 数组.length
for (int i=0;i<brands.size();i++){
//获取到brand中每一个对象
Brand brand = brands.get(i);
//System.out.println(brand); //输出brand对象
%>
<tr align="center">
<td><%=brand.getId()%></td>
<td><%=brand.getBrandName()%></td>
<td><%=brand.getCompanyName()%></td>
<td><%=brand.getOrdered()%></td>
<td><%=brand.getDescription()%></td>
<td><%=brand.getStatus()==1?"启用":"禁用"%></td>
<td><a href="#">修改</a> <a href="#">删除</a></td>
</tr>
<%
}
%>
</table>
</body>
</html>
JSP指令
写在:<%@…%> 用来设置jsp页面相关的属性,如网页的编码方式以及脚本语言
jsp页面的指令可以修改jsp页面中的一些重要的属性或者行为
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
language属性: 表示的jsp翻译后是什么语言文件, 暂时只支持java
contentType属性: 表示jsp返回的数据类型是什么, 也就是在源码中response.setContentType()的参数值
pageEncoding属性: 表示当前jsp页面本身的字符集
import属性: 跟java源码一样, 用来导入包,或者类
– 给out输出流使用的属性–
autoFlush属性: 设置out输出流缓冲流满了之后,是否自动刷新缓冲区; 默认值:true
buffer属性:设置out缓冲区的大小;默认8kb
<%@ page contentType="text/html;charset=UTF-8"
language="java"
pageEncoding="UTF-8"
buffer="1kb"
autoFlush="false"
%>
<html>
<head>
<title>JSP指令</title>
</head>
<body>
<%
Date date = new Date();
out.print(date);
%>
<%
for (int i=0;i<100;i++){
%>
<div>迪丽热巴真漂亮!!!</div>
<%
}
%>
</body>
</html>
errorPage属性: 表示错误发生后自动跳转的去的页面路径
取值: 发生错误要跳转的路径, 这个路径是以 / 开头, 表示请求的地址为 http://ip:port/工程路径
映射到代码的web目录
<%@ page contentType="text/html;charset=UTF-8" language="java"
errorPage="/error500.jsp"
%>
<html>
<head>
<title>errorPage</title>
</head>
<body>
<%
int i = 20/0;
%>
</body>
</html>
注释
html注释 : <!–html注释–> :在_jspService()方法中, 以out.write() 输出
JSP注释 : <%–JSP注释–%> :可以注释掉所有jsp页面中的代码
Java注释 : 直接翻译到_jspService()方法中
// 单行注释
/*
多行注释
*/