JSP简介
为什么需要JSP
1.使用动态网页,可以动态输出网页内容、同用户进行交互、对网页内容进行在线更新
什么是JSP
JSP(Java Server Pages)是指:
在HTML中嵌入Java脚本语言
由应用服务器中的JSP引擎来编译和执行嵌入的Java脚本语言命令
然后将生成的整个页面信息返回给客户端
JSP 页面组成
合理、详细的注释有利于代码后期的维护和阅读
在JSP文件的编写过程中,共有三种注释方法:
HTML的注释方法:
<!-- html注释-->
JSP注释标记:
<%-- JSP注释--%>
在JSP脚本中使用注释:
<% //单行注释 %>
<% /*多行注释 */ %>
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>显式时间</title>
</head>
<!-- html注释 -->
<body>
<%-- jsp的注释 --%>
<% //用来写java代码 Alt+/ 补全
Date now=new Date();
/*
多行
注释
*/
%>
<%=now %>
</body>
</html>
page指令
在Java文件中,通过两种方式引入其它包中的类:
使用import关键字(优点:一次引入,处处使用)
使用完全限定的类名(即必须加上包名)
在JSP文件中,同样可以使用import关键字引入Java类文件,一旦引入,整个JSP文件都可用。
此时,需要使用到page指令。
语法
<%@ page 属性1="属性值" 属性2="属性值1,属性值2"…
属性n="属性值n"%>
属性 | 描述 | 默认值 |
---|---|---|
language | 指定JSP页面使用的脚本语言 | java |
import | 通过该属性来引用脚本语言中使用到的类文件 | 无 |
contentType | 用来指定JSP页面所采用的编码方式 | text/html, ISO-8859-1 |
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>page指令</title>
</head>
<body>
<%
SimpleDateFormat sm=new SimpleDateFormat("yyyy年MM月dd日");
Date now=new Date();
//java.lang 不需要引入
String str=sm.format(now);
%>
<h1>当前时间:<%=str %></h1>
</body>
</html>
JSP 脚本元素
JSP 脚本元素是用来嵌入Java代码的,主要用来实现页面的动态请求
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>page指令</title>
</head>
<body>
<%
SimpleDateFormat sm=new SimpleDateFormat("yyyy年MM月dd日");
Date now=new Date();
//java.lang 不需要引入
String str=sm.format(now);
//在页面输出内容
out.print(str);
%>
</body>
</html>
表达式
表达式是对数据的表示,系统将其作为一个值进行计算和显示
语法:
<% = Java表达式/变量 %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String names[]={"张三","李四","王五"};
double scores[]={68,99,88};
for(int i=0;i<3;i++){
%>
<h3><%=names[i] %>:<%=scores[i] %></h3>
<%} %>
</body>
</html>
JSP 执行过程
Web容器处理JSP文件请求需要经过3个阶段:
翻译阶段:JSP文件会被Web容器中的JSP引擎转换成Java源码
编译阶段:Java源码会被编译成可执行的字节码
执行阶段:容器接受了客户端的请求后,执行编译成字节码的JSP文件;处理完请求后,容器把生成的页面反馈给客户端进行显示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BRnzd7kT-1656926839163)(D:\课件\笔记\JSP简介.assets\image-20220704140549235.png)]
小脚本与表达式的综合应用
升级新闻发布系统,要求如下:
在系统的前台首页面上显示存储在数据库中的新闻一级标题
步骤
1、设计数据表结构
字段名称 | 字段说明 | 数据类型 | 大小 |
---|---|---|---|
Id | 序号 | int | 4 |
TitleName | 标题名称 | varchar | 50 |
Creator | 创建者 | varchar | 50 |
CreateTime | 创建时间 | datetime | 8 |
CREATE TABLE `news`.`FirstLevelTitle` (
`id` INT NOT NULL AUTO_INCREMENT,
`TitleName` VARCHAR (255),
`Creator` VARCHAR (255),
`CreateTime` DATETIME,
PRIMARY KEY (`id`)
);
2、确定存储对象:
类型:新闻一级标题(FirstLevelTitle )
属性:ID、名称、创建者、创建时间
package com.sk.entity;
import java.util.Date;
/**一级标题*/
public class FirstLevelTitle {
private int id;
private String titleName;
private String creator;
private Date createTime;
//..省略get/set
}
3、通过JDBC访问数据库
创建类FirstLeveTitleDbOpreation,用来查询数据库,并返回FirstLevelTitle对象的集合
在wib-inf中的lib文件夹引入 jdbc所需jar包
package com.sk.util;
import java.sql.*;
/**数据库连接工具*/
public class DbConn {
static {//加载驱动
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection conn;
/**获取连接*/
public static Connection getConn(){
String url="jdbc:mysql://localhost:3306/news?user=root&password=root&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false";
try {
conn= DriverManager.getConnection(url);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/**释放资源*/
public static void closeConn(Connection conn,Statement st,ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
try {
st.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**释放资源*/
public static void closeConn(Connection conn,PreparedStatement pst,ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
try {
pst.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
创建dao层
package com.sk.dao;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.sk.entity.FirstLevelTitle;
import com.sk.util.DbConn;
/**数据操作层*/
public class FirstLevelTitleDao {
private Connection conn;
private PreparedStatement pst;
private Statement st;
private ResultSet rs;
/**查看所有数据*/
public List<FirstLevelTitle> showAll(){
List<FirstLevelTitle> list=new ArrayList<FirstLevelTitle>();
String sql="SELECT id,TitleName,Creator,CreateTime FROM FirstLevelTitle";
conn=DbConn.getConn();
try {
st=conn.createStatement();
rs=st.executeQuery(sql);
while (rs.next()) {
int id=rs.getInt(1);
String titleName=rs.getString(2);
String creator=rs.getString(3);
Date createTime=rs.getDate(4);//java.sql.Date
java.util.Date createTimes=new java.util.Date(createTime.getTime());
FirstLevelTitle f=new FirstLevelTitle(id, titleName, creator, createTimes);
list.add(f);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
DbConn.closeConn(conn, st, rs);
}
return list;
}
}
4、编写JSP
在页面中逐条逐行输出新闻一级标题的名称(省略css)
<%@page import="com.sk.dao.FirstLevelTitleDao"%>
<%@page import="com.sk.entity.FirstLevelTitle"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>新闻首页</title>
</head>
<body>
<% //创建dao对象
FirstLevelTitleDao dao=new FirstLevelTitleDao();
List<FirstLevelTitle> list=dao.showAll();//获取标题列表
%>
<div>
<h2>新闻分类</h2>
<ul>
<% //循环输出
for(int i=0;i<list.size();i++){
FirstLevelTitle f=list.get(i);
out.print("<li>"+f.getTitleName()+"</li>");
}
%>
</ul>
</div>
</body>
</html>