收藏 分享(赏)

北大青鸟JSP教程大全(中).ppt

上传人:hskm5268 文档编号:4775941 上传时间:2019-01-12 格式:PPT 页数:65 大小:9.07MB
下载 相关 举报
北大青鸟JSP教程大全(中).ppt_第1页
第1页 / 共65页
北大青鸟JSP教程大全(中).ppt_第2页
第2页 / 共65页
北大青鸟JSP教程大全(中).ppt_第3页
第3页 / 共65页
北大青鸟JSP教程大全(中).ppt_第4页
第4页 / 共65页
北大青鸟JSP教程大全(中).ppt_第5页
第5页 / 共65页
点击查看更多>>
资源描述

1、JDBC程序的工作模板,try Class.forName(JDBC驱动类); catch (ClassNotFoundException e) System.out.println(“无法找到驱动类“); try Connection con=DriverManager.getConnection(JDBC URL,数据库用户名,密码);Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery(“SELECT a, b, c FROM Table1“);while (rs.next() int x = rs

2、.getInt(“a“);String s = rs.getString(“b“);float f = rs.getFloat(“c“);con.close(); catch (SQLException e) e.printStackTrace(); ,获得数据库连接,发送Sql语句,处理结果,注册JDBC驱动,JDBC URL用来标识数据库,必须处理的异常,释放资源,必须处理的异常,JDBC驱动 5-1,JDBC驱动由数据库厂商提供 在个人开发与测试中,可以使用JDBC-ODBC桥连方式 在生产型开发中,推荐使用纯Java驱动方式,DB Server,DB Server,JDBC API,J

3、DBC Driver Manager,纯Java 驱动,JDBCODBC桥,Java 应用程序,ODBC,JDBC驱动 5-2,桥连 将对JDBC API的调用,转换为对另一组数据库连接API的调用 优点:可以访问所有ODBC可以访问的数据库 缺点:执行效率低、功能不够强大,JDBC-ODBC桥,Java 应用程序,JDBC API,ODBC API,ODBC层,DB Server,JDBC驱动 5-3,使用JDBC-ODBC进行桥连 1、在控制面板ODBC数据源系统DSN中配置数据源 2、编程,通过桥连方式与数据库建立连接,-语法-Class.forName(“sun.jdbc.odbc.J

4、dbcOdbcDriver“); Connection con =DriverManager.getConnection(“jdbc:odbc:news“,“sa“,“sa“);,JDBC-ODBC桥驱动类的完全限定类名,数据源名称,演示:配置ODBC数据源,JDBC驱动 5-4,纯Java驱动 由JDBC驱动直接访问数据库 优点:100% Java,快又可跨平台 缺点:访问不同的数据库需要下载专用的JDBC驱动,JDBC 驱动,Java 应用程序,JDBC API,DB Server,JDBC驱动 5-5,使用纯Java驱动方式进行直连 1、下载数据库厂商提供的驱动程序包 2、将驱动程序包引

5、入工程中 3、编程,通过纯Java驱动方式与数据库建立连接,-语法-String URL=“jdbc:microsoft:sqlserver:/localhost:1433; DatabaseName=news“;Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver“); Connection con = DriverManager.getConnection(URL,“sa“,“sa“);,sql server数据库驱动类的完全限定类名,演示:在工程中引入JDBC驱动程序包,数据库名称,小结 1,JDBC桥连与纯Java驱动两

6、种方式的优缺点分别是什么?JDBC URL的作用是什么?,创建数据表:FirstLevelTitle,JDBC应用,要求对新闻标题进行管理: 1、新闻标题存储在Sql Server 2000中 2、通过JDBC对新闻标题进行增、删、改、查操作,操作步骤,使用Statement插入数据,使用PreparedStatement增、删、改、查数据,1,2,使用Statement插入数据 2-1,使用桥连方式向FirstLevelTitle表中插入一条记录,代码片断 public static void main(String args) Connection con = null; Statemen

7、t statement = null; try String strSql = “insert into FirstLevelTitle values(1,军事,网管,getdate()“; try Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); catch (ClassNotFoundException e) System.out.println(“无法找到驱动类“); con = DriverManager.getConnection(“jdbc:odbc:news“,“sa“,“sa“); statement = con.createStat

