一、JSP概述
JSP (Java Server Pages):在HTML中嵌入Java脚本代码,由于JSP将Java代码作为脚本融入到了HTML中,因此可以在HTML标签之间写Java代码,完成一些页面的动态效果。
1、JSP的执行原理
将Java脚本嵌入到JSP页面,应用服务器执行JSP,进而与数据库服务器交互,然后返回页面信息给客户端。
Web容器处理JSP文件请求需要经过的3个阶段:
- 翻译阶段
- 编译阶段
- 执行阶段
二、JSP的page命令
通过设置内部的多个属性定义整个页面的属性
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
语法:
<%@ page 属性1=“值1” 属性2=“值2” 属性N="值N" %>
常用属性:
属性 | 描述 | 默认值 |
---|---|---|
language | 指定JSP页面使用的脚本语言 | java |
import | 通过该属性来引用脚本语言中使用到的类文件 | 无 |
contentType | 用来指定JSP页面所采用的编码方式 | text/html,ISO-8859-1 |
三、JSP页面元素
- 静态内容:用于展示网页的静态内容
格式:HTML静态文本
<div>
<marquee>Hello,JSP!!</marquee>
</div>
- 指令:用于将相关功能给导入到JSP页面中,例如导包,设置字符编码等
格式:<%@ 内容 %>
<%@page import="java.text.DateFormat"%>
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
- 小脚本:用于将Java代码嵌入到HTML页面中
格式:<% Java代码 %>
<div>
今天是:
<%
// 小脚本方式 编写Java代码 短小简
// java代码
Date date = new Date();
// 格式化
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
%>
</div>
- 表达式:用于输出内容到页面
格式:<%=Java表达式%>
<!-- 输出内容 -->
<h1><%=df.format(date)%></h1>
- 声明:用于定义方法
格式:<%! 方法 %>
<div>
<!-- 指定输出某个信息 -->
<%!
// 定义一个java函数
Date formatStringToDate(String date) throws Exception {
Date result = null;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
result = df.parse(date);
return result;
}
%>
<h1><%=formatStringToDate("2000-01-01") %></h1>
</div>
- 注释:用于给代码做解释
格式:<!-- 注释内容:客户端可以看见 -->
格式:<%-- 注释内容:客户端无法看见 -->
<!-- HTML注释 在浏览器查看源码能显示 -->
<%-- JSP注释 在浏览器查看源码不能显示 --%>
四、使用JSP技术连接mysql对人员信息表的展示
- 创建JavaBean
在src下创建包,并创建Person类
package com.gaj.entity;
import java.io.Serializable;
/**
* 人员信息实体类
* JavaBean 实现了Serializable 串行化
* 有默认构造和get/set方法
* @author Jan
*
*/
public class Person implements Serializable {
/**
* 序列化版本号
*/
private static final long serialVersionUID = 8683321320857796803L;
private Integer pid; // 主键
private String pname; // 姓名
private String sex; // 性别
private Integer age; // 年龄
private String from; // 籍贯
public Integer getPid() {
return pid;
}
public void setPid(Integer pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
@Override
public String toString() {
return "Person [pid=" + pid + ", pname=" + pname + ", sex=" + sex + ", age=" + age + ", from=" + from + "]";
}
}
- 导入相关包到项目的/WebContent/WEB-INF/lib下
数据库驱动类:mysql-connector-java-5.1.6.jar
druid连接池:druid-1.1.9.jar
DButils工具类:commons-dbutils-1.6.jar - 编写连接数据的工具类
package com.gaj.utils;
import javax.sql.DataSource;
import com.alibaba.druid.pool.DruidDataSource;
/**
* 数据库连接工具类
* @author Jan
*
*/
public class JDBCUtil {
// 四大连接属性
private static final String CONN_DRIVER = "com.mysql.jdbc.Driver";
private static final String CONN_URL = "jdbc:mysql://127.0.0.1:3306/jdbcdb?characterEncoding=utf8";
private static final String CONN_USER = "root";
private static final String CONN_PASS = "root";
// 创建Druid数据源
private static DruidDataSource dataSource = new DruidDataSource();
// 赋值
static{
dataSource.setDriverClassName(CONN_DRIVER);
dataSource.setUrl(CONN_URL);
dataSource.setUsername(CONN_USER);
dataSource.setPassword(CONN_PASS);
}
// 返回数据源对象
public static DataSource getDataSource(){
return dataSource;
}
}
- JSP页面完成展示
Java代码在小脚本中编写
Java的值用表达式输出到页面
HTML代码在JSP文件中直接编写
<%@page import="java.util.List"%>
<%@page import="com.gaj.entity.Person"%>
<%@page import="org.apache.commons.dbutils.handlers.BeanListHandler"%>
<%@page import="org.apache.commons.dbutils.QueryRunner"%>
<%@page import="com.gaj.utils.JDBCUtil"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>人员信息数据展示</title>
</head>
<body>
<%
// 查看全部数据
// 1.创建sql执行对象
QueryRunner qr = new QueryRunner(JDBCUtil.getDataSource());
// 2.编写sql语句
String sql = "select id pid, name pname, sex, age, `from` from person;";
// 3.执行sql语句
List<Person> list = qr.query(sql, new BeanListHandler<Person>(Person.class));
%>
<table border="1">
<tr style="color: gray;">
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>籍贯</th>
</tr>
<%
for(Person person : list){
%>
<tr >
<td style="color:pink;"><%=person.getPid() %></td>
<td style="color:blue;"><%=person.getPname() %></td>
<td style="color:orange;"><%=person.getSex() %></td>
<td style="color:aqua;"><%=person.getAge() %></td>
<td style="color:fuchsia;"><%=person.getFrom() %></td>
</tr>
<%
}
%>
</table>
</body>
</html>