• 第一章 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注释-->
    
    • 1

    JSP注释标记:

    <%-- JSP注释--%>
    
    • 1

    在JSP脚本中使用注释:

    <% //单行注释 %> 
    <%  /*多行注释 */ %>
    
    • 1
    • 2
    <%@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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    page指令

    在Java文件中,通过两种方式引入其它包中的类:
    使用import关键字(优点:一次引入,处处使用)
    使用完全限定的类名(即必须加上包名)

    在JSP文件中,同样可以使用import关键字引入Java类文件,一旦引入,整个JSP文件都可用。
    此时,需要使用到page指令。

    语法

    <%@ page 属性1="属性值" 属性2="属性值1,属性值2"… 
                       属性n="属性值n"%>
    
    
    • 1
    • 2
    • 3
    属性描述默认值
    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    表达式

    表达式是对数据的表示,系统将其作为一个值进行计算和显示
    语法:

    <% = Java表达式/变量 %>
    
    • 1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    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`)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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
    	
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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();
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    创建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;
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
  • 相关阅读:
    Matlab论文插图绘制模板第115期—带Latex公式的图
    计算机网络 网络原理之Http
    VsCode主题推荐
    JVM简介
    前端培训丁鹿学堂:vue的性能优化(一)
    Git 操作流程与命令汇总
    高精度的AI图像编辑: EditGAN
    AI教我做科研系列——超级对话模型ChatGPT教我一步步如何如何生成知识图谱
    多功能投票系统(ThinkPHP+FastAdmin+Uniapp)
    SCM供应链管理的背景及意义
  • 原文地址:https://blog.csdn.net/qq_36827283/article/details/125604941