8、ement(); statement.executeUpdate(strSql); catch (SQLException sqlE) sqlE.printStackTrace(); finally closeStatement(statement); closeConnection(con); ,建立连接,执行sql语句,数据库连接使用完毕,及时释放,载入JDBC-ODBC桥驱动类,异常处理,异常处理,完整代码实现,使用Statement插入数据 2-2,使用纯Java驱动方式向FirstLevelTitle表中 插入一条记录,代码片断 public static void main(Str

9、ing args) Connection con = null; Statement statement = null; try String strSql = “insert into FirstLevelTitle values(1,军事,网管,getdate()“; try Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver“); catch (ClassNotFoundException e) System.out.println(“无法找到驱动类“); con = DriverManager.getConnectio

10、n(“jdbc:microsoft:sqlserver:/localhost:1433;“+“DatabaseName=news“,“sa“,“sa“); statement = con.createStatement(); statement.executeUpdate(strSql); catch (SQLException sqlE) sqlE.printStackTrace(); finally /释放连接 ,载入sql server数据库驱动类,建立连接,执行sql语句,完整代码实现,小结 2,在使用纯Java驱动方式进行数据库连接时,如果程序在运行时抛出异常: java.sql.S

11、QLException: No suitable driver found for jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=news 那么出错的原因是什么?如何解决?请单独建立一个类ConnectionManager,专门负责建立数据库连接、以及关闭连接,并思考这样做带来的好处是什么,找不到合适的驱动类,原因:没有把数据库驱动包引入工程,好处在于:既便于管理、又可以提高代码的复用性,完整代码实现,PreparedStatement,PreparedStatement接口 (预编译的 SQL 语句),Statement 接口,当

12、 SQL 语句将运行多次时,尽量使用PreparedStatement,以便提高运行效率,PreparedStatement 接口继承 Statement接口 PreparedStatement比普通的Statement对象使用起来更加灵活,更有效率,使用PreparedStatement插入数据,public class NewsFirstTitleDB2 public static void main(String args) Connection con = null; PreparedStatement pStatement = null; try SimpleDateFormat h

13、mFromat = new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss“); con = ConnectionManager.getConnection(); String strSql = “insert into FirstLevelTitle values(?,?,?,?)“; pStatement = con.prepareStatement(strSql); pStatement.setInt(1, 1); pStatement.setString(2, “军事“); pStatement.setString(3, “管理员“); pStatement

