第一章 JSP简介

JSP简介

为什么需要JSP

1.使用动态网页,可以动态输出网页内容、同用户进行交互、对网页内容进行在线更新

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jDmZJXsQ-1656926839161)(D:\课件\笔记\JSP简介.assets\image-20220704081920976.png)]

什么是JSP

JSP(Java Server Pages)是指:
在HTML中嵌入Java脚本语言
由应用服务器中的JSP引擎来编译和执行嵌入的Java脚本语言命令
然后将生成的整个页面信息返回给客户端

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TeIb0WkX-1656926839162)(D:\课件\笔记\JSP简介.assets\image-20220704083850756.png)]

JSP 页面组成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZwMKNMrt-1656926839162)(D:\课件\笔记\JSP简介.assets\image-20220704084018308.png)]

合理、详细的注释有利于代码后期的维护和阅读
在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代码的,主要用来实现页面的动态请求

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xr881bdu-1656926839162)(D:\课件\笔记\JSP简介.assets\image-20220704101147271.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xHYml8Rf-1656926839163)(D:\课件\笔记\JSP简介.assets\image-20220704101206900.png)]

<%@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表达式/变量 %>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nLRN3BIl-1656926839163)(D:\课件\笔记\JSP简介.assets\image-20220704103436172.png)]

<%@ 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)]

小脚本与表达式的综合应用

升级新闻发布系统,要求如下:
在系统的前台首页面上显示存储在数据库中的新闻一级标题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5cAdtYdL-1656926839163)(D:\课件\笔记\JSP简介.assets\image-20220704140931390.png)]

步骤

1、设计数据表结构
字段名称字段说明数据类型大小
Id序号int4
TitleName标题名称varchar50
Creator创建者varchar50
CreateTime创建时间datetime8
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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斑马有点困

原创不易,多谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值