JSP示例(Hello.jsp) <HTML> <BODY> 你好<br> </BODY>

Slides:



Advertisements
Similar presentations
第 4 章 配合 例子源代码一起使用 Power point 制作:耿祥义 张跃平 普通高等教育 “ 十一五 ” 国家级规划教材 JSP 内置对象.
Advertisements

第 4 章 JSP 内置对象 本章主要内容:  内置对象的概念  内置对象的作用域和生命期  内置对象的作用和关系  内置对象的使用方法.
网络应用程序设计 2014 JavaBean. JavaBean 及其属性 JavaBean 就是一种 Java 的组件技术 JavaBean 是 Java 类 JavaBean 通过约定的方法名实现属性功能 简单属性 void setXxx(Type value) Type getXxx() boolean.
第六讲 JSP 指令. 动态网站建设与规划 主讲:徐洪章 QQ:
7.1 内置对象概述及分类 JSP 视频教学课程. JSP2.2 目录 1. 内置对象简介 1. 内置对象简介 2. 内置对象分类 2. 内置对象分类 3. 内置对象按功能区分 3. 内置对象按功能区分 4. 内置对象作用范围 4. 内置对象作用范围.
Java Web 开发 授课人:张鸽. 第三讲 JSP 内置对象  JSP 有以下九种内置对象,包括:  ·request ,请求对象  ·response ,响应对象  ·pageContext ,页面上下文对象  ·session ,会话对象  ·application ,应用程序对象.
LOGO 第 9 章 Java Servlet 和 JSP 编程 孙焘. 重点: servlet 编程原理 1 servlet 的基础类与编程实现 2 JSP 编程原理 3 JSP 的常用语法 4.
第 7 章 配合 例子源代码一起使用 Power point 制作:耿祥义 张跃平 普通高等教育 “ 十一五 ” 国家级规划教材 JSP 与 JavaBean.
Power point 制作 耿祥义 张跃平 配合 例子源代码一起使用. 第 5 章 JSP 与 JavaBean JavaBean 是一个可重复使用的软件组件, 是遵循一定标准、用 Java 语言编写的一 个类,该类的一个实例称为一个 JavaBean ,简称 bean.
《计算机网络技术》 动态网页制作技术 常用HTML控件课程积件 杨 姝.
第六章 网页设计与制作基础.
动态Web开发技术--JSP.
JSP页面的组成 JSP页面包括JSP元素、注释及HTML元素。 JSP指令:用于将消息传送到JSP引擎。
第 4 章 PHP 基本語法.
JavaServer Pages(JSP) 网页程序设计
第五章 JSP内置对象 第4章学习了页面组成元素和使用方法。本章学习JSP内置对象的使用。使用JSP内置对象,可以方便操作页面,访问页面环境,实现页面内、页面间、页面与环境之间的通讯。 学习目标 熟悉主要内置对象的概念 理解主要内置对象的作用域和生命期 理解主要内置对象的作用和关系 熟悉主要内置对象的使用方法.
基于JSP搭建Web应用程序.
JavaServer Pages(JSP) 网页程序设计
上节课我们是讲解了request, response, session, application 等内置对象,有了它们,我们就可以编写一个完整的应用程序了。 我们来看ebank这个小应用程序的编写。
第5章 HTML 標籤介紹.
第8讲 HTML与PHP基础 静态网页 vs. 动态网页.
HTML概念 HTML(Hyper Text Markup Language 超文本标识语言) 是一种用来制作超文本文档的简单标记语言。
MVC Servlet与MVC设计模式.
第3章 JavaScript语言基础.
在PHP和MYSQL中实现完美的中文显示
5.1 – 表格(FORM) 輸入元素 : 兩種傳遞方法 : GET or POST 範例 1. 文字欄位 Text box
HTML.
ASP动态网页设计实用教程 主讲教师: 开课单位:.
第3章 超文本标记语言(HTML) 3.1 基本结构标记 3.2 文本格式标记 3.3 超链接标记<A></A>
移动开发的灵便迭代之道 黄凯.
Hello World 體驗實作第一個JSP程式.
第四章 網頁表單與資料傳遞.
数据库操作示例 import java.sql.*; //导入java.sql包 public class JDBCDemo {
专题4:JSP脚本和指令.
JSP自定义标签技术的分析与应用 ----Custom Tag 的分析与应用
崑山科技大學資訊管理系 伺服網頁程式設計 系統開發細部流程 教師:游峰碩.
電子商務網站建制技術與實習(II) 助教:江宜政 吳昇洋.
進階 WWW 程式設計 -- PHP Regular Expression 靜宜大學資訊管理學系 蔡奇偉副教授 2004
第六讲 JSP中的文件操作(2) 教学目的 本讲继续讲述JSP中使用Java输入、输出流实现文件的读写操作 。 1 文件上传 2 文件下载
JavaScript 靜宜大學 資管系 楊子青.
走进编程 程序的顺序结构(二).
辅导课程六.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
网 站 设 计 与 建 设 Website design and developments
PHP 變數、常數與運算子 變數 常數 運算子
网站设计 前端 选择器(复习),表单.
任务1-3 使用Dreamweaver创建ASP网页
JavaServer Pages(JSP) 网页程序设计
网页设计与制作教程第5版 机械工业出版社同名教材 配套电子教案.
HTML 103 互動式網頁.
SOA – Experiment 2: Query Classification Web Service
编程作业3:网页正文抽取 (10分).
第3章 Java語法的JSP程式 3-1 Java語言的基礎 3-2 JSP程式的基本架構 3-3 Java的變數與資料型態
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
Ch09 在網頁之間傳遞資訊 網頁程式設計.
JSP程序设计 第9章 Servlet简介.
HTML 103 互動式網頁 助教:黃毓瑩.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
项目二:HTML语言基础.
第4章 Excel电子表格制作软件 4.4 函数(一).
段磊 王慧锋 TEL: 数据库系统原理课程设计 实验环节4 段磊 王慧锋 TEL:
第6章 PHP的数据采集.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
HTML表单 JSP借由标签所构成的表单区块中,取得用户在其中特定字段输入的数据內容 。 JSP 动态网页新技术.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第4章 JSP动态网页设计基础 教学目标 教学重点 教学过程 2019年10月21日.
表单页面 表单是用户利用浏览器对Web站点网络数据库进行查询的一种界面,用户利用表单可以输入信息或选择选项等,然后将这些信息提交给服务器进行处理。通过表单,既可以将浏览器的信息发送到Internet服务器上,同时表单也可以使用户与站点的浏览者交互或从浏览者那里收集信息。它是网页的设计者和使用者相互交流的工具。表单对象包括文本域(单行、多行、密码)、列表、菜单、复选框、单选框、按钮等。
第四章 jsp语法 4.1 jsp页面的基本结构 一个jsp页面可由五种元素组合而成: 普通的html标记符
Presentation transcript:

