1、小脚本与表达式的综合应用6-6,第四步:编写showFirstTitle.jsp 调用类FirstLeveTitleDbOpreation的方法,获得FirstLevelTitle对象的集合 遍历该集合,逐行输出新闻一级标题的名称,-代码片断-,表达式,负责输出各新闻一级标题的名称,小脚本,负责方法调用、以及在循环中获取数据,完整代码实现,为什么需要方法声明,-在JSP中格式化日期的代码片断- ,在JSP中格式化当前日期,日期显示形式:yyyy年MM月dd日,在同一个JSP页面中,如果需要在多个地方格式化日期, 如何简化代码?,在Java文件中,可以增加一个方法来解决 在JSP文件中,同样可以
2、声明方法,解决类似问题,如何实现方法声明,方法声明 JSP页面中定义Java方法 语法:,你好,ACCP!今天是 你好,BENET!今天是 ,现在可以在多处调用该方法了。,小结 4,编写一个JSP页面,实现根据一个人 18 位身份证显示出生日的功能,要求把表达式、方法声明和小脚本全部用到,完整代码实现,运行结果示意图,总结,请指出如下JSP页面的错误,输出当前日期你好,ACCP! 今天是,未使用import引入类,Thank you,使用JSP处理客户端请求,第六章,回顾,列举一些page指令的常用属性,并说明它们的作用 在JSP文件中,有几种输出数值的方法(如:输出10与30的乘积)?分别怎
3、样表示?,预习检查,使用JSP编程时,如何在服务器端获得用户在文本框中输入的数值? 什么是JSP内置对象?列举一些常用的JSP内置对象,并说明它们的作用,本章任务,升级新闻发布系统 从页面上添加新闻一级标题,并保存至数据库中 从页面上添加新闻二级标题,并保存至数据库中,掌握Form表单的请求处理 掌握JavaScript页面验证与JSP的集成 掌握JSP常用内置对象的用法 out对象 request对象 response对象,本章目标,为什么需要使用HTML表单,如何在服务器端获得文本框中的数据?,HTML表单是与用户交互信息的主要手段,回顾HTML表单 2-1,创建表单 一个表单至少应该包括
4、说明性文字、表单控件、提交和重填按钮等内容 HTML表单标记说明了表单提交的方式和地点 创建表单控件 通过HTML表单的各种控件,用户可以输入文字信息,或者从选项中选择,以及做提交的操作,用户名: 密码:,回顾HTML表单 2-2,method表示表单发送的方式, 分为两种: get方式:将表单内容经过编码之后 ,通过URL发送, 使用get方式发送时有255个字符的限制。post方式:将表单的内容通过http发送,post没有字符长度的限制,可以在地址栏里看到,在地址栏看不到表单的提交信息,演示get方式与post方式的区别,表单处理的编程模式,用户通过表单控件输入并提交信息 JSP获得表单
5、数据,进行逻辑处理 JSP根据处理结果,转向不同的结果页面,JSP1、获得表单数据 2、进行逻辑处理 3、根据处理结果返回不同页,邮箱主页面,登陆失败页面,用户名、密码输入正确,用户名、密码输入错误,1,2,3,处理表单请求 5-1,升级新闻发布系统,要求如下: 从页面上添加新闻一级标题,并保存至数据库中 如果保存成功,返回成功页面 如果保存失败,返回失败页面,saveFirstLevelTitle.jsp1、获得用户输入的一级标题 2、插入数据库 3、根据保存结果返回不同的页面,成功页面,失败页面,保存成功,保存失败,1,2,3,处理表单请求 5-2,创建一级标题的发布页面(createLe
6、velOneTitle.jsp) 创建发布成功页面(success.jsp) 创建发布失败页面(error.jsp),-发布页面的代码片断-,发布页面代码实现,成功页面代码实现,失败页面代码实现,处理表单请求 5-3,创建数据访问类FirstLeveTitleDbOpreation 建立方法 getNewId():用来获取新闻一级标题表中最大的ID,并对它加一,作为新的一级标题的ID 建立方法insertOneRecord(FirstLevelTitle fTitle):用来向数据库中插入一条新闻一级标题,完整代码实现,处理表单请求 5-4,创建发布提交页面 saveFirstLevelTit
7、le.jsp, 0) request.getRequestDispatcher(“success.jsp“).forward(request, response); else request.getRequestDispatcher(“error.jsp“).forward(request,response); %,获取用户输入,逻辑处理,返回不同页面,完整代码实现,处理表单请求 5-5,演示:添加新闻一级标题整体效果演示,JavaScript页面验证与JSP的集成,-代码片断-function checkOneTitle()if(form1.titlename.value =null | f
8、orm1.titlename.value=“) alert(“请输入一级标题!“);return false;elsereturn true; ,在发布页面中增加JavaScript验证:如果用户没有输入新闻一级标题,就无法进行表单提交,通过onClick事件触发checkOneTitle()方法,完整代码实现,什么是JSP内置对象,JSP 内置对象是 Web 容器创建的一组对象 JSP 内置对象是可以直接在JSP页面使用的对象 ,无需使用“new”获取实例 JSP 内置对象的名称是 JSP 的保留字,常用内置对象,request,response,out,application,sessio
9、n,示例,没有出现new关键字,但却可以使用request对象,JSP内置对象out,out对象用于向客户端输出数据 out对象常用方法: print():在页面中打印出字符串信息,JSP内置对象request 4-1,request对象主要用于处理客户端请求,request 对象,客户端,请求,请求信息,JSP内置对象request 4-2,request对象常用方法,JSP内置对象request 4-3,编程实现ACCP学员的注册功能 注册信息包括:用户名、密码、你从哪里知道ACCP 页面提交后,显示学员输入的数据,1,2,JSP内置对象request 4-4,用户名 密码 你从哪里知道A
10、CCP 报刊 网络 朋友推荐 电视,String channels = request.getParameterValues(“channel“); if (channels != null) for (int i = 0; i channels.length; i+) out.println(channelsi); ,request.setCharacterEncoding(“GBK“);,注册页面完整代码实现,注册提交页面完整代码实现,request.getParameter(“name”);,request.getParameter(“pwd“);,JSP内置对象response 2-1
11、,response对象用于响应客户请求并向客户端输出信息 response 对象常用方法 void sendRedirect (String location):将请求重新定位到一个不同的URL,response 对象,客户端,响应,从服务器中检索的信息,存储信息,以在响应客户端请求时发送此信息,JSP内置对象response 2-2,在首页面(input.jsp)上输入用户名、密码,提交至input2.jsp进行处理 如果输入的用户名、密码都是sa,跳转至欢迎页面(welcome.jsp), 用户名: 密码:,input.jsp,客户端重新建立链接,跳转至欢迎页面,input2.jsp,处理
12、表单请求进阶 5-1,升级新闻发布系统,要求如下: 从页面上添加新闻二级标题,并保存至数据库中 如果保存成功,返回成功页面;保存失败,返回失败页面,saveSecondLevelTitle.jsp1、获得用户输入 2、插入数据库 3、根据保存结果返回不同页面,成功页面,失败页面,保存成功,保存失败,在下拉框中列出所有一级标题,文件上载控件,1,2,3,处理表单请求进阶 5-2,创建类SecondLevelTitle.java:负责存储数据 创建类SecondLevelTitleDbOpreation.java:负责向数据库中添加新闻二级标题,完整代码实现,完整代码实现,创建表SecondLev
13、elTitle,处理表单请求进阶 5-3,创建新闻二级标题的发布页面(createLevelTwoTitle.jsp),-代码片断-0) for(int i=0;i “,这是文件上载控件,该控件带有一个文本框和一个浏览按钮,在下拉框中列出所有一级标题,完整代码实现,处理表单请求进阶 5-4,创建发布提交页面( saveSecondLevelTitle.jsp ),-代码片断-0) request.getRequestDispatcher(“success.jsp“).forward(request,response); else request.getRequestDispatcher(“er
14、ror.jsp“).forward(request, response); %,获取用户输入,逻辑处理,返回不同页面,完整代码实现,处理表单请求进阶 5-5,演示:添加新闻二级标题整体效果演示,总结 2-1,编程实现如下页面效果:,input.jsp,output.jsp,1,2,总结 2-2,input.jsp,output.jsp, 请选择您的性别: 女 男请选择您喜欢的食物: 薯条 奶酪,String sex = request.getParameter(“sex“); String foods = request.getParameterValues(“foods“); String
15、foodStr=“; if (foods != null) for (int i = 0; i 您的性别是: 您喜欢的食物是: ,单选框,复选框,Thank you,JSP页面的访问控制,第七章,回顾,使用JSP编程时,如何在服务器端获得用户在文本框中输入的数值? 什么是JSP内置对象?列举一些常用的JSP内置对象,并说明它们的作用,预习检查,请说明JSP内置对象session与application的区别 include指令的作用是什么?,本章任务,完成最终版的新闻发布系统 为新闻发布系统增加访问控制 为新闻发布系统增加已访问人数统计 实现新闻发布系统的分级浏览,掌握访问控制实现的流程 掌握
16、JSP内置对象的用法 session对象 application对象 掌握include指令 掌握如何在超链接中传递参数,本章目标,生活中的访问控制,下载电子书时,系统会提示用户登录网站,点击下载, 系统转入登录页面,每次下载之前,系统如何判断用户是否已经登录?,如何实现访问控制,系统如何保存不同用户的登录信息?,使用JSP会话跟踪机制,可以维持每个用户的会话信息,也就是为不同的用户保存不同的数据,1,2,访问控制流程图:,用户登录,进入用户注册页面,系统保存该用户的登录信息,进入欲访问的页面,是否是注册用户,否,是,用户直接访问某个页面,进入用户登录页面,显示该页面内容,系统是否保存了该用户
17、登录信息,否,是,浏览器关闭,本次会话结束,什么是会话,一个会话就是浏览器与服务器之间的一次通话,它包含浏览器与服务器之间的多次请求、响应过程,浏览器,session对象,浏览器,session是JSP内置对象,与浏览器一一对应,允许用户存储和提取会话状态的信息,session对象,JSP内置对象session,session对象用来存储有关用户会话的所有信息 session对象常用方法: void setAttribute(String key, Object value):以键/值的方式,将一个对象的值存放到session中Object getAttribute(String key):根
18、据名称去获取session中存放对象的值,session.setAttribute(“name“, “admin“);,String name = (String) session.getAttribute(“name“);,访问控制就是基于session来完成的,为新闻发布系统增加访问控制 4-1,升级新闻发布系统,增加访问控制功能,具体要求如下: 提供用户登录页面 用户必须登录之后,才能访问新闻发布系统,登录处理页面(login.jsp) 1、获得登录信息 2、查询数据库,判断该用户是否注册 3、如果该用户已注册,在session中保存该用户的登录信息,并且跳转到新闻发布系统的首页面,新闻
19、发布系统首页面(index.jsp) 1、从session中提取该用户信息 2、如果用户信息存在,显示首页内容 3、如果用户信息不存在,跳转到登录页面,用户已注册,session中无法 提取到用户信息,1,2,3,为新闻发布系统增加访问控制 4-2,在news数据库中创建表userinfo,负责存储用户名、密码 创建类(User.java),负责存储用户名、密码 创建登录页面(login.html) 创建登录处理页面(login.jsp),-登录处理页面的代码片断- ,在session中存放用户登录信息,完整代码实现,完整代码实现,完整代码实现,为新闻发布系统增加访问控制 4-3,在新闻发布系
20、统后台首页面(index1.jsp)中加入登录验证,如果session中不存在该用户的登录信息,转入登录页面,完整代码实现,为新闻发布系统增加访问控制 4-4,访问控制效果验证,步骤如下: 直接在IE地址栏中输入URL,访问系统首页面 通过登录页面进入系统首页面 重新开启一个IE窗口,直接访问系统首页面,每个步骤会发生什么样的结果?为什么会产生这样的结果?,每个session对象都与浏览器一一对应 重新开启一个浏览器,相当于重新创建一个session对象,演示:访问控制效果验证,include指令 2-1,除了首页面,其它页面中同样需要加入登录验证, 有没有办法避免冗余代码的出现?,可以将一些
21、共性的内容写入一个单独的文件中,然后通过include指令引用该文件,从而降低代码的冗余问题,也便于修改共性内容,include指令 2-2,创建登录验证文件 checklogin.jsp在后台首页面(index.jsp)中使用include指令引用登录验证文件,完整代码实现,小结1,创建登录页面login.html 提供用户名输入框、以及登录按钮 创建登录处理页面login.jsp 如果用户名为sa,把用户名存储在session中,并跳转进入index.jsp中 否则跳转进入login.html页面 创建页面index.jsp 如果session中没有该用户信息,跳转进入login.html
22、中 否则显示欢迎信息,login.html,login.jsp,index.jsp,为新闻发布系统增加已访问人数统计 4-1,升级新闻发布系统,增加已访问人数统计功能,具体要求如下: 左导航页面中增加超链接:已访问人数统计 已访问人数统计页面:显示已访问人数,以及访问者的登录名称,登录处理页面(login2.jsp) 1、在session中保存该用户信息 2、在全局范围内保存该用户信息 3、跳转到新闻发布系统的首页面,1,2,4,3,为新闻发布系统增加已访问人数统计 4-2,创建登录页面(login2.html) 创建登录处理页面(login2.jsp),-登录处理页面代码片断- if (rs
23、.next() User logineduser = new User(name, pass); session.setAttribute(“LOGINED_USER“, logineduser); List loginedUsers = new ArrayList(); /访问者列表 if (application.getAttribute(“LOGINED_USER“) != null) loginedUsers = (List) application.getAttribute(“LOGINED_USER“); loginedUsers.add(logineduser); /把新登录用户
24、的信息存入访问者列表中 application.setAttribute(“LOGINED_USER“, loginedUsers); response.sendRedirect(“index.jsp“); ,在全局范围内存入访问者列表,从全局范围内取出原有的访问者列表,完整代码实现,完整代码实现,为新闻发布系统增加已访问人数统计 4-3,在新闻发布系统左导航栏中加入超链接(left.jsp) 创建已访问人数统计页面(showAllLoginedUsers.jsp),-已访问人数统计页面代码片断-目前,有人已经访问过本网站! 访问者的登录名称分别是: “); %,从全局范围内取出访问者列表,逐
25、行显示每个访问者的登录名称,完整代码实现,完整代码实现,已访问人数统计效果验证,步骤如下: 通过登录页面进入系统首页面,查看已访问人数统计 重新开启一个IE窗口,使用不同的用户登录进入首页面,查看已访问人数统计,每个步骤会发生什么样的结果?为什么会产生这样的结果?,演示:已访问人数统计的效果验证,为新闻发布系统增加已访问人数统计 4-4,JSP内置对象application,application类似于系统的“全局变量”,用于实现用户之间的数据共享 application对象的常用方法: void setAttribute(String key, Object value):以键/值的方式,将
26、一个对象的值存放到application中Object getAttribute(String key):根据键去获取application中存放对象的值,application.setAttribute(“LOGINED_USER“, new ArrayList();,if (application.getAttribute(“LOGINED_USER“) != null) List loginedUsers = (List) application.getAttribute(“LOGINED_USER“); ,新闻发布系统的分级浏览 4-1,实现新闻的分级浏览功能,具体要求如下: 在新闻发
27、布系统的前台首页面上,显示所有新闻一级标题 为所有新闻一级标题设置超链接,点击后,显示下属的新闻二级标题,“体育”对应的超链接,“体育”下属的新闻二级标题列表,点击“体育”,新闻发布系统的分级浏览 4-2,创建前台首页面(newspre.jsp) 使用表格把页面分为三块:上栏、左下栏、右下栏 上栏显示图片 左下栏显示新闻一级标题,提取到一个单独的文件showFirstTitle.jsp中 右下栏显示新闻二级标题,提取到一个单独的文件showSecondTitle.jsp中 使用include指令引入这两个文件,上栏,完整代码实现,右下栏,左下栏,新闻发布系统的分级浏览 4-3,创建新闻一级标题
28、的浏览页面(showFirstTitle.jsp ),-代码片断-“,超链接中传递参数:新闻一级标题的ID,完整代码实现,新闻发布系统的分级浏览 4-4,在类SecondLevelTitleDbOpreation中添加方法getSecondByFirst(),根据新闻一级标题的ID获取对应的新闻二级标题 创建新闻二级标题的浏览页面(showSecondTitle.jsp) 根据新闻一级标题的ID,显示对应的新闻二级标题,-代码片断- ,处理URL中的请求参数:得到新闻一级标题的ID,完整代码实现,完整代码实现,演示:新闻发布系统的分级浏览,小结2,创建JSP页面one.jsp 设置一个超链接,链接至two.jsp文件 向two.jsp传递一个参数,参数名为str,其值为字符串hello 创建JSP页面two.jsp 在该页面中输出参数的值,one.jsp完整代码实现,two.jsp完整代码实现,总结,启动IE窗口运行如下JSP,如果连续刷新5次,输出结果是什么? 重新启动一个新的IE窗口运行该JSP,如果连续刷新3次,输出结果是什么?,第一次输出:,5,第二次输出:,3,Thank you,