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

上传人:牧羊曲112 文档编号:6102833 上传时间:2023-09-24 格式: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页
点击查看更多>>
资源描述

《北大青鸟JSP教程大全(中).ppt》由会员分享,可在线阅读,更多相关《北大青鸟JSP教程大全(中).ppt(65页珍藏版)》请在三一办公上搜索。

1、JDBC程序的工作模板,try Class.forName(JDBC驱动类);catch(ClassNotFoundException e)(无法找到驱动类);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.getInt(a);String s=rs.getString(b);

2、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,DBServer,JDBC API,JDBC Driver Manager,纯Java 驱动,JDBCODBC桥,Java 应用程序,ODBC,

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

4、BC桥驱动类的完全限定类名,数据源名称,演示:配置ODBC数据源,JDBC驱动 5-4,纯Java驱动由JDBC驱动直接访问数据库优点:100%Java,快又可跨平台缺点:访问不同的数据库需要下载专用的JDBC驱动,JDBC 驱动,Java 应用程序,JDBC API,DBServer,JDBC驱动 5-5,使用纯Java驱动方式进行直连1、下载数据库厂商提供的驱动程序包2、将驱动程序包引入工程中3、编程,通过纯Java驱动方式与数据库建立连接,-语法-String URL=jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=news;C

5、lass.forName();Connection con=DriverManager.getConnection(URL,sa,sa);,sql server数据库驱动类的完全限定类名,演示:在工程中引入JDBC驱动程序包,数据库名称,小结 1,JDBC桥连与纯Java驱动两种方式的优缺点分别是什么?JDBC URL的作用是什么?,创建数据表:FirstLevelTitle,JDBC应用,要求对新闻标题进行管理:1、新闻标题存储在Sql Server 2000中2、通过JDBC对新闻标题进行增、删、改、查操作,操作步骤,使用Statement插入数据,使用PreparedStatement增

6、、删、改、查数据,1,2,使用Statement插入数据 2-1,使用桥连方式向FirstLevelTitle表中插入一条记录,代码片断public static void main(String args)Connection con=null;Statement statement=null;try String strSql=insert into FirstLevelTitle values(1,军事,网管,getdate();try);catch(ClassNotFoundException e)System.out.println(无法找到驱动类);con=DriverManage

7、r.getConnection(jdbc:odbc:news,sa,sa);statement=con.createStatement();statement.executeUpdate(strSql);catch(SQLException sqlE)sqlE.printStackTrace();finally closeStatement(statement);closeConnection(con);,建立连接,执行sql语句,数据库连接使用完毕,及时释放,载入JDBC-ODBC桥驱动类,异常处理,异常处理,完整代码实现,使用Statement插入数据 2-2,使用纯Java驱动方式向Fi

