350 likes | 541 Views
JavaServer Pages (JSP) 网页程序设计 (1). 内容. 什么是 JSP JSP 文件结构 JSP 语法 : 脚本元素 使用规则和最佳编程实践. 静态网页和动态网页. 静态网页 — 只有 html 标记构成的网页 — 呈现给每一个访问者的内容都是一样的 动态网页 — 网页: html 标记 + 可以执行的程序 — 可以实现动态交互 — 对于不同的访问者可以呈现出不同的内容. 什么是 JavaServer Page ( JSP ) ?. JSP 是一种 动态页面的生成技术 — 由 HTML 代码和嵌入其中的 Java 代码组成
E N D
内容 • 什么是JSP • JSP文件结构 • JSP语法: 脚本元素 • 使用规则和最佳编程实践
静态网页和动态网页 • 静态网页 —只有html标记构成的网页 —呈现给每一个访问者的内容都是一样的 • 动态网页 —网页:html标记+ 可以执行的程序 —可以实现动态交互 —对于不同的访问者可以呈现出不同的内容
什么是JavaServer Page (JSP) ? • JSP 是一种动态页面的生成技术 —由HTML代码和嵌入其中的Java代码组成 —动态内容由JAVA代码产生的 • JSP 是服务器端的脚本语言 — 在JSP页面被客户端请求以后,服务器对这些Java代码进行处理,然 后将生成的HTML页面返回给客户端的浏览器。
JSP 例: <html> <body> Hello World! <br> Current time is <%= new java.util.Date() %> </body> </html>
理解服务器端执行 • JSP文件必须先部署到Web服务器中,然后通过HTTP的方式访问。 • JSP文件内所有<% %>内代码是被Web服务器解释执行的。
理解服务器端执行 案例名称:理解服务器端执行 程序名称:4-01.jsp <%@ page language="java" contentType="text/html;charset=GBK"%> <%@page import="java.util.*"%> <% Date dnow = new Date(); int dhours = dnow.getHours(); int dminutes = dnow.getMinutes(); int dseconds = dnow.getSeconds(); out.print("服务器时间:" + dhours + ":" + dminutes + ":" + dseconds); %> <SCRIPT LANGUAGE="JavaScript"> var dnow = new Date(); dhours = dnow.getHours(); dminutes = dnow.getMinutes(); dseconds = dnow.getSeconds(); document.write("<br>浏览器时间:" + dhours + ":" + dminutes + ":" + dseconds); </SCRIPT>
理解服务器端执行 最常见的误解——忘记JSP是服务器端技术 • JSP完全在服务器上运行 • 它并不会改变客户程序(浏览器)所能够处理的内容
JSP页面的部署 • Tomcat 中JSP的目录 • $CATALINA_HOME\webapps\<文档根目录>\ • 警告 • 前面介绍的有关CLASSPATH,安装目录等的规则依旧适用于JSP页面使用的常规Java类。
JSP文件结构 JSP标记 Java程序段
静态内容(客户端执行) • 动态内容(服务器端执行) JSP内容结构 html标记 CSS样式文件 JavaScript语句 JSP JSP元素 Java程序段 • 便于静态页面设计人员和动态页面程序员分工协作 • 静态内容:用于界面设计,由页面设计人员完成 • 动态内容:用于业务逻辑的实现,由程序员完成
JSP 页面 静态内容 动态内容 Web 开发工具 Macromedia Dreamweaver Netbeans、Eclipse ..... 页面设计人员 JSP 程序员
<!-- 这是注释,客户端可以查看到 --> <%-- 这也是注释,客户端不能查看到 --%> HTML注释 JSP注释 脚本元素 <%! 方法和变量声明 %> 声明 表达式 脚本片断 <%=Java表达式 %> <% Java 代码 %> page指令 taglib指令 include指令 以“<%@ ” 开始,以“%> ” 结束。比如: <%@page pageEncoding=“gbk"%> 指令 JSP元素 <jsp:useBean> <jsp:forward> …….. <jsp:include> 以“<jsp: 标记名 >” 开始, 以“</jsp:标记名> ” 结束 比如:<jsp:include page=" Filename" /> 动作 JSP语法一览图
HTML注释 JSP注释 • 语法: <!--注释内容--> • 特点 — 注释内容发送到客户端浏览器 — 可以在注释中嵌入JSP表达式 — 例子: <!-- 现在时刻 : <%=(new java.util.Date()) %>--> • 语法:<%-- 注释--%> • 特点 —不会被发送到客户端浏览器 — 类似Java中的注释, 完全被JSP编译器忽略,真正的注释
在IE中查看源代码 注释:运行结果
在JSP中调用Java代码: JSP 脚本元素 脚本元素 的 3种形式。作用:在JSP中调用Java代码
JSP声明 • 格式 • <%!方法、变量和类的声明代码 %> • 功能 - 声明你在JSP程序中用到的变量和方法和类 • 示例 • <%! private int someField = 5; %> • <%! private void someMethod(...) {...} %> • 结果 • 声明不能使用内置对象 • 声明通常与表达式和脚码片断一起使用
JSP表达式( Expression) • 格式 • <%= 表达式 %> • 示例 • 当前时间:<%= new java.util.Date() %> • 客户主机名:<%= request.getRemoteHost() %> • 结果 • 表达式被求值,转换成字符串,将按照它在JSP页面中出现的位置插入到HTML页面中。 • 求值是在页面被请求后执行,因此可以访问到请求的所有信息
JSP脚本片段 (scriptlet) • 格式 • <% Java Code %> • 示例 • <% String queryData = request.getQueryString();out.println("Attached GET data: " + queryData); %> • <% response.setContentType("text/plain"); %>
示例: 根据用户请求定制页面的背景色 • 发送请求时,需要向JSP页面传递一个变量,该变量的值指定背景色 • JSP页面获取变量的值,用来设置页面背景 需要解决: 传递参数:在URL后面使用name-value 对: http://localhost:8080/testjsp/BGColor.jsp?bgColor=yellow 获取参数的值: 从request内置对象获取 String color = request.getParameter(“bgColor”);
示例: 根据用户请求定制页面的背景色 http://localhost:8080/testjsp/BGColor.jsp?bgColor=yellow
JSP声明使用规则 规则1:使用单独的JAVA类而非JSP声明定义绝大多数的方法 实用类:RanUtilities.java
设计策略:限制JSP页面内的Java代码 • 有两种选择: • 将25行Java代码直接放在JSP页面中 • 将这25行代码放在单独的Java类中,在JSP页面中用一行代码调用它 • 为什么第二种选择更好? • 方便开发、调试、测试在Java开发环境(编辑器或IDE)中编写单独的类,而非在HTML环境中。 • 重用。多个页面都可以使用同一个类。
核心方法 • JSP页面中JAVA代码应该有所限制 • 至少使用一些辅助类,然后在JSP中调用它们 • 经验丰富之后,应该考虑使用bean、MVC和定制标签
小结 • JSP表达式 • 格式:<%= expression %> • 封装到out.print中,并插入到_jspService • JSP scriptlet • 格式:<% code %> • 逐字地插入到servlet的_jspService方法中 • JSP声明 • 格式:<%! code %> • 逐字地插入到servlet类的定义体中 • 限制直接放在页面中的Java代码 • 考虑使用辅助类、bean、servlet/JSP的组合(MVC)、JSP表达式语言、定制标签。
任务 • 熟练掌握Web应用的目录结构 • 熟练掌握Web应用的创建和部署的步骤 • 运用JSP 脚本元素编程:教材例 • 掌握向JSP传递参数的方法 • 掌握 import java 类在JSP中使用 任务: — 编写一个java类 实现Fibonacci数列,要求提供一个方法,以数列的维数为参数,以数组返回Fibanacci数列 — 在JSP页面中显示Fibonacci数列 —向JSP传递数列的维数