JSP示例(Hello.jsp) <HTML> <BODY> 你好<br> </BODY> <%@ page contentType="text/html;charset=gb2312" %> <%@ page import="java.util.*"%> <HTML> <BODY> <% for ( int i=0; i<2; i++ ) { %> 你好<br> } </BODY> </HTML>

JSP执行过程 servlet servlet 分析器 JVM request jsp parser *.jsp *.java *.class 执行 response

JSP执行过程

三、JSP编程基础 Java特性及入门基础 HTML简介 3. JavaScript简介

3.2 HTML简介 HTML页面的基本结构 01.html 使用链接标记 link-.html 使用字体标记 font.html form标记的使用 table标记的使用

HTML表单 Web运行原理 HTML表单的概念 表单元素介绍 HTML表单的客户端确认 服务器端的确认

Web运行原理 客户端同Web服务器之间的协议为http HTTP为超文本传输协议 HTPP协议为“请求和响应”协议 客户端请求包括:请求行、头、信息体 客户端请求的方法 GET、POST、HEAD DELETE、TRACE、PUT 提交表单的方法: GET、POST

Web运行原理 服务器接收到请求后,返回HTTP响应 每个响应:状态行、头、信息体 常见状态 信息体用于浏览器显示 404 所请求的文件不存在 500 服务器程序出错 200 OK 成功 信息体用于浏览器显示

HTML表单 表单是具有输入域、文本域的页面 用于客户端同服务器端交互 用户在客户端填写表单,然后“提交” 表单中的信息发送到服务器 服务器返回处理情况

HTML表单标记 表单主标记 表单中的标记 <form>是表单开始标记,</form>结束 <input> <select> </select> <option> <textarea> </textarea> <form>是表单开始标记,</form>结束

表单的例子 <%--表单例子,peixun2.15.jsp文件代码--%> <%@ page contentType="text/html;charset=gb2312"%> <html> <head><title>表单</title><head> <body> <form method="POST" action=""> <p align="center">用户登录 <p align="center"> 用户名:<input type="text" name="User" size="20">      密码:<input type="password" name="pwd" size="20"><br> <br> </form> </body> </html>

运行结果

form标记 描述表单的特性,语法 method表单传输方法 enctype为编码方式 GET方法 POST方法 <form method="POST" action="“ enctype=“”> method表单传输方法 GET方法 POST方法 action为表单处理方式,通常为一个URL enctype为编码方式

<input>标记 表单中输入信息的区域 属性 type 类型 name 名称 id 标识 maxlength 最大字符数 size 输入域宽度 value 域的初始值 button 按钮 用javascript响应

<input>的类型 text 文本 passwowrd 口令方式 checkbox 多选框 name相同 radio 单选按钮 name相同 image 图片 hidden 隐藏表单 发送数据 submit 提交按钮 向服务器提交表单 reset 复位按钮 将表单充置为初始状态

文本框:TEXTAREA 多行文本域:<textarea> </textarea> 参数 COLS:宽度 ROWS:高度 NAME:名称 <textarea NAME=“Computer” ROWS=6 COLS=64> CPU PIV 1500 Memory 512M </textarea>

下拉框:SELECT 定义列表框:<select> </select> 参数 每个项目用option标记 MULTIPLE 可同时选取多行 NAME 名称 SIZE 可见项目数 每个项目用option标记 属性SELECTED出现在option表示选中

select的例子 <select name="area" style="width"50" size="1"> <option value="北京" selected > 北京 </option> <option value="天津" > 天津 </option> <option value="上海" > 上海 </option> <option value="重庆" > 重庆 </option> </select>

表单提交 提交方式: 传输方法依据<form>中的method 传输编码依据<form>中的enctype submit类型按钮提交表单 通过普通按钮的javascript函数 传输方法依据<form>中的method 推荐使用POST 传输编码依据<form>中的enctype 处理方式依据<form>中的action <input type="submit" value=" 提交">

表单清除 reset按钮重置表单为初始值 <input type="reset" value="全部重写"></p>

综合例子 <%--表单综合例子,peixun2.16.jsp文件代码--%> <%@ page contentType="text/html;charset=gb2312"%> <html> <head><title>表单</title><head> <body> <form method="POST" action=""> <p align="center">用户注册 <p align="center"> 用户名:<input type="text" name="User" size="20">     密码:<input type="password" name="pwd" size="20"><br> <br> <p>你喜欢: <input type="checkbox" name="sports" value=football> 足球 <input type="checkbox" name="sports" value=bastketball> 篮球

     性别: <input type="radio" name="sexy" value=male> 男 <input type="radio" name="sexy" value=female> 女 <br><br> <p>你的计算机</p> <textarea NAME=“Computer” ROWS=6 COLS=64> CPU PIV 1500 Memory 512M </textarea><br><br> <p>你计算机的操作系统 <input type="image" name="os" src="images\TURBOLINUX6.GIF">

     你所在地: <select name="area" style="width"50" size="1"> <option value="北京" selected > 北京 </option> <option value="天津" > 天津 </option> <option value="上海" > 上海 </option> <option value="重庆" > 重庆 </option> </select> <br> <br> <input type="submit" value=" 提交"> <input type="reset" value="全部重写"></p> </form> </body>