8、rstLevelTitle表中 插入一条记录,代码片断public static void main(String args)Connection con=null;Statement statement=null;try String strSql=insert into FirstLevelTitle values(1,军事,网管,getdate();try);catch(ClassNotFoundException e)System.out.println(无法找到驱动类);con=DriverManager.getConnection(jdbc:microsoft:sqlserver:

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

10、localhost:1433;DatabaseName=news 那么出错的原因是什么?如何解决?请单独建立一个类ConnectionManager,专门负责建立数据库连接、以及关闭连接,并思考这样做带来的好处是什么,找不到合适的驱动类,原因:没有把数据库驱动包引入工程,好处在于:既便于管理、又可以提高代码的复用性,完整代码实现,PreparedStatement,PreparedStatement接口(预编译的 SQL 语句),Statement 接口,当SQL语句将运行多次时,尽量使用PreparedStatement,以便提高运行效率,PreparedStatement 接口继承 Sta

11、tement接口PreparedStatement比普通的Statement对象使用起来更加灵活,更有效率,使用PreparedStatement插入数据,public class NewsFirstTitleDB2 public static void main(String args)Connection con=null;PreparedStatement pStatement=null;try SimpleDateFormat hmFromat=new SimpleDateFormat(yyyy-MM-dd hh:mm:ss);con=ConnectionManager.getConn

12、ection();String strSql=insert into FirstLevelTitle values(?,?,?,?);pStatement=con.prepareStatement(strSql);pStatement.setInt(1,1);pStatement.setString(2,军事);pStatement.setString(3,管理员);pStatement.setString(4,hmFromat.format(new Date();pStatement.executeUpdate();catch(SQLException sqlE)sqlE.printStac

13、kTrace();finally ConnectionManager.closeStatement(pStatement);ConnectionManager.closeConnection(con);,参数化的查询语句,设置每个?参数的值,列号从1开始,执行sql语句,使用PreparedStatement删除数据,public class NewsFirstTitleDB3 public static void main(String args)Connection con=null;PreparedStatement pStatement=null;try con=ConnectionM

14、anager.getConnection();String strSql=delete from FirstLevelTitle where TitleName=?;pStatement=con.prepareStatement(strSql);pStatement.setString(1,军事);int row=pStatement.executeUpdate();(“成功删除了+row+行数据!);catch(SQLException sqlE)sqlE.printStackTrace();finally ConnectionManager.closeStatement(pStatemen

15、t);ConnectionManager.closeConnection(con);,返回删除记录的行数,使用PreparedStatement更新数据,public class NewsFirstTitleDB4 public static void main(String args)Connection con=null;PreparedStatement pStatement=null;try con=ConnectionManager.getConnection();String strSql=update FirstLevelTitle set Creator=?where Id=?

16、;pStatement=con.prepareStatement(strSql);pStatement.setString(1,编辑);pStatement.setInt(2,1);int row=pStatement.executeUpdate();(成功更新了+row+行数据!);catch(SQLException sqlE)sqlE.printStackTrace();finally ConnectionManager.closeStatement(pStatement);ConnectionManager.closeConnection(con);,返回更新记录的行数,小结 3,使用

17、PreparedStatement语句执行如下操作:删除表FirstLevelTitle中所有Id小于10的记录,并在控制台输出删除记录的行数,完整代码实现,使用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();Stri

18、ng sqlStr=select max(id)from FirstLevelTitle;pstmt=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.closeConnec

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

20、=select*from 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”);FirstLevelTitle f

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

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

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

24、P 页面组成 4-1,JSP 页面的元素包括:,静态内容,指 令,表达式,小脚本,HTML静态文本,以“”结束。比如:,声 明,标准动作,以“”结束比如:,注释,JSP 页面组成 4-2,输出当前日期你好,ACCP!今天是,指令,静态内容,小脚本,表达式,注释,JSP 页面组成 4-3,在浏览器上观看运行结果,查看网页源文件,可以通过源代码查看到HTML注释的内容,所有注释内容都不可见,JSP 页面组成 4-4,合理、详细的注释有利于代码后期的维护和阅读在JSP文件的编写过程中,共有三种注释方法:HTML的注释方法:JSP注释标记:在JSP脚本中使用注释:,缺点:不安全,加大网络传输负担,小结

25、 1,请编写一个JSP页面exercise1.jsp,要求:至少包含三种注释,完整代码实现,创建新闻发布系统的JSP页面 5-1,回忆第一章内容,请说明开发JSP动态网站的几个步骤,创建Web项目,开发步骤,设计Web 项目的目录结构,编写代码(创建 JSP),部署、运行,本章将从这里开始,带领大家创建新闻发布系统的JSP页面,创建新闻发布系统的JSP页面 5-2,设计Web项目的目录结构:创建目录ch04:存放JSP页面创建目录CSS:存放样式表文件创建目录images:存放图片,创建新闻发布系统的JSP页面 5-3,使用JSP模板向导创建JSP页面,共有三步:,1,2,3,右键点击“Web

26、Root”下的“ch04”,从右键菜单中选择:新建其他,在新弹出的窗口中,选择“Web”下的“JSP”,点击“下一步”,在下一个新弹出的窗口中,输入文件名index.jsp,点击“完成”,演示:使用JSP模板向导创建JSP页面,创建新闻发布系统的JSP页面 5-4,手工创建JSP页面,共有两步:,1,2,右键点击“WebRoot”下的“ch04”,选择:新建文件,在新弹出的窗口中,输入文件名index.jsp,点击“完成”,演示:手工创建JSP页面,创建新闻发布系统的JSP页面 5-5,采用你认为最方便的方式,把静态新闻发布系统的所有页面转换为JSP页面,并部署运行,演示:页面转换、并部署运行

27、,生活中的欢迎页面,通常情况下,访问某个网站时,我们只需要知道网站的域名就可以了。比如:,现在看到的就是新浪的首页面,如何设置欢迎页面,欢迎页面,就是web应用的默认访问页面在配置文件web.xml中设置欢迎页面,index.jsp,假定在web应用(news)下存在一个index.jsp页面,输入http:/localhost:8080/news地址时,web容器会默认调用index.jsp页面,JSP 执行过程 2-1,3,执行,2,翻译,编译,1,请求,响应,Web容器处理JSP文件请求需要经过3个阶段:翻译阶段:JSP文件会被Web容器中的JSP引擎转换成Java源码编译阶段:Java

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

29、,等同于在Web容器中部署Web应用,与Eclipse中Web应用的目录结构一模一样,小结 2,为什么JSP页面在第一次请求时会比较慢,而之后对同样的JSP页面的请求会非常快?,总结,欢迎登录新闻发布系统,在运行welcome.jsp时,会出现什么现象?如何改正?,出现中文乱码,把字符集改为:GBK,WEB-INF文件夹中的内容无法对外发布,把images文件夹拖至WebRoot文件夹下,Thank you,JSP指令和脚本元素,第五章,回顾,为什么第一次请求JSP页面时,响应速度比较慢?JSP文件中,有几种注释方法?格式是什么?,预习检查,列举一些page指令的常用属性,并说明它们的作用 在

30、JSP文件中,有几种输出数值的方法(如:输出10与30的乘积)?分别怎样表示?,本章任务,升级新闻发布系统显示存储在数据库中的新闻一级标题页面显示效果:,掌握page指令的常用属性掌握JSP 脚本元素的用法小脚本表达式方法声明,本章目标,为什么需要page指令,在Java文件中,通过两种方式引入其它包中的类:使用import关键字(优点:一次引入,处处使用)使用完全限定的类名(即必须加上包名),在Java文件中,如何引入其它包中的类?,在JSP文件中,同样可以使用import关键字引入Java类文件,一旦引入,整个JSP文件都可用。此时,需要使用到page指令。,page指令示例,输出当前日期

31、你好,ACCP!今天是,已经通过page指令的import属性引入这些类文件了,什么是page指令,page指令通过设置内部的多个属性来定义整个页面的属性语法:page指令常用属性,小结 1,编写一个JSP,要求:向一个ArrayList对象中添加10个字符串使用for循环进行添加,存储内容依次是“第1个字符串”、”第10个字符串“最后在页面上输出:添加完毕使用page指令来引入ArrayList类JSP页面不能出现中文乱码,完整代码实现,JSP 脚本元素,JSP 脚本元素,小脚本,表达式,声明,JSP 脚本元素是用来嵌入Java代码的,主要用来实现页面的动态请求JSP 脚本元素包括:,什么是

32、小脚本,JSP 小脚本就是在JSP页面里嵌入一段Java代码语法:,输出当前日期你好,ACCP!今天是,out.print负责在页面上进行输出,在JSP中嵌入的Java代码,小结 2,使用两个一维数组分别存储学生姓名、学生成绩在页面中每隔一行输出一名学生的姓名与成绩运行结果示意图,完整代码实现,什么是表达式,表达式表达式是对数据的表示,系统将其作为一个值进行计算和显示语法:,使用表达式显示数据。显然,表达式更有利于在HTML中显示数据,1,2,使用小脚本显示数据,小结 3,使用一个一维数组存储两个学生的成绩,在页面中输出这两个学生的最高成绩、最低成绩、平均成绩、成绩的相差值要求使用JSP表达式

33、进行输出提示:类提供了静态方法max、min、abs,分别用来求得两数相比的最大值、两数相比的最小值、单个数值的绝对值运行结果示意图,完整代码实现,小脚本与表达式的综合应用6-1,升级新闻发布系统,要求如下:在系统的前台首页面上显示存储在数据库中的新闻一级标题,逐条逐行显示新闻一级标题,小脚本与表达式的综合应用6-2,1、设计数据表结构2、确定存储对象:类型:新闻一级标题(FirstLevelTitle)属性:ID、名称、创建者、创建时间3、通过JDBC访问数据库创建类FirstLeveTitleDbOpreation,用来查询数据库,并返回FirstLevelTitle对象的集合4、编写JS

34、P在页面中逐条逐行输出新闻一级标题的名称,可以分解为如下几个步骤:,小脚本与表达式的综合应用6-3,第一步:设计数据表结构,表名为FirstLevelTitle,小脚本与表达式的综合应用6-4,第二步:确定存储对象1、创建类:FirstLevelTitle(新闻一级标题)2、包含属性:ID、名称、创建者、创建时间,public class FirstLevelTitle private int id;/IDprivate 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:用来查询数据库,并返回所有的新闻一级标题,完整代码实现,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号