动态页面设计 长沙民政职业技术学院 ☆ WEB 应用开发精品课程
案例导入 项目 结合 JDBC 技术和 JSP 技术,实现考生登录验证 任务 用户登陆页面与后台验证实现 。 技术要点 ( 关键字 ) 1.JSP 标签和动作应用。 2.JSP 的内置对象 request , response 3.JSP 调用 JDBC 访问数据库
目标 理解 JSP 的基本原理以及和 Servlet 的关系。 掌握 JSP 的语法构成和基本指令。 掌握 JSP 注释, JSP 表达式 scriptlet , JSP 声 明 掌握 JSP/Servlet 中使用 JDBC 访问数据库 掌握使用数据库访问类( JavaBean )访问 数据库
目标 掌握 page 指令 理解 include 指令优缺点 理解 include 动作和 include 指令的区别和联 系 掌握 forward 动作 掌握 JSP 内置对象的使用
JSP 编程 JSP---Java Server Pages 拥有 Servlet 的特性与优点 直接在 HTML 中内嵌 java 代码 HTML 用于表示页面,而 Java 代码用于 访问动态内容
JSP 编程 JSP 的特点: – 优良的性能 优于 CGI , PHP , ASP – 平台无关性 操作系统无关, Web 服务器无关 – 可扩展性 tag 的扩展机制,简化页面开发
示例 HelloTime.jsp Hello Time 现在时间是: JSP 代码
JSP 程序的基本结构 Declaration Scriptlet Expression Comment Directives 操作指令 内置对象
JSP 编程 ---Declaration 基本语法: – 说明:在此声明的变量为全局变量 例: <%! int i; public void setName(){… …} %>
Scriptlet 基本语法: – 可以放入任何的 Java 程序代码 例: <% for (int i=0;i<10,i++) { … } %>
表达式 基本语法: = 后面必须是字符串变量或者可以被转换成 字符串的表达式 不需要以 ; 结束 只有一行 例:
注释 格式: – 客户端可以查看到的注释 – 注释的内容不会被执行 不会发送客户端的注释
JSP 和 Servlet 的关系 JSP 页面 执行 转译 编译 Servlet 请求 响应 客户端
在 JSP 中使用 JDBC 访问数据库 新增记录 (Record) 范例 <% try{ new oracle.jdbc.driver.OracleDriver(); String sql = "insert into students values('Cas005','Jackie',20,'M')"; String Connection conn=DriverManager.getConnection(url,"scott","tiger"); Statement stmt = conn.createStatement(); int affectedRow = stmt.executeUpdate(sql); out.println(" 插入了 "+affectedRow+" 笔数据! "); … }catch(SQLException e){ out.println(" 发生异常: "+e.getMessage()); } %>
JavaBean 访问数据库 JavaBean 一种特殊的 java 类 JavaBean 访问数据库操作 : – 定义一个 JavaBean 其中实现据库的访问 – 在 JSP 中调用 JavaBean
Directive (指令) 格式: – 指令的设定除了 import 外,不能重复指定 属性的设定可以多个 JSP 有如下指令: –page –include –taglib
Directive--page 指明与 JSP Container 的沟通方式 基本格式: language=“script language”| extends=“className”| import=“importList”| buffer=“none|kb size”| --none: 不缓冲,默认 8k session=“true|false”| -- 是否可以使用 session ,默认 true autoFlush=“true|false” -- 缓冲器是否自动清除,默认 true isThreadSafe=“true|false”| info=“infoText”| -- 任何字符,可以通过 Servlet.getServletInfo() 取得 errorPage=“errorPageUrl ”| isErrorPage=“true|false”| contentType=“contentTyepInfo” %>
Directive--include 将指定的 JSP 程序或者 HTML 文件包含进来 格式: – JSP Engine 会在 JSP 程序的转换时期先把 file 属性设定的文件包含进来,然后开始执 行转换及编译的工作。 问题 : 被包含的文件内容发生变化时服务器可能监测不到
Directive--taglib 用来扩展 JSP 程序的操作指令 格式: –
JSP 动作( Action ) jsp:useBean –jsp:setProperty –jsp:getProperty jsp:include jsp:forward –jsp:param jsp:plugin
jsp:include/jsp:param 用于动态包含 JSP 程序或 HTML 文件等 执行到 include 时,被 include 的文件才会被 JSP Engine 编译。如果 include 的是 jsp 文件,那它 不会被转换成 Servlet 文件 格式: – <jsp:param name=“ParamName” value=“paramValue”/>
include 指令和 include 动作的区别 include 指令是在 JSP 程序的转换时期就将 file 属性所指定的程序内容嵌入,然后再编 译执行; include 动作在转换时期是不会被编译的, 只有在客户端请求时期如果被执行到才会 被动态的编译载入
jsp:forward/jsp:param 用于将一个 jsp 的内容传送到 page 所指定的 JSP 程序或 者 Servlet 中处理 格式: – 用于指定参数和其对应的值 与 不同的是, forward 处理完后会直接将 结果返回给客户端,而 include 还会继续处理 “ 主 ”Jsp 中 的内容
jsp:plugin 用于动态下载服务器端的 Java Bean 或 Applet 等到客户端浏览器上执行,也就 是直接在浏览器上执行 Java 的程序
JSP 的内置对象 –out –request –response –pageContext –session –application –config –exception –page
JSP--out Out 内置对象是一个缓冲的输出流,用来给 客户端返回信息。 javax.servlet.jsp.JspWriter 的一个实例 例: out 用法 <% out.println(" 现在时间是: "+new java.util.Date()); %>
JSP--out 常用方法: –println() :向客户端输出各种类型数据 –newLine() :输出一个换行符 –close() :关闭输出流 –flush() :输出缓冲区里的数据 –clearBuffer() :清除缓冲区里的数据,同时把数据输出 到客户端 –clear() :清除缓冲区里的数据,但不把数据输出到客户 端 –getBufferSize() :返回缓冲区的大小
JSP--request request 内置对象表示的是调用 JSP 页面的请求。 通常, request 对象是 javax.servlet.http.HttpServletRequest 接口的一个 实例 典型应用: request.getParameter(“paramName”) 获得 Form 提交过来的参数值 例:从表单接收一个参数,并向客户端输出 request 用法 <% out.println(" 你的姓名是: "+request.getParameter("name")); %>
JSP--request 常用方法: –getMethod() :返回客户端向服务器端传送数据的 方法 –getParameter(String paramName) :返回客户端 向服务器端传送的参数值,该参数由 paramName 指定 –getParameterNames() :获得客户端传送给服务器 端的所有参数的名字,结果是一个枚举类型数据 ( Enumeration ) –getParameterValues(String name) :获得指定参 数的所有值,由 name 指定
JSP-request 常用方法: –getRequestURI ():获得发出请求字符串的客户端地 址 –getRemoteAddr() :获取客户端的 IP 地址 –getRemoteHost() :获取客户端机器名称 –getServerName() :获取服务器的名字 –getServletName() :客户端所请求的脚本文件路径 –getServerPort() :获取服务器端的端口
JSP-response response 表示的是返回给客户端的响应 是 javax.servlethttp.HttpServletResponse 接口的一个实例 经常用于设置 HTTP 标题,添加 cookie 、 设置响应内容的类型和状态、发送 HTTP 重定向和编码 URL
JSP-response 常用方法: –addCookie(Cookie cookie) :添加一个 Cookie 对象, 用于在客户端保存特定的信息 –addHeader(String name,String value) :添加 HTTP 头信息,该 Header 信息将发送到客户端 –containsHeader(String name) :判断指定名字的 HTTP 文件头是否存在 –sendError(int) :向客户端发送错误的信息 –sendRedirect(String url) :重定向 JSP 文件 –setContentType(String contentType) :设置 MIME 类型与编码方式 <% // 下面三条语句都用于防止浏览器缓存( cache )此 JSP response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires", 0); %> response 用法 <% // 跳转到 MyRequest.jsp response.sendRedirect("MyRequest.jsp?name=Tom"); %>
JSP-application application 对象是一个对 web 应用有效的全 局变量 常用方法: –getAttribute()/setAttribute() –log() 访问计数 <% Integer appCount; // 对 application 同步 synchronized(application) { appCount = (Integer)application.getAttribute("accCount"); // 如果第一次访问,此时 appCount 为 null ,则初始化它 if (appCount==null) { appCount = new Integer(0); } // 在原来基础上加 1 ,并写回到 application 中 appCount = new Integer(appCount.intValue()+1); application.setAttribute("accCount",appCount); } %>
JSP-Cookie Http 协议的无连接性要求出现一种保存 C/S 间状态的机制 Cookie :保存到客户端的一个文本文件, 与特定客户相关 Cookie 以 “ 名 - 值 ” 对的形式保存数据 通过 getName 和 getValue 的方式得到相应 的名字和值
JSP--session (默认) -- 表 示 session 功能已经在 jsp 页面中启动 session 常用方法: –void setAttribute(String name,Object value) –Object getAttribute(String name) –boolean isNew()
exception 对象 exception 对象是 Throwable 的实例,表示 的是 JSP 的异常信息 如果要使用它,必须将对应的 JSP 的 page 指令的 isErrorPage 属性设置成 true error
Servlet 和 JSP 的通信 从 JSP 调用 Servlet 可用 请求信息自动传递到 Servlet 从 Servlet 调用 JSP 使用 –RequestDispatcher 接口的 forward(req, res) 方 法 – 请求信息需要显式传递 ( 在 req 、 res 参数中)
pageContext 对象 是 PageContext 类型的对象 可以使用这个对象来管理其他的隐含对象
总结 JSP 程序的基本结构 Declaration,Scriptlet,Expression,Comment,Directives 操作指令, 内置对象 JSP 和 Servlet 的关系 在 JSP 中使用 JDBC 访问数据库 JavaBean )访问数据库
总结 page 指令: 属性 :import 、 contentType 、 pageEncoding 、 session 、 errorPage/isErrorPage 、 buffer 、 autoFlush 、 isThreadSafe 、 isELIgnored include 指令优缺点 include 动作和 include 指令的区别和联系 forward 动作
总结 request 内置对象表示的是调用 JSP 页面的 请求 response 表示的是返回给客户端的响应 application 对象是一个对 web 应用有效的全 局变量
总结 session 对象对应于 HttpSession 对象, JSP 中 page 指令的 session 属性为 false 时,此 页面不能使用 session exception 对象只能用在 page 指令的 isErrorPage 属性为 true 的 JSP 页面中