运行结果

表单的确认 客户端确认 减少服务器负载 缩短用户等待时间 兼容性难 服务器端确认 统一确认 兼容性强 服务器负载重

客户端确认 采用javascript进行确认 常用函数 isBetween isDate isTime isDigit isEmail isEmpty isInt isReal

客户端确认例子 <%--客户端确认例子,test.jsp文件代码--%> <%@ page contentType="text/html;charset=gb2312"%> <html> <head><title>客户端确认</title><head> <body> <form method="POST" name="frm1" onsubmit="return checkform(frm1)"> <p align="center">用户登录 <p align="center"> 用户名:<input type="text" name="name" size="20">     密码:<input type="password" name="pwd" size="20"><br> <br> <input type="submit" value=" 提交"> <input type="reset" value="全部重写"></p> </form>

<SCRIPT language=JavaScript> function checkform(frm){ var flag=true; if(frm.name.value=="") { alert("姓名不能为空,请输入值!"); frm.name.focus(); flag=false; } return flag; </SCRIPT> </body> </html>

运行结果

JSP与客户机的交互 从表单中获得参数 返回参数 表单的服务器端确认

从表单中获得参数 JSP通过request内置对象获取表单信息 用不同的方法获取不同种类的信息 获取参数的主要方法: getParameter() 获取参数的值 getParameterNames() 获取所有参数名的枚举 getParameterValues() 获取一个参数的多个值

getParameter() 可以获得文本框、文本区域、单选、多选的值 表单中各元素的NAME属性是它的唯一标识,用它获取参数。 例如: <input type="text" name="User" > request.getParameter("User");

向客户端输出 使用内置对象out 使用“<%= %>” 使用内置对象applicatioin <%=User % > out.println(“用户名:" +User+"<br>"); 使用“<%= %>” <%=User % > 使用内置对象applicatioin <%= application.getAttribute(“counter”)%>位访问者! ……

表单的服务器端确认 在客户端不能用JSP进行确认 分工:数据处理在服务器端 实效性:客户端得到服务器确认后表明数据已经到达服务器 客户端兼容性好 缺点:增加服务器负载和用户等待时间

服务器端确认方法 采用Java类对表单数据进行检查 采用JSP进行确认

服务器端确认的例子 <%--服务器端确认例子,test.jsp文件代码--%> <%@ page contentType="text/html;charset=gb2312"%> <html> <head><title>服务器端确认</title><head> <body> <form method="POST" name="frm1" action="loginAction.jsp"> <p align="center">用户登录 <p align="center"> 用户名:<input type="text" name="name" size="20">   密码:<input type="password" name="pwd" size="20"><br> <br> <input type="submit" value=" 提交“ > <input type="reset" value="全部重写"></p> </form> </body> </html>

loginAction.jsp <%--服务器端确认例子,loginAction.jsp确认表单文件代码--%> <%@ page contentType="text/html;charset=gb2312"%> <html> <head><title>确认JSP</title></head> <body> <% String name=request.getParameter("name"); String pwd=request.getParameter("pwd"); if((name!=null)&&(!name.equals(""))) { name=new String(name.getBytes("ISO8859_1"), "gb2312"); out.println("用户名:" +name+"<br>"); out.println("密码:"+pwd+"<br>"); } else{ %>

<p align="center">用户名不能为空</p><br><br> <form method="POST" name="frm1" action="loginAction.jsp"> <p align="center">用户登录 <p align="center"> 用户名:<input type="text" name="name" size="20" value="<%=name%>">      密码:<input type="password" name="pwd" size="20" value="<%=pwd%>"><br> <br> <input type="submit" value=" 提交"> <input type="reset" value="全部重写"></p> </form> <%}%> </body> </html>

运行结果(TOMCAT)

(未输入姓名)直接提交

输入用户名

输入用户名后提交

3.3 JavaScript简介 JavaScript是脚本语言,用来实现客户端的特 效,客户端用户信息输入的验证等。 myjsp/02/formcheck.htm

四、 服务器配置 Tomcat应用服务器 Resin应用服务器

五、 JSP语法 JSP的脚本语句 JSP的编译指示语句 JSP的动作语句

JSP文件结构及主要标签 <%@ page contentType="text/html;charset=gb2312" %> <%@ page import="java.util.*“ %> ... <HTML> <BODY> 其他 HTML 语言 <% 符合JAVA 语法的 JAVA 语句 %> </BODY> </HTML>

JSP示例(Hello_Date.jsp) <%@ page import="java.util.*" %> <%@ page contentType="text/html; charset=gb2312" %> <HTML> <BODY> 你好,今天是 <% Date today=new Date(); %> <%=today.getDate()%>号, 星期<%=today.getDay()%> </BODY> </HTML> import java.util.*; response.setContentType("text/html; charset=gb2312"); out = pageContext.getOut(); out.write(“\r\n\r\n<HTML>\r\n <BODY>\r\n你好,今天是\r\n"); Date today=new Date(); out.print(today.getDate()); out.write("号,星期"); out.print(today.getDay()); out.write(" \r\n </BODY>\r\n</HTML>\r\n "); servlet文件 JSP文件

JSP语法概述 JSP原始代码中包含了JSP元素和Template(模板) data两类 Template data指的是JSP引擎不处理的部分,即标记<%……%>以外的部分,例如代码中的HTML的内容等 ,这些数据会直接传送到客户端的浏览器 JSP元素则是指将由JSP引擎直接处理的部分,这一部分必须符合JSP语法,否则会导致编译错误。

jsp例子(hi.jsp) Template data JSP元素 <html> <head> <title>Hi-JSP实验</title> </head> <body>  <% String Msg = "This is JSP test.";  out.print("Hello World!"); %> <h2><%=Msg%></h2> </body> </html> Template data JSP元素

JSP语法 JSP语法分为三种不同的类型 编译器指令(DIRECTIVE) 例如: <%@ page import=“java.io.*” %> 脚本语法(SCRIPTING) 动作语法(ACTION) 例如: <jsp:forward> <jsp:getProperty>,<jsp:include>

JSP中的脚本语句 脚本语句包括 “HTML注释”:<!— comments --> “声明”: <%! int age;%> “表达式” <%=age%> “脚本段” <% scriplet代码段 %>

JSP的编译指示语句 编译器指令包括“include”指令, “page”指令和“taglib”指令 它们包含在“<%@ %>”卷标里。

JSP的动作语句 动作语法包括 <jsp:forward>,<jsp:include>,<jsp:plugin>, <jsp:getProperty>,<jsp:setProperty>,<jsp:useBean>。

HTML注释 JSP 语法格式如下: <!-- comment [ <%= expression %> ] --> 或 <!-- 注释 [<%= 表达式 %> ] --> 这种注释发送到客户端,但不直接显示,在源代码中可以查看到,JSP指令仍被编译执行。

HTML注释(teach\4-1.jsp) HTML> <HEAD> <TITLE>HTML注释</TITLE> </HEAD> <BODY> <!-- 测试注释使用的程序 --> <p> <b><font size="+3">显示出来的文字!</font></b> </BODY> </HTML>

HTML注释(4-2.jsp) <html> <head> <title>要多加练习</title> </head> <body> <!-- 这个页面在<%= new java.util.Date()%>被访问 --> 在源文件中包括当前时间。 </body> </html>

隐藏注释 JSP 语法格式如下: <%-- 注释 --%>

隐藏注释 (4-3.jsp) <html> <head> <title>A Comment Test</title> </head> <body> <h2>A Test of Comments</h2> <%-- This comment will not be visible in the page source --%> </body> </html>

声明 JSP 语法格式如下: <%! declaration; [ declaration; ] ... %> <%@ page language=”java” import=”java.util.*” %> <html> <body> <%! int i = 0; %> <%! int a, b, c; %> <%! Date date; %> </body> </html> 4-4.jsp

表达式 用于在页面上输出信息,语法格式如下: <%= expression %>

表达式(4-5.jsp) <%@ page language="java" import="java.util.*" %> <html> <head> <title> test </title> </head> <body> <center> <%! Date date=new Date(); %> <%! int a, b, c; %> <% a=12;b=a; c=a+b;%> <font color="blue"> <%=date.toString()%> </font> <br> <b>a=<%= a %></b><br> <b>b=<%= b %></b><br> <b>c=<%= c %></b><br> </center> </body> </html>

4-5.jsp执行结果

Scriptlet脚本段 JSP 语法格式如下: <% code fragment %>

4-6.jsp <%@ page language="java" import="java.util.*" %> <html> <body> <%! int condition=2;%> <% switch(condition){ case 0: out.println("You select condition 0!"+"<br>"); break; case 1: out.println("You select condition 1!"+"<br>"); case 2: out.println("You select condition 2!"+"<br>"); default: out.println("Your select not in 0,1,2“); } %> </body> </html> 4-6.jsp

include包含指令 JSP 语法格式如下: <%@ include file="relativeURL" %> 或

<html> <head> <title>test</title> </head> <body bgcolor="white"> <font color="blue"> The current date and time are <%@ include file=“curDate.jsp" %> </font> </body> </html>  //curDate.jsp <%@ page import="java.util.*" %> <%=(new java.util.Date() ).toLocaleString() %>

Page指令 “Page”指令用于定义JSP文件中的全局属性。 JSP 语法格式如下: <%@ page   JSP 语法格式如下: <%@ page [ language="java" ] [ extends="package.class" ] [import="{package.class | package.*},..." ] [ session="true | false" ] [ buffer="none | 8kb | sizekb" ]          

Page指令 [ autoFlush="true | false" ] [ isThreadSafe="true | false" ]  [ info="text" ]  [ errorPage="relativeURL" ] [ contentType="mimeType [;charset=characterSet]" | "text/html; charset=ISO-8859-1" ] [ isErrorPage="true | false" ] %>  

page指令详说 “<%@ page %>”指令作用于整个JSP页面,同样包括静态的包含文件。但是“<%@ page %>”指令不能作用于动态的包含文件,比如 “<jsp:include>”。 可以在一个页面中用上多个“<%@ page %>”指令,但是其中的属性只能用一次,不过也有例外,那就是import属性。因为import属性和Java中的import语句类似(参照Java Language,import语句引入得是Java语言中的类),所以此属性就能多用几次。 无论把“<%@ page %>”指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。不过,为了JSP程序的可读性,以及好的编程习惯,最好还是把它放在JSP文件的顶部。

page指令(4-9.jsp) <%@ page import=“java.util.*” %> <%@ page buffer="24kb" autoFlush="false" %> <%@ page errorPage="error.jsp" %> <html> <head> <title>test</title> </head> <body> Test for using 'Page'. </body> </html>

taglib指令 JSP语法 <%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %> 用于引入定制标签库

taglib指令 属性 1.uri="URIToTagLibrary" Uniform Resource Identifier (URI)根据标签的前缀对自定义的标签进行唯一的命名,URI可以是以下的内容: Uniform Resource Locator (URL), 由 RFC 2396 定义, 可以从以下位置查看 (http://www.hut.fi/u /jkorpela/rfc/2396/full.html)。  Uniform Resource Name (URN), 由 RFC 2396定义 一个相对或绝对的路径   可以是标签库描述文件

2.prefix="tagPrefix" 表示标签在JSP中的名称。 在自定义标签之前的前缀,比如,在<public:loop>中的public,如果这里不写public,那么这就是不合法的。请不要用jsp, jspx, java, javax, servlet, sun, 和sunw做为你的前缀,这些已被Sun公司声明保留。

Tablib示例 <%@ taglib uri="http://www.jspcentral.com/tags" prefix="public" %> <html> <head> <title>test</title> </head> <body> <public:loop> <%-- 执行代码 --%> </public:loop> </body> </html>

<jsp:forward> JSP语法格式如下: 1.<jsp:forward page={"relativeURL" | "<%= expression %>"} /> 2.<jsp:forward page={"relativeURL" | "<%= expression %>"} > <jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" /> [<jsp:param … />] </jsp:forward> (可以有多个 [<jsp:param … />] … <jsp:param/>]标记。)

1、page="{relativeURL | <%= expression %>}" 这里是一个表达式或是一个字符串用于说明你将要定向的文件或URL。这个文件可以是JSP,程序段,或者其它能够处理request对象的文件(如asp,cgi,php)。  2.<jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" /> 向一个动态文件发送一个或多个参数,如果想传递多个参数,可以在一个JSP文件中使用多个“<jsp:param>”;“name”指定参数名,“value”指定参数值。 3. “<jsp:forward>”标签从一个JSP文件向另一个文件传递一个包含用户请求的request对象。“<jsp:forward>”标签以后的代码将不执行。

<jsp:forward>例子 <%@ page contentType="text/html;charset=gb2312" %> <html> <head> <title>test</title> </head> <body> <jsp:forward page="forwardTo.jsp"> <jsp:param name="userName" value=“Mike"/> </jsp:forward> </body> </html>

forwardTo.jsp (teach/jsp4/forward.html, testforward1.jsp) <%@ page contentType="text/html;charset=gb2312" %> <!--forwardTo.jsp--> <% String useName=request.getParameter("userName"); String outStr= "谢谢光临!"; outStr+=useName; out.println(outStr); %> (teach/jsp4/forward.html, testforward1.jsp)

<jsp:include> 包含一个静态或动态文件,JSP 语法格式如下: 1.<jsp:include page="{relativeURL | <%=expression%>}"   flush="true" /> 2.<jsp:include page="{relativeURL | <%=expression %>}"   flush="true" > <jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" /> [<jsp:param …/>] </jsp:include> (“[<jsp:param … />]”指可以有多个“<jsp:param/>”标记) 注意:在JSP页面被请求时才将指定文件的内容插入到服务器的 响应输出中。

<jsp:include>的属性 1.page="{relativeURL | <%=expression %>}" 参数为一相对路径,或者是代表相对路径的表达式。  2.flush="true" 这里必须使用flush=“true”,不能使用false值。而缺省值为false 。 3.<jsp:param name="parameterName" value="{parameterValue | <%= expression %> }"/> “<jsp:param>”用来传递一个或多个参数到指定的动态文件,能在一个页面中使用多个“<jsp:param>”来传递多个参数,  

<jsp:include> 例子(peixun2.10.jsp) <html> <head> <title>peixun.2.10.jsp</title> </head> <body> <jsp:include page=“included.jsp" flush="true" > <jsp:param name="User" value="HiFi King" /> </jsp:include> </body> </html>

included.jsp <% String username; username=request.getParameter("User"); out.println("Username is "+username+"<br>"); %>

<jsp:include>运行结果

<jsp:plugin> 使用“<jsp:plugin>”插入一个applet或Bean,必要的话还要下载一个Java插件用于执行它。 JSP 语法格式如下: <jsp:plugin type="bean | applet" code="classFileName" codebase="classFileDirectoryName"

[ name="instanceName" ] [ archive="URIToArchive, ..." ] [ align="bottom | top | middle | left | right"] [ height="displayPixels" ] [ width="displayPixels" ] [ hspace="leftRightPixels" ] [ vspace="topBottomPixels" ] [ jreversion="JREVersionNumber | 1.1" ] [ nspluginurl="URLToPlugin" ] [ iepluginurl="URLToPlugin" ] >

[ <jsp:params> [ <jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" /> ]  </jsp:params> ]  [ <jsp:fallback> text message for user </jsp:fallback> ] </jsp:plugin>

<jsp:plugin>例子 <jsp:plugin type=applet code="MediaPlay.class" codebase="../classes">     <jsp:params>           <jsp:param name="way" value="Hall" />     </jsp:params>     <jsp:fallback>           <p>Unable to load applet</p>     </jsp:fallback> </jsp:plugin>

<jsp:useBean> 创建一个JavaBean实例并指定它的名字和作用范围。 JSP 语法格式如下: <jsp:useBean id="beanInstanceName"   scope="page | request | session | application"   class="package.class" | type="package.class" …… > </jsp:useBean>            

属性以及用法 1.id="beanInstanceName" 在所定义的范围中确认Bean的变量,使之能在后面的程序中使用此变量名来分辨不同的Bean ,这个变量名对大小写敏感,必须符合所使用的脚本语言的规定,这个规定在Java Language 规范已经写明。如果Bean已经在别的“<jsp:useBean>”标记中创建,则当使用这个已经创建过Bean时,id的值必须与原来的那个id值一致;否则则意味着创建了同一个类的两个不同的对象。 

2.scope="page|request|session|application" Bean存在的范围以及id变量名的有效范围。缺省值是page,以下是详细说明: page - 能在包含“<jsp:useBean>”元素的JSP文件以及此文件中的所有静态包含文件中使用这个Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。 request - 在任何执行相同请求的Jsp文件中使用这个Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。能够使用Request对象访问这个Bean,比如request.getAttribute(beanInstanceName)。 session - 从创建Bean开始,就能在任何使用相同session的jsp文件中使用这个Bean。这个Bean存在于整个Session生存周期内,任何在分享此Session的Jsp文件都能使用同一Bean。注意在创建这个Bean的Jsp文件中“<% @ page %>”指令中必须指定“session=”true“”。 application - 从创建Bean开始,就能在任何使用相同application的Jsp文件中使用Bean。这个Bean存在于整个application生存周期内,任何在分享此application的Jsp文件都能使用同一Bean.  

3.class="package.class" 4.type="package.class" 使用new关键字以及class构造器从一个class中实例化一个bean。这个class不能是抽象的,必须有一个公用的,没有参数的构造器。这个package的名字区别大小写。  4.type="package.class" 如果这个Bean已经在指定的范围中存在,那么赋予这个Bean一个的数据类型 。如果使用type属性的同时没有使用class或beanName,Bean将不会被实例化。注意package和class的名称区分大小写。

<jsp:getProperty> <jsp:getProperty name="beanInstanceName" property="propertyName" />   1.name="beanInstanceName"   bean的名字,由<jsp:useBean>指定。  2.property="propertyName" 所指定的Bean的属性名。

<jsp:getProperty>例子 <html> //声明引用的bean <jsp:useBean id="calendar" scope="page" class="employee.Calendar" /> <head> <title>test</title> </head> <body> Calendar of <jsp:getProperty name="calendar" property="username" /> </body> </html>

<jsp:setProperty> 设置Bean的属性值. JSP 语法格式如下: <jsp:setProperty name="beanInstanceName"    property= "*"   | property="propertyName" param="parameterName" ] | property="propertyName" value="{string|<%= expression %>}"  />

属性 1.name="beanInstanceName" 表示已经在“<jsp:useBean>”中创建的Bean实例的名字。 2.property="*" 储存用户在jsp输入的所有值,用于匹配Bean中的属性。 3.property="propertyName" [ param="parameterName" ] 用一个参数值来指定Bean中的一个属性值,一般情况下是从request对象中获得的。其中property指定Bean的属性名,param指定request中的参数名。 4.property="propertyName" value="{string | <%= expression %>}" 使用指定的值来设定Bean属性。这个值可以是字符串,也可以是表达式。如果这个字符串,那么它就会被转换成Bean属性的类型。如果是一个表达式,那么它的类型就必须和将要设定的属性值的类型一致。 如果参数值为空值,那么对应的属性值也不会被设定。此外,不能在同一个“<jsp:setProperty>”中同时使用param和value参数 。

例子 例://建立javaBean: myBean.Student package myBean; public class Student { private long classNo; private String name; private int age; private boolean sexy; public Student() { //构造函数 classNo=970431; name="ZZZl"; age=34; sexy=true; } public long getClassNo() { return classNo; public void setClassNo(long no) { this.classNo=no;

public String getName() { return name; } public void setName(String name) { this.name=name; public int getAge() { return age; public void setAge(int age) { this.age=age; public boolean getSexy() { return sexy; public void setSexy(boolean sexy) { this.sexy=sexy;

<%--JavaBean.jsp文件,理解useBean动作的scope作用范围 --%> <html> <body> <%-- 引用自己编写的javaBean生成的bean组件 --%> <jsp:useBean id="student" scope="application" class=“myBean.Student" /> <%=student.getname()%><br> <% student.setname("cong"); %> <jsp:setProperty name="student" property=“name“ value= “cong“ /> <br> <%-- 用getProperty动作来返回bean组件的属性值 --%> <jsp:getProperty name="student" property="classNo" /> <br> <jsp:getProperty name="student" property="name" /> <br> <jsp:getProperty name="student" property="age" /> <br> <jsp:getProperty name="student" property="sexy" /> <br> <%-- 取属性值 --%> <%=student.getClassNo() %> <br> <%=student.getName() %> <br> <%=student.getAge() %> <br> <%=student.getSexy() %> <br>

<%--引用Java类库中生成的bean组件 --%> <jsp:useBean id="date" scope="session" class="java.util.Date" /> <%=date%><br> </body> </html>

第一次运行结果

以后运行结果 第一行发生变化

测试session作用域 <%--JavaBean1.jsp文件,理解useBean动作的scope作用范围--> <%@ page contentType="text/html;charset=gb2312" %> <html> <body> <%-- 引用自己编写的javaBean生成的bean组件 --%> <jsp:useBean id="student" scope="session" class=“myBean.Student" /> <!-- 用setProperty动作设定bean组件的属性值--> <jsp:setProperty name="student" property="classNo" value="000001"/> <jsp:setProperty name="student" property="name" value="wanglan"/> <jsp:setProperty name="student" property="age" value="22"/> <jsp:setProperty name="student" property="sexy" value="true"/>

<%-- 取属性值 --%> <%=student.getClassNo() %> <br> <%=student.getName() %> <br> <%=student.getAge() %> <br> <%=student.getSexy() %> <br> <!--用JSP类属性设定bean组件的属性值--> <%student.setClassNo(000002); %> <%student.setName("John"); %> <%student.setAge(26); %> <%student.setSexy(false); %> <br> </body> </html>

运行结果

3.4 JSP内置对象 JSP 有以下九种内置对象,包括: request,请求对象 response,响应对象 pageContext,页面上下文对象 session,会话对象 application,应用程序对象 out,输出对象 config,配置对象 page,页面对象 exception,例外对象

综述 有几种对象和ASP的内置对象差不多,功能也类似,这是因为这些内置对象的构建基础是标准化的HTTP协议。从本质上讲,JSP的这些内置对象其实都是由特定的Java类所产生的,在服务器运行时根据情况自动生成,表3.1给出了他们的对应关系。需要注意的问题是对象名的写法,包括这些对象方法的调用都要注意大小写。

JSP内置对象映射表

request和response “request” 对象代表的是来自客户端的请求,例如我们在FORM表单中填写的信息等,是最常用的对象。关于它的方法使用较多的是getParameter、getParameterNames和getParameterValues,通过调用这几个方法来获取请求对象中所包含的参数的值 “response” 对象代表的是对客户端的响应,也就是说可以通过“response”对象来组织发送到客户端的数据。发送文字时直接使用“out” 对象即可。 response.sendRedirect(“URL”); response.setContentType(”text/html”);

request getParameter示例 <html><body> <form action="./Hello_req.jsp"> 姓名<input type="text" name="UserName"> <input type="submit" value="提交"> </form> </body></html>

request对象示例(Hello_req.jsp) <%@ page contentType="text/html;gb2312" %> <%@ page import="java.util.*" %> <HTML> <BODY> 你好, <%! String Name;%> <% Name=request.getParameter("UserName"); %> <%=Name%>, 今天是 Date today=new Date(); <%=today.getDate()%>号,星期<%=today.getDay()%> </BODY> </HTML>

输出结果 /teach/jsp6/login.html -> jsp6/jsp/login.jsp <HTML> <BODY> 你好, 独孤求败, 今天是 9号,星期1 </BODY> </HTML> /teach/jsp6/login.html -> jsp6/jsp/login.jsp

request对象其他方法 1.getAttribute 原型:public java.lang.Object getAttribute(java.lang.String name) 说明:以对象的形式返回特定名称的属性值。 参数:name 一个标示属性名的字符串 返回值:一个包含属性值的对象,当属性不存在是为空。 2. getContentLength、getServerPort()、getServerName()、getProtocol、getRemoteAddr、getHeaderNames、 getMethod()、getServletPath、isRequestedSessionIdValid /teach/jsp6/form.html

out对象 testBuffer.jsp ; testSystem.jsp “out” 对象代表了向客户端发送数据的对象,与“response” 对象不同,通过“out” 对象发送的内容将是浏览器需要显示的内容,是文本形式的,可以通过“out” 对象直接向客户端写一个由程序动态生成HTML文件。常用的方法除了pirnt和println之外,还包括clear、clearBuffer、flush、getBufferSize和getRemaining,这是因为“out” 对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。 testBuffer.jsp ; testSystem.jsp

session对象 “session” 对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。“session” 对象建立在cookie的基础上,所以使用时应注意判断一下客户端是否打开了cookie。常用的方法包括getId、 getValue、 getValueNames和putValue等。

session对象 概要 HTTP是无状态(stateless)协议; Web服务器对每一个客户端请求都没有历史记忆; 存于客户端; 客户端的每次访问都把上次的session记录传递给Web服务器; Web服务器读取客户端提交的session来获取客户端的状态信息;

session对象示例(Form表单—Logon_session.html) <html><body> <form action="./Logon_session.jsp"> 姓名<input type="text" name="UserName"> <input type="submit" value="提交"> </form> </body></html>

session对象示例 Logon_session.jsp <%@page contentType="text/html;gb2312" %> <%@page import="java.util.*" %> <HTML> <BODY> <% String Name=request.getParameter("UserName"); session.putValue("LogName", Name); %> 你的名字"<%=Name%>"已经写入session <br> <a href='./check_session.jsp'>check</a> </BODY> </HTML>

session对象示例(Check_session.jsp) <%@page contentType="text/html;gb2312" %> <HTML><BODY> <% String yourName=(String)session.getValue("LogName"); if (yourName= =null) { %>您还未登录 }else %> "<%=yourName%>"已经登录 } </BODY></HTML>

session使用示例 /teach/jsp6/testsession.html ->testsession1.jsp->testsession2.jsp->testsession3.jsp

cookie对象 用来保存少量的信息 /myjsp/06/VisitTimes.jsp <%@ page contentType="text/html;charset=GBK" %> <% int Counter = 0; // 得到所有的Cookie Cookie cookies[] = request.getCookies(); if(cookies != null) { for(int i=0; i<cookies.length; i++) { if(cookies[i].getName().equals("Counter")) Counter = Integer.parseInt(cookies[i].getValue()) + 1; } // 首次登陆,需要创建Cookie ; 以后登陆,需更新Cookie Cookie c = new Cookie("Counter", ""+Counter); c.setMaxAge(60*60*24*365); // Cookie response.addCookie(c); %>

<html> <head> <title>显示登陆次数</title> </head> <body bgcolor="#FFFFFF"> <% if(Counter == 0) { out.println("<Script>"); out.println("alert('欢迎首次光临!')"); out.println("</Script>"); } else { out.println("alert('您已经光临了" + Counter + " 次')"); %> </body> </html>

application对象 application对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有log()、getMajorVersion()、getMinorVersion()、getMimeType()、getRealPath()、getResouce()、getResourceAsStream()、getRequestDispatcher()等。 session用来保存用户的个人信息,application是保存所有用户的公共信息。 application.setAttribute(“counter”,”0”);

application对象实现网页计数器 <%--用application实现网页计数器teach/peixun2.14.jsp--%> <%@ page contentType="text/html;charset=gb2312"%> <html> <head><title>网页计数器</title><head> <body> <% if (application.getAttribute("counter")==null) application.setAttribute("counter","1"); else{ String strnum=null; strnum=application.getAttribute("counter").toString(); int icount=0; icount=Integer.valueOf(strnum).intValue(); icount++; application.setAttribute("counter",Integer.toString(icount)); } %> 您是第<%=application.getAttribute("counter")%>位访问者! </body> </html>

运行结果(第一次访问)

刷新一次

application使用示例 留言板例子: teach/jsp6/board1.jsp->board2.jsp->board3.jsp

pageContext teach/jsp6/testpagecontext.jsp “pageContext” 对象直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属性,常用的方法包括findAttribute、getAttribute、getAttributesScope和getAttributeNamesInScope,一般情况下“pageContext” 对象用的不是很多,只有在项目所面临的情况比较复杂的情况下,才会利用到页面属性来辅助处理。 getServletConfig、getSession、getServletContext、 getOut、getRequest等。 teach/jsp6/testpagecontext.jsp

config、 page、 exception “config” 对象提供一些配置信息,常用的方法有getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。使用getServletContext()来代替application对象。teach/jsp6/testconfig.jsp “page” 对象代表了正在运行的由JSP文件产生的类对象。 testpage.jsp “exception” 对象则代表了JSP文件运行时所产生的例外对象,此对象不能在一般JSP文件中直接使用,而只能在使用了“<%@ page isErrorPage=”true “%>”的JSP文件中使用 testexception.jsp

exception对象示例 <html> <%@page import="java.io.*" errorPage="error.jsp"%> <head><title>test4.10.jsp</title><head> <body> <% File theFile; FileInputStream sFile; theFile=new File("noThisFile.txt"); sFile=new FileInputStream(theFile); %> </body> </html>

exception对象示例 <%--exception对象示例,error.jsp文件代码--%> <%@ page contentType="text/html; charset=gb2312"%> <html> <%@page isErrorPage="true"%> <head><title>error.jsp</title></head> <body> <% out.println("看到这句话就表示发生了错误!<br>"); out.println("exception.getMessage()="+exception.getMessage()); %> </body> </html>

JSP内置对象小结 介绍了JSP的几种内置对象。熟练使用这些内置对象是开发JSP应用程序的基本要求,尤其是对于request、session和application对象更是必须要掌握的。 会使用对象所具有的方法,能熟练使用每一种对象的几种常用方法。

JSP的汉字问题的原理 客户端和服务器用gb2312 HTTP传输编码用ISO8859_1 服务器需要指示客户端文档的编码方式

JSP的汉字问题出现环节 客户端显示文档时的编码方式(由服务器中的JSP、Servlet指明) 客户端发送汉字时自动转换为iso8859_1 服务器中采用gb2312对汉字编码,接收到客户端汉字需要转换为gb2312 服务器端将JSP转换为Servlet时自动将汉字转换为iso8859_1 服务器端应该告诉客户端汉字的编码方式

JSP汉字问题 JSP文件的汉字问题 表单处理的汉字问题 Servlet的汉字问题 JDBC的汉字问题

JSP文件的汉字问题 JSP中的汉字字符串在服务器端用gb2312 在编译为Servlet时自动转换为iso8859_1 汉字在传输中是正确的 在没有特别指示下,浏览器中无法正确显示 在HTML中指示浏览器文档的编码 <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 在JSP中指示JSP引擎文档的编码 <%@ page contentType="text/html;charset=gb2312"%> 每个要显示汉字的JSP文档都应该包含该语句

JSP文件的汉字问题(JSPhanzi.jsp) <html> <head> <title>JSP中的汉字问题</title> </head> <body> 你好 </body> </html> <%--JSP的汉字问题JSPhanzi.jsp--%> <html> <head> <title>JSP中的汉字问题</title> </head> <body> <% String HelloMsg="你好"; out.println(HelloMsg); %> </body> </html>

JSP中增加编码指示后 <html> <head> <title>JSP中的汉字问题</title> </head> <body> 你好 </body> </html> <%--JSP的汉字问题JSPhanzi.jsp--%> <%@ page contentType="text/html; charset=gb2312"%> <html> <head> <title>JSP中的汉字问题</title> </head> <body> <% String HelloMsg="你好"; out.println(HelloMsg); %> </body> </html>

表单处理中的汉字问题 表单处理涉及到客户端和服务器的完整交互过程 在客户端和服务器是gb2312,传输用ISO8859_1 name=new String(name.getBytes("ISO8859_1"), "gb2312"); 服务器端指示客户端汉字的显示编码 <%@ page contentType="text/html;charset=gb2312"%>

表单处理的汉字问题(hanzi.jsp) <%--表单处理的汉字问题,hanzi.jsp文件代码--%> <html> <head><title>表单处理的汉字问题</title><head> <body> <form method="POST" name="frm1“ action="hanziAction.jsp"> <p align="center">用户登录 <p align="center"> 用户名: <input type="text" name="name" size="20"> <input type="submit" value=" 提交"> </form></body></html> <%--表单处理的汉字问题,hanzi.jsp文件代码--%> <%@ page contentType="text/html;charset=gb2312"%> <html> <head><title>表单处理的汉字问题</title><head> <body> <form method="POST" name="frm1" action="hanziAction.jsp"> <p align="center">用户登录 <p align="center"> 用户名:<input type="text" name="name" size="20"> <input type="submit" value=" 提交"> </form> </body> </html>

处理过程 <html> <head> <title>表单中汉字的处理</title> <body> 用户名:????<br> </body> </html> <%--hanziAction.jsp--%> <%@page contentType="text/html; charset=gb2312"%> <html> <head> <title>表单中汉字的处理</title> </head> <body> <% String name=request.getParameter("name"); //name=new String(name.getBytes( "ISO8859_1"), "gb2312"); out.println("用户名:" +name+"<br>"); %> </body> </html>

处理过程(修改后) <html> <head> <title>表单中汉字的处理</title> </head> <body> 用户名:测试<br> </body> </html> <%--hanziAction.jsp--%> <%@page contentType="text/html; charset=gb2312"%> <html> <head> <title>表单中汉字的处理</title> </head> <body> <% String name=request.getParameter("name"); name=new String(name.getBytes( "ISO8859_1"), "gb2312"); out.println("用户名:" +name+"<br>"); %> </body> </html>

Servlet的汉字问题 1. 某个页面提交中文内容给Servlet,Servlet要对提交的内容 代码来解决问题: httpServlerRequest.setCharacterEncoding(“GB2312”); 2. Servlet写中文内容到某个页面, servlet中增加以下代码: httpServlerResponse.setContentType("text/html; charset=gbk" ); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { response.setContentType("text/html; charset=gbk" ); response.getWriter().println(“中文”); }

JDBC的汉字问题 从数据库中取出中文的转换 Result rs; String name = rs.getString(“name”); name = new String(desc.getBytes(“ISO-8859-1”),”GB2312”);

FTP ftp://ftp.hdss.org/teacher/xxl