14、.setString(4, hmFromat.format(new Date(); pStatement.executeUpdate(); catch (SQLException sqlE) sqlE.printStackTrace(); finally ConnectionManager.closeStatement(pStatement); ConnectionManager.closeConnection(con); ,参数化的查询语句,设置每个 ? 参数的值,列号从1开始,执行sql语句,使用PreparedStatement删除数据,public class NewsFirstTit

15、leDB3 public static void main(String args) Connection con = null;PreparedStatement pStatement = null;try con = ConnectionManager.getConnection(); String strSql = “delete from FirstLevelTitle where TitleName = ?“; pStatement = con.prepareStatement(strSql); pStatement.setString(1, “军事“); int row = pSt

16、atement.executeUpdate(); System.out.println(“成功删除了“+row+“行数据!“); catch (SQLException sqlE) sqlE.printStackTrace(); finally ConnectionManager.closeStatement(pStatement); ConnectionManager.closeConnection(con); ,返回删除记录的行数,使用PreparedStatement更新数据,public class NewsFirstTitleDB4 public static void main(S

17、tring args) Connection con = null; PreparedStatement pStatement = null; try con = ConnectionManager.getConnection(); String strSql = “update FirstLevelTitle set Creator = ? where Id = ?“; pStatement = con.prepareStatement(strSql); pStatement.setString(1, “编辑“); pStatement.setInt(2, 1); int row = pSt

18、atement.executeUpdate(); System.out.println(“成功更新了“+row+“行数据!“); catch (SQLException sqlE) sqlE.printStackTrace(); finally ConnectionManager.closeStatement(pStatement); ConnectionManager.closeConnection(con); ,返回更新记录的行数,小结 3,使用PreparedStatement语句执行如下操作: 删除表FirstLevelTitle中所有Id小于10的记录,并在控制台输出删除记录的行数,

19、完整代码实现,使用PreparedStatement查询数据 2-1,public class NewsFirstTitleDB5 public static void main(String args) int id = 0; Connection con = null; PreparedStatement pstmt = null; ResultSet resSet = null; try con = ConnectionManager.getConnection(); String sqlStr = “select max(id) from FirstLevelTitle “; pstm

20、t = con.prepareStatement(sqlStr); resSet = pstmt.executeQuery(); if (resSet.next() id = resSet.getInt(1); catch (Exception e) e.printStackTrace(); finally ConnectionManager.closeResultSet(resSet); ConnectionManager.closeStatement(pstmt); ConnectionManager.closeConnection(con); System.out.println(“新的

21、一级新闻标题的Id为:“ + (id + 1); ,查询新闻一级标题的Id的最大值,关闭结果集、语句、以及连接,对新闻一级标题Id的最大值加一,作为新的一级标题的Id,获取数据,列号从1开始,返回结果集,从数据库中取出所有的新闻一级标题,代码片断 public static List getAllFirstLevelTitleList() /省略部分变量声明语句 ArrayList list = new ArrayList(); try dbConnection = ConnectionManager.getConnection(); String strSql = “select * fro

22、m FirstLevelTitle order by CreateTime desc“; pStatement = dbConnection.prepareStatement(strSql); res = pStatement.executeQuery(); while (res.next() int id = res.getInt(“id“); String title = res.getString(“TitleName“); String creator = res.getString(“Creator“); Date time = res.getDate (“CreateTime”);

23、 FirstLevelTitle fTitle = new FirstLevelTitle(id, title,creator, time); list.add(fTitle); /省略catch、finally子句 return list; ,使用PreparedStatement查询数据 2-2,查询新闻一级标题,创建标题对象,并添加入ArrayList中,返回结果集,完整代码实现,总结,使用PreparedStatement语句执行如下操作: 取出表FirstLevelTitle中Id的最大值 向表FirstLevelTitle中插入一行新记录,其中Id值为原Id最大值加一,完整代码实现

24、,Thank you,JSP简介,第四章,回顾,JDBC的英文全称是什么? JDBC的主要作用是什么 ? PreparedStatement 与 Statement相比,具有什么优势?,预习检查,为什么第一次请求JSP页面时,响应速度比较慢? JSP文件中,有几种注释方法?格式是什么?,本章任务,为新闻发布系统创建JSP页面 能够在Eclipse中部署运行该新闻发布系统,掌握JSP的定义、作用、以及页面组成 掌握如何创建JSP页面 掌握JSP页面的执行过程,本章目标,为什么需要JSP 2-1,为什么需要基于B/S技术的动态网页?B/S技术的特点是什么?,使用动态网页,可以动态输出网页内容、同用

25、户进行交互、对网页内容进行在线更新,应用 服务器,IE,IE,解释执行 HTML文件,从服务器端检索到的信息,返回响应,客户端的请求信息,发送请求,运行JSP等服务器端脚本程序,1,用户输入,2,3,4,数据库 服务器,为什么需要JSP 2-2,如何在浏览器上动态输出当前日期?,输出当前日期你好,ACCP! 今天是,显然,无法通过静态HTML完成这个效果,试一试JSP,看看是否可行,运行结果,什么是JSP,JSP(Java Server Pages)是指: 在HTML中嵌入Java脚本语言 由应用服务器中的JSP引擎来编译和执行嵌入的Java脚本语言命令 然后将生成的整个页面信息返回给客户端,

26、JSP页面,数据库 服务器,应用 服务器,客户端,Java脚本语言,1,2,3,4,JSP 页面组成 4-1,JSP 页面的元素包括:,静态内容,指 令,表达式,小脚本,HTML静态文本,以“ ” 结束。 比如:,声 明,标准动作,以“ ” 结束 比如:,注释,JSP 页面组成 4-2,输出当前日期你好,ACCP!今天是,指令,静态内容,小脚本,表达式,注释,JSP 页面组成 4-3,在浏览器上观看运行结果,查看网页源文件,可以通过源代码查看到HTML注释的内容,所有注释内容都不可见,JSP 页面组成 4-4,合理、详细的注释有利于代码后期的维护和阅读 在JSP文件的编写过程中,共有三种注释方

27、法: HTML的注释方法: JSP注释标记: 在JSP脚本中使用注释:,缺点:不安全,加大网络传输负担,小结 1,请编写一个JSP页面exercise1.jsp,要求: 至少包含三种注释,完整代码实现,创建新闻发布系统的JSP页面 5-1,回忆第一章内容,请说明开发JSP动态网站的几个步骤,创建Web项目,开发步骤,设计Web 项目的目录结构,编写代码 (创建 JSP),部署、运行,本章将从这里开始,带领大家创建新闻发布系统的JSP页面,创建新闻发布系统的JSP页面 5-2,设计Web项目的目录结构: 创建目录ch04:存放JSP页面创建目录CSS:存放样式表文件创建目录images:存放图片

28、,创建新闻发布系统的JSP页面 5-3,使用JSP模板向导创建JSP页面,共有三步:,1,2,3,右键点击“WebRoot”下的“ch04”,从右键菜单中选择:新建其他,在新弹出的窗口中,选择“Web”下的“JSP”,点击“下一步”,在下一个新弹出的窗口中,输入文件名index.jsp,点击“完成”,演示:使用JSP模板向导创建JSP页面,创建新闻发布系统的JSP页面 5-4,手工创建JSP页面,共有两步:,1,2,右键点击“WebRoot”下的“ch04”,选择:新建文件,在新弹出的窗口中,输入文件名index.jsp,点击“完成”,演示:手工创建JSP页面,创建新闻发布系统的JSP页面 5

29、-5,采用你认为最方便的方式,把静态新闻发布系统的所有页面转换为JSP页面,并部署运行,演示:页面转换、并部署运行,生活中的欢迎页面,通常情况下,访问某个网站时,我们只需要知道网站的域名就可以了。 比如: ,现在看到的就是新浪的首页面,如何设置欢迎页面,欢迎页面,就是web应用的默认访问页面 在配置文件web.xml中设置欢迎页面,index.jsp,假定在web应用(news)下存在一个index.jsp页面, 输入http:/localhost:8080/news地址时,web容器会默认调用index.jsp页面,JSP 执行过程 2-1,3,执行,2,翻译,编译,1,请求,响应,Web容

30、器处理JSP文件请求需要经过3个阶段: 翻译阶段:JSP文件会被Web容器中的JSP引擎转换成Java源码 编译阶段:Java源码会被编译成可执行的字节码 执行阶段:容器接受了客户端的请求后,执行编译成字节码的JSP文件;处理完请求后,容器把生成的页面反馈给客户端进行显示,应用服务器,客户端,JSP文件,.java,.class,JSP 执行过程 2-2,执行,第二次请求,响应,第一次请求之后,Web容器可以重用已经编译好的字节码文件,应用服务器,客户端,.class,注意:如果对JSP文件进行了修改,Web容器会重新对JSP文件进行翻译和编译,演示:JSP页面修改前后的响应速度,JSP运行环

31、境,Web容器(如:Tomcat)提供JSP引擎,负责JSP文件的执行,提供JSP的运行时环境 在Eclipse中部署Web应用,等同于在Web容器中部署Web应用,与Eclipse中Web应用的目录结构一模一样,小结 2,为什么JSP页面在第一次请求时会比较慢,而之后对同样的JSP页面的请求会非常快?,总结,欢迎登录新闻发布系统 ,在运行welcome.jsp时,会出现什么现象?如何改正?,出现中文乱码, 把字符集改为:GBK,WEB-INF文件夹中的内容无法对外发布, 把images文件夹拖至WebRoot文件夹下,Thank you,JSP指令和脚本元素,第五章,回顾,为什么第一次请求J

32、SP页面时,响应速度比较慢?JSP文件中,有几种注释方法?格式是什么?,预习检查,列举一些page指令的常用属性,并说明它们的作用 在JSP文件中,有几种输出数值的方法(如:输出10与30的乘积)?分别怎样表示?,本章任务,升级新闻发布系统 显示存储在数据库中的新闻一级标题 页面显示效果:,掌握page指令的常用属性 掌握JSP 脚本元素的用法 小脚本 表达式 方法声明,本章目标,为什么需要page指令,在Java文件中,通过两种方式引入其它包中的类: 使用import关键字(优点:一次引入,处处使用) 使用完全限定的类名(即必须加上包名),在Java文件中,如何引入其它包中的类?,在JSP文

33、件中,同样可以使用import关键字引入Java类文件,一旦引入,整个JSP文件都可用。 此时,需要使用到page指令。,page指令示例,输出当前日期你好,ACCP! 今天是,已经通过page指令的import属性引入这些类文件了,什么是page指令,page指令 通过设置内部的多个属性来定义整个页面的属性 语法: page指令常用属性,小结 1,编写一个JSP,要求: 向一个ArrayList对象中添加10个字符串 使用for循环进行添加,存储内容依次是 “第1个字符串” 、”第10个字符串“ 最后在页面上输出:添加完毕 使用page指令来引入ArrayList类 JSP页面不能出现中文乱

34、码,完整代码实现,JSP 脚本元素,JSP 脚本元素,小脚本,表达式,声明,JSP 脚本元素是用来嵌入Java代码的,主要用来实现页面的动态请求 JSP 脚本元素包括:,什么是小脚本,JSP 小脚本 就是在JSP页面里嵌入一段Java代码 语法: ,输出当前日期你好,ACCP! 今天是,out.print负责在页面上进行输出,在JSP中嵌入的Java代码,小结 2,使用两个一维数组分别存储学生姓名、学生成绩 在页面中每隔一行输出一名学生的姓名与成绩 运行结果示意图,完整代码实现,什么是表达式,表达式 表达式是对数据的表示,系统将其作为一个值进行计算和显示 语法:,使用表达式显示数据。 显然,表

35、达式更有利于在HTML中显示数据,1,2,使用小脚本显示数据,小结 3,使用一个一维数组存储两个学生的成绩,在页面中输出这两个学生的最高成绩、最低成绩、平均成绩、成绩的相差值 要求使用JSP表达式进行输出 提示:java.lang.Math类提供了静态方法max、min、abs,分别用来求得两数相比的最大值、两数相比的最小值、单个数值的绝对值 运行结果示意图,完整代码实现,小脚本与表达式的综合应用6-1,升级新闻发布系统,要求如下: 在系统的前台首页面上显示存储在数据库中的新闻一级标题,逐条逐行显示新闻一级标题,小脚本与表达式的综合应用6-2,1、设计数据表结构 2、确定存储对象: 类型:新闻

36、一级标题(FirstLevelTitle ) 属性:ID、名称、创建者、创建时间 3、通过JDBC访问数据库 创建类FirstLeveTitleDbOpreation,用来查询数据库,并返回FirstLevelTitle对象的集合 4、编写JSP 在页面中逐条逐行输出新闻一级标题的名称,可以分解为如下几个步骤:,小脚本与表达式的综合应用6-3,第一步:设计数据表结构,表名为FirstLevelTitle,小脚本与表达式的综合应用6-4,第二步:确定存储对象 1、创建类: FirstLevelTitle(新闻一级标题) 2、包含属性: ID、名称、创建者、创建时间,public class Fi

37、rstLevelTitle private int id; /ID private String titleName; /名称 private String creator; /创建者 private Date createTime; /创建时间public FirstLevelTitle(int id, String titleName, String creator,Date createTime) this.id = id; this.titleName = titleName; this.creator = creator; this.createTime = createTime; /此处省略各属性的setter/getter方法 ,小脚本与表达式的综合应用6-5,第三步:通过JDBC访问数据库 创建类:FirstLeveTitleDbOpreation 包含方法 getAllFirstLevelTitleList:用来查询数据库,并返回所有的新闻一级标题,完整代码实现,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 实用文档 > 简明教程

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报