187
J2EE J2EE 初初初初 初初初初 初初初初 初初初 Email: [email protected] Phone: 13067790070/15968847 966 FTP 初初 ftp://ftp.hdss.org/te acher/xxl

JSP 示例 (Hello.jsp)

  • Upload
    prem

  • View
    69

  • Download
    7

Embed Size (px)

DESCRIPTION

JSP 示例 (Hello.jsp). 你好 你好 .

Citation preview

Page 1: JSP 示例 (Hello.jsp)

J2EEJ2EE 初级开发初级开发主讲老师:徐小良 Email: [email protected]

Phone: 13067790070/15968847966

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

Page 2: JSP 示例 (Hello.jsp)

目录目录一、 J2EE 概述二、 J2EE Web 应用架构三、 JSP 组件开发四、 Servlet 开发技术五、 JDBC 连接数据库技术六、 JavaBean 组件开发

Page 3: JSP 示例 (Hello.jsp)

一、一、 J2EEJ2EE 架构介绍架构介绍

Page 4: JSP 示例 (Hello.jsp)

典型的典型的 J2EEJ2EE 多层结构和服务多层结构和服务

Page 5: JSP 示例 (Hello.jsp)

J2EEJ2EE 的四层结构的四层结构

Page 6: JSP 示例 (Hello.jsp)

模型模型 -- 视图视图 -- 控制器结构控制器结构 (MV(MVC)C)

视图 控制器 模型

D/ HTMLJ ava Appl etsJ ava cl i ents

J SP Pages

Servl etsSessi on Beans

J avaBeansEnti ty Beans

DatabaseLegacy Systems

Page 7: JSP 示例 (Hello.jsp)

二、 二、 J2EE WebJ2EE Web 应用架构应用架构 JSP 概述JSP 如何工作? 模型 1 体系结构 模型 2 体系结构 (MVC) Struts 框架结构

Page 8: JSP 示例 (Hello.jsp)

JSPJSP 概述概述 C/S 模式与 B/S 模式 B/S 模式主流技术介绍 CGI 、 ASP 、 PHP 、 Servlet 、 JSP

JSP 技术及优势

Page 9: JSP 示例 (Hello.jsp)

JSP 如何工作?

Page 10: JSP 示例 (Hello.jsp)

JSPJSP 示例示例 (Hello.jsp)(Hello.jsp)

<%@ page contentType="text/html;charset=gb2312" %><%@ page import="java.util.*"%>

<HTML> <BODY> <% for ( int i=0; i<2; i++ ) { %> 你好 <br> <% } %> </BODY></HTML>

<HTML> <BODY> 你好 <br> 你好 <br> </BODY></HTML>

Page 11: JSP 示例 (Hello.jsp)

JSPJSP 执行过程执行过程

*.jsp *.java *.classrequest

response

执行jsp parser JVM

servletservlet 分析器

Page 12: JSP 示例 (Hello.jsp)

JSPJSP 执行过程执行过程

response

request

Cl i ent

Server

J SP查找对应的 文件

是否存在

Y

N

是否是修改或创建后第一次调用

Y

J sp Parser调用 将其Servl et转换成 程序

J SDK Servl et调用 将对应的Servl et程序编译成 字节码

( )执行 若未载入则先载入J ava已有的对应的 字节码

N

Page 13: JSP 示例 (Hello.jsp)

模式 1 体系结构

Page 14: JSP 示例 (Hello.jsp)

模式 2 体系结构 (MVC)核心

Page 15: JSP 示例 (Hello.jsp)

Struts ( 基于模型 2)

Page 16: JSP 示例 (Hello.jsp)

三、三、 JSPJSP 编程基础编程基础1.1. JavaJava 特性及入门基础特性及入门基础2.2. HTMLHTML 简介简介3. JavaScriptJavaScript 简介简介

Page 17: JSP 示例 (Hello.jsp)

3.2 HTML3.2 HTML 简介简介HTMLHTML 页面的基本结构 页面的基本结构 01.html01.html使用链接标记 使用链接标记 link-.htmllink-.html使用字体标记 使用字体标记 font.htmlfont.htmlformform 标记的使用标记的使用 tabletable 标记的使用标记的使用

Page 18: JSP 示例 (Hello.jsp)

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

Page 19: JSP 示例 (Hello.jsp)

WebWeb 运行原理运行原理客户端同 Web 服务器之间的协议为 httpHTTP 为超文本传输协议HTPP 协议为“请求和响应”协议客户端请求包括:请求行、头、信息体客户端请求的方法

– GET 、 POST 、 HEAD– DELETE 、 TRACE 、 PUT

提交表单的方法: GET 、 POST

Page 20: JSP 示例 (Hello.jsp)

WebWeb 运行原理运行原理服务器接收到请求后,返回 HTTP 响应每个响应:状态行、头、信息体常见状态

– 404 所请求的文件不存在– 500 服务器程序出错– 200 OK 成功

信息体用于浏览器显示

Page 21: JSP 示例 (Hello.jsp)

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

Page 22: JSP 示例 (Hello.jsp)

HTMLHTML 表单标记表单标记表单主标记

– <form> </form>表单中的标记

– <input>– <select> </select>– <option>– <textarea> </textarea>

<form> 是表单开始标记, </form> 结束

Page 23: JSP 示例 (Hello.jsp)

表单的例子表单的例子<%-- 表单例子, 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"> &nbsp;&nbs

p;&nbsp;&nbsp; 密码: <input type="password" name="pwd" size="20"><br> <br></form></body></html>

Page 24: JSP 示例 (Hello.jsp)

运行结果运行结果

Page 25: JSP 示例 (Hello.jsp)

formform 标记标记描述表单的特性,语法<form method="POST" action="“ enctype=“”>method 表单传输方法

– GET 方法– POST 方法– action 为表单处理方式,通常为一个 URL

enctype 为编码方式

Page 26: JSP 示例 (Hello.jsp)

<input><input> 标记标记表单中输入信息的区域属性

– type 类型– name 名称– id 标识– maxlength 最大字符数– size 输入域宽度– value 域的初始值– button 按钮 用 javascript 响应

Page 27: JSP 示例 (Hello.jsp)

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

Page 28: JSP 示例 (Hello.jsp)

文本框:文本框: TEXTAREATEXTAREA

多行文本域: <textarea> </textarea>参数

– COLS :宽度– ROWS :高度– NAME :名称<textarea NAME=“Computer” ROWS=6 COLS=64>

CPU PIV 1500Memory 512M

</textarea>

Page 29: JSP 示例 (Hello.jsp)

下拉框:下拉框: SELECTSELECT

定义列表框: <select> </select>参数

– MULTIPLE 可同时选取多行– NAME 名称– SIZE 可见项目数

每个项目用 option 标记属性 SELECTED 出现在 option 表示选中

Page 30: JSP 示例 (Hello.jsp)

selectselect 的例子的例子<select name="area" style="width"50" size="1">

<option value=" 北京 " selected > 北京 </option><option value=" 天津 " > 天津 </option><option value=" 上海 " > 上海 </option><option value=" 重庆 " > 重庆 </option>

</select>

Page 31: JSP 示例 (Hello.jsp)

表单提交表单提交提交方式:

– submit 类型按钮提交表单– 通过普通按钮的 javascript 函数

传输方法依据 <form> 中的 method– 推荐使用 POST

传输编码依据 <form> 中的 enctype处理方式依据 <form> 中的 action <input type="submit" value=" 提交 ">

Page 32: JSP 示例 (Hello.jsp)

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

Page 33: JSP 示例 (Hello.jsp)

综合例子综合例子<%-- 表单综合例子, 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">&nbsp;&nbsp;&

nbsp;&nbsp; 密码: <input type="password" name="pwd" size="20"><br> <br><p> 你喜欢:<input type="checkbox" name="sports" value=football> 足球 <input type="checkbox" name="sports" value=bastketball> 篮球

Page 34: JSP 示例 (Hello.jsp)

&nbsp;&nbsp;&nbsp;&nbsp;性别:<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 1500Memory 512M

</textarea><br><br><p> 你计算机的操作系统<input type="image" name="os" src="images\TURBOLINUX6.G

IF">

Page 35: JSP 示例 (Hello.jsp)

&nbsp;&nbsp;&nbsp;&nbsp;你所在地:<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>

Page 36: JSP 示例 (Hello.jsp)

运行结果运行结果

Page 37: JSP 示例 (Hello.jsp)

表单的确认表单的确认客户端确认

– 减少服务器负载– 缩短用户等待时间– 兼容性难

服务器端确认– 统一确认– 兼容性强– 服务器负载重

Page 38: JSP 示例 (Hello.jsp)

客户端确认客户端确认采用 javascript进行确认 常用函数

– isBetween– isDate– isTime– isDigit– isEmail– isEmpty– isInt– isReal

Page 39: JSP 示例 (Hello.jsp)

客户端确认例子客户端确认例子<%-- 客户端确认例子, test.jsp 文件代码 --%><%@ page contentType="text/html;charset=gb2312"%><html>

<head><title> 客户端确认 </title><head><body><form method="POST" name="frm1" onsubmit="return checkform(frm

1)"> <p align="center"> 用户登录 <p align="center">用户名: <input type="text" name="name" size="20">&nbsp;&nbsp;&

nbsp;&nbsp; 密码: <input type="password" name="pwd" size="20"><br> <br><input type="submit" value=" 提交 "> <input type="reset" value=" 全部重写 "></p> </form>

Page 40: JSP 示例 (Hello.jsp)

<SCRIPT language=JavaScript>function checkform(frm){

var flag=true;if(frm.name.value==""){ alert("姓名不能为空,请输入值! "); frm.name.focus(); flag=false; }

return flag;}</SCRIPT></body></html>

Page 41: JSP 示例 (Hello.jsp)

运行结果运行结果

Page 42: JSP 示例 (Hello.jsp)

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

Page 43: JSP 示例 (Hello.jsp)

从表单中获得参数从表单中获得参数 JSPJSP 通过通过 requestrequest内置对象获取表单信息内置对象获取表单信息 用不同的方法获取不同种类的信息用不同的方法获取不同种类的信息获取参数的主要方法:获取参数的主要方法:

– getParameter() getParameter() 获取参数的值获取参数的值– getParameterNames() getParameterNames() 获取所有参数名的枚举获取所有参数名的枚举– getParameterValues() getParameterValues() 获取一个参数的多个值获取一个参数的多个值

Page 44: JSP 示例 (Hello.jsp)

getParameter()getParameter()

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

request.getParameter("User");

Page 45: JSP 示例 (Hello.jsp)

向客户端输出向客户端输出 使用内置对象 out out.println(“ 用户名: " +User+"<br>"); 使用“ <%= %>”

<%=User % > 使用内置对象 applicatioin <%= application.getAttribute(“counter”)%> 位访问者! ……

Page 46: JSP 示例 (Hello.jsp)

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

Page 47: JSP 示例 (Hello.jsp)

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

Page 48: JSP 示例 (Hello.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">&nbsp;&nbsp;密码: <input type="password" name="pwd" size="20"><br> <br><input type="submit" value=" 提交“ ><input type="reset" value=" 全部重写 "></p> </form></body></html>

Page 49: JSP 示例 (Hello.jsp)

loginAction.jsploginAction.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{

%>

Page 50: JSP 示例 (Hello.jsp)

<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="<%=na

me%>">&nbsp;&nbsp;&nbsp;&nbsp; 密码: <input type="password" name="pwd" size="20" value="<%=

pwd%>"><br> <br><input type="submit" value=" 提交 "> <input type="reset" value=" 全部重写 "></p> </form><%}%></body></html>

Page 51: JSP 示例 (Hello.jsp)

运行结果(运行结果( TOMCATTOMCAT ))

Page 52: JSP 示例 (Hello.jsp)

((未输入姓名未输入姓名 ))直接提交直接提交

Page 53: JSP 示例 (Hello.jsp)

输入用户名输入用户名

Page 54: JSP 示例 (Hello.jsp)

输入用户名后提交输入用户名后提交

Page 55: JSP 示例 (Hello.jsp)

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

Page 56: JSP 示例 (Hello.jsp)

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

Page 57: JSP 示例 (Hello.jsp)

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

Page 58: JSP 示例 (Hello.jsp)

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

其他 HTML 语言 </BODY></HTML>

Page 59: JSP 示例 (Hello.jsp)

JSPJSP 示例示例 (Hello_Date.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 ");

JSP文件 servlet 文件

Page 60: JSP 示例 (Hello.jsp)

JSPJSP 语法概述语法概述JSP 原始代码中包含了 JSP 元素和 Templ

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

Page 61: JSP 示例 (Hello.jsp)

jspjsp 例子例子 (hi.jsp)(hi.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 元素

Page 62: JSP 示例 (Hello.jsp)

JSPJSP 语法语法JSP 语法分为三种不同的类型 编译器指令 (DIRECTIVE) 例如: <%@ page import=“java.io.*” %>

脚本语法 (SCRIPTING)

动作语法 (ACTION) 例如: <jsp:forward> <jsp:getProperty> , <jsp:include>

Page 63: JSP 示例 (Hello.jsp)

JSPJSP中的脚本语句中的脚本语句脚本语句包括

– “HTML注释” :<!— comments -->– “ 隐藏注释” :<%-- comments --%>– “声明” : <%! int age;%>– “ 表达式” <%=age%>– “脚本段” <% scriplet 代码段 %>

Page 64: JSP 示例 (Hello.jsp)

JSPJSP 的编译指示语的编译指示语句句 编译器指令包括“ include”指令, “ page”指令和“ taglib”指令

它们包含在“ <%@ %>”卷标里。

Page 65: JSP 示例 (Hello.jsp)

JSPJSP 的动作语句的动作语句动作语法包括 <jsp:forward> , <jsp:include> , <jsp:plug

in> , <jsp:getProperty> , <jsp:setProperty> , <jsp:useBean>。

Page 66: JSP 示例 (Hello.jsp)

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

Page 67: JSP 示例 (Hello.jsp)

HTMLHTML 注释注释 (teach\4-1.jsp) (teach\4-1.jsp)

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

Page 68: JSP 示例 (Hello.jsp)

HTMLHTML 注释注释 (4-2.jsp)(4-2.jsp)<html><head><title>要多加练习 </title></head><body> <!-- 这个页面在 <%= new java.util.Date()%>被访问 --

>在源文件中包括当前时间。 </body></html>

Page 69: JSP 示例 (Hello.jsp)

隐藏注释 隐藏注释 JSP 语法格式如下: <%-- 注释 --%>  JSP 编译器不对 <%-- --%> 之间的语句进行编译,不发送到客户端,在浏览器中的”查看源代码”中看不到。

Page 70: JSP 示例 (Hello.jsp)

隐藏注释 隐藏注释 (4-3.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>

Page 71: JSP 示例 (Hello.jsp)

声明声明 JSP 语法格式如下:<%! declaration; [ declaration; ] ... %>

<%@ page language=”java” import=”java.util.*” %><html><body><%! int i = 0; %> <%! int a, b, c; %><%! Date date; %></body></html>

4-4.jsp4-4.jsp

Page 72: JSP 示例 (Hello.jsp)

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

Page 73: JSP 示例 (Hello.jsp)

表达式表达式 (4-5.jsp)(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>

Page 74: JSP 示例 (Hello.jsp)

4-5.jsp4-5.jsp 执行结果 执行结果

Page 75: JSP 示例 (Hello.jsp)

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

Page 76: JSP 示例 (Hello.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>"); break; case 2:

out.println("You select condition 2!"+"<br>"); break; default:

out.println("Your select not in 0,1,2“); }%> </body></html> 4-6.jsp4-6.jsp

Page 77: JSP 示例 (Hello.jsp)

includeinclude 包含指令包含指令 include指令:向当前页中插入一个静态文件或动态文件。JSP 语法格式如下:<%@ include file="relativeURL" %> 或<%@ include file="相对位置 " %>

Page 78: JSP 示例 (Hello.jsp)

<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 79: JSP 示例 (Hello.jsp)

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

Page 80: JSP 示例 (Hello.jsp)

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

Page 81: JSP 示例 (Hello.jsp)

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

Page 82: JSP 示例 (Hello.jsp)

pagepage指令(指令( 4-9.jsp4-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>

Page 83: JSP 示例 (Hello.jsp)

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

Page 84: JSP 示例 (Hello.jsp)

taglibtaglib 指令指令 属性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定义 – 一个相对或绝对的路径 – 可以是标签库描述文件

Page 85: JSP 示例 (Hello.jsp)

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

Page 86: JSP 示例 (Hello.jsp)

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

Page 87: JSP 示例 (Hello.jsp)

<jsp:forward><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/>] 标记。)

Page 88: JSP 示例 (Hello.jsp)

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>” 标签以后的代码将不执行。

Page 89: JSP 示例 (Hello.jsp)

<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>

Page 90: JSP 示例 (Hello.jsp)

forwardTo.jspforwardTo.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)(teach/jsp4/forward.html, testforward1.jsp)

Page 91: JSP 示例 (Hello.jsp)

<jsp:include> <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 页面被请求时才将指定文件的内容插入到服务器的 响应输出中。

Page 92: JSP 示例 (Hello.jsp)

<jsp:include><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>”来传递多个参数,

Page 93: JSP 示例 (Hello.jsp)

<jsp:include> <jsp:include> 例子例子 ((peixun2.10.jpeixun2.10.jspsp))<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>

Page 94: JSP 示例 (Hello.jsp)

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

%>

Page 95: JSP 示例 (Hello.jsp)

<jsp:include><jsp:include> 运行结果运行结果

Page 96: JSP 示例 (Hello.jsp)

<jsp:plugin><jsp:plugin>

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

Page 97: JSP 示例 (Hello.jsp)

[ 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" ] >

Page 98: JSP 示例 (Hello.jsp)

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

Page 99: JSP 示例 (Hello.jsp)

<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>

Page 100: JSP 示例 (Hello.jsp)

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

Page 101: JSP 示例 (Hello.jsp)

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

Page 102: JSP 示例 (Hello.jsp)

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.

Page 103: JSP 示例 (Hello.jsp)

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

Page 104: JSP 示例 (Hello.jsp)

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

Page 105: JSP 示例 (Hello.jsp)

<jsp:getProperty><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>

Page 106: JSP 示例 (Hello.jsp)

<jsp:setProperty> <jsp:setProperty>

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

Page 107: JSP 示例 (Hello.jsp)

属性属性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 参数 。

Page 108: JSP 示例 (Hello.jsp)

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; }

例: // 建立 javaBean: myBean.Student 例子例子

Page 109: JSP 示例 (Hello.jsp)

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; }}

Page 110: JSP 示例 (Hello.jsp)

<%--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>

Page 111: JSP 示例 (Hello.jsp)

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

Page 112: JSP 示例 (Hello.jsp)

第一次运行结果第一次运行结果

Page 113: JSP 示例 (Hello.jsp)

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

Page 114: JSP 示例 (Hello.jsp)

测试测试 sessionsession 作用域作用域<%--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"/>

Page 115: JSP 示例 (Hello.jsp)

<%-- 取属性值 --%><%=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><%=student.getClassNo() %> <br><%=student.getName() %> <br><%=student.getAge() %> <br><%=student.getSexy() %> <br></body></html>

Page 116: JSP 示例 (Hello.jsp)

运行结果运行结果

Page 117: JSP 示例 (Hello.jsp)

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

Page 118: JSP 示例 (Hello.jsp)

综述综述 有几种对象和 ASP 的内置对象差不多,功能也类似,这是因为这些内置对象的构建基础是标准化的

HTTP 协议。从本质上讲, JSP 的这些内置对象其实都是由特定的 Java 类所产生的,在服务器运行时根据情况自动生成,表 3.1给出了他们的对应关系。需要注意的问题是对象名的写法,包括这些对象方法的调用都要注意大小写。

Page 119: JSP 示例 (Hello.jsp)

JSPJSP 内置对象映射表内置对象映射表

Page 120: JSP 示例 (Hello.jsp)

requestrequest 和和 responseresponse

“request” 对象代表的是来自客户端的请求,例如我们在 FORM 表单中填写的信息等,是最常用的对象。关于它的方法使用较多的是 getParameter 、 getParameterNames 和 getParameterValues ,通过调用这几个方法来获取请求对象中所包含的参数的值

“response” 对象代表的是对客户端的响应,也就是说可以通过“ response” 对象来组织发送到客户端的数据。发送文字时直接使用“ out” 对象即可。 response.sendRedirect(“URL”); response.setContentType(”text/html”);

Page 121: JSP 示例 (Hello.jsp)

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

Page 122: JSP 示例 (Hello.jsp)

requestrequest 对象示例(对象示例( Hello_req.jsHello_req.jsp)p)

<%@ 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>

Page 123: JSP 示例 (Hello.jsp)

输出结果输出结果

/teach/jsp6/login.html -> jsp6/jsp/login.jsp

<HTML> <BODY> 你好 ,独孤求败 , 今天是 9号,星期 1 </BODY></HTML>

Page 124: JSP 示例 (Hello.jsp)

requestrequest 对象其他方法对象其他方法1. getAttribute 原型: public java.lang.Object getAttribute(java.lang.String nam

e) 说明:以对象的形式返回特定名称的属性值。 参数: name 一个标示属性名的字符串 返回值:一个包含属性值的对象,当属性不存在是为空。 2. getContentLength 、 getServerPort() 、 getServerName() 、

getProtocol 、 getRemoteAddr 、 getHeaderNames 、getMethod() 、 getServletPath 、 isRequestedSessionIdValid

/teach/jsp6/form.html

Page 125: JSP 示例 (Hello.jsp)

outout 对象对象 “out” 对象代表了向客户端发送数据的对象,与“ response” 对象不同,通过“ out” 对象发送的内容将是浏览器需要显示的内容,是文本形式的,可以通过“ out” 对象直接向客户端写一个由程序动态生成 HTML 文件。常用的方法除了 p

irnt 和 println 之外,还包括 clear 、 clearBuffer 、flush 、 getBufferSize 和 getRemaining ,这是因为“ out” 对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。

testBuffer.jsp ; testSystem.jsp

Page 126: JSP 示例 (Hello.jsp)

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

eNames 和 putValue等。

Page 127: JSP 示例 (Hello.jsp)

sessionsession 对象对象 概要

– HTTP 是无状态( stateless)协议;– Web 服务器对每一个客户端请求都没有历史记忆;– Session 用来保存客户端状态信息;– 由Web 服务器写入;– 存于客户端;– 客户端的每次访问都把上次的 session 记录传递给

Web 服务器;– Web 服务器读取客户端提交的 session来获取客户端的状态信息;

Page 128: JSP 示例 (Hello.jsp)

sessionsession 对象示例对象示例 (Form(Form 表单—表单— LoLogon_session.html)gon_session.html)

<html><body> <form action="./Logon_session.jsp"> 姓名 <input type="text" name="UserName"> <input type="submit" value=" 提交 "> </form></body></html>

Page 129: JSP 示例 (Hello.jsp)

sessionsession 对象示例对象示例Logon_session.jspLogon_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>

Page 130: JSP 示例 (Hello.jsp)

sessionsession对象示例对象示例 (Check_session.j(Check_session.jsp)sp)

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

Page 131: JSP 示例 (Hello.jsp)

sessionsession 使用示例使用示例

/teach/jsp6/testsession.html ->testsession1.jsp->testsession2.jsp->testsession3.jsp

Page 132: JSP 示例 (Hello.jsp)

cookiecookie 对象对象<%@ page contentType="text/html;charset=GBK" %><%int Counter = 0;// 得到所有的 CookieCookie 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 ; 以后登陆,需更新 CookieCookie c = new Cookie("Counter", ""+Counter);c.setMaxAge(60*60*24*365); // Cookie response.addCookie(c);%>

用来保存少量的信息/myjsp/06/VisitTimes.jsp

Page 133: JSP 示例 (Hello.jsp)

<html><head><title> 显示登陆次数 </title></head><body bgcolor="#FFFFFF"><%if(Counter == 0) {

out.println("<Script>");out.println("alert(' 欢迎首次光临! ')");out.println("</Script>");

}else {

out.println("<Script>");out.println("alert('您已经光临了 " + Counter + " 次 ')");out.println("</Script>");

}%></body></html>

Page 134: JSP 示例 (Hello.jsp)

applicationapplication 对象对象 application对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有 log() 、 getMajor

Version() 、 getMinorVersion() 、 getMimeType() 、 getRealPath() 、 getResouce() 、 getResourceAsStream() 、 getRequestDispatcher()等。

session 用来保存用户的个人信息, application 是保存所有用户的公共信息。 application.setAttribute(“counter”,”0”);

xxl
OK
Page 135: JSP 示例 (Hello.jsp)

applicationapplication 对象实现网页计数器对象实现网页计数器<%-- 用 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>

Page 136: JSP 示例 (Hello.jsp)

运行结果运行结果 ((第一次访问第一次访问 ))

Page 137: JSP 示例 (Hello.jsp)

刷新一次刷新一次

Page 138: JSP 示例 (Hello.jsp)

applicationapplication 使用示例使用示例

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

Page 139: JSP 示例 (Hello.jsp)

pageContextpageContext “pageContext” 对象直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属性,常用的方法包括 findAttribute 、 getAttribute 、 getAttributes

Scope 和 getAttributeNamesInScope ,一般情况下“ pageContext” 对象用的不是很多,只有在项目所面临的情况比较复杂的情况下,才会利用到页面属性来辅助处理。 getServletConfig 、 getSession 、 getServletContext 、 getOut 、 getRequest等。 teach/jsp6/testpagecontext.jsp

Page 140: JSP 示例 (Hello.jsp)

configconfig 、 、 pagepage 、 、 exceptionexception

“config” 对象提供一些配置信息,常用的方法有 getInitParameter 和 getInitParameterNames ,以获得 Servlet 初始化时的参数。使用 getServletContext()来代替 application对象。 teach/jsp6/testconfig.jsp

“page” 对象代表了正在运行的由 JSP 文件产生的类对象。 testpage.jsp “exception” 对象则代表了 JSP 文件运行时所产生的例外对象,此对象不能在一般 JSP 文件中直接使用,而只能在使用了“ <%@ page isErrorPage=”true “%

>” 的 JSP 文件中使用 testexception.jsp

Page 141: JSP 示例 (Hello.jsp)

exceptionexception对象示例对象示例<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>

Page 142: JSP 示例 (Hello.jsp)

exceptionexception对象示例对象示例<%--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>

Page 143: JSP 示例 (Hello.jsp)

JSPJSP 内置对象小结内置对象小结介绍了 JSP 的几种内置对象。熟练使用这些内置对象是开发 JSP 应用程序的基本要求,尤其是对于 request 、 session 和

application对象更是必须要掌握的。会使用对象所具有的方法,能熟练使用每一种对象的几种常用方法。

Page 144: JSP 示例 (Hello.jsp)

JDBCJDBC 连接数据库技术连接数据库技术 JDBC 概述 JDBC API 使用 JDBC-ODBC 的实例

Page 145: JSP 示例 (Hello.jsp)

JDBCJDBC 概述概述 JDBC(Java 数据库连接 ) 为数据库开发提供了一个标准的API ,这个 API 是用纯 Java 写的,通过 JDBC很容易对各种关系数据库执行 SQL 语句,不用考虑不同的平台。 与数据库建立连接 (connection) 向数据库发送 SQL 语句 处理数据库返回的结果 JDBC API

JDBC Dri verManager

JDBC Dri verCl i ent

DBMS

Browser

Page 146: JSP 示例 (Hello.jsp)

JDBC APIJDBC API

JDBC 接口分两个层次:底层的 JDBC Driver API 和面向程序开发人员的 JDBC API。后者中的一些重要接口: java.sql.DriverManager java.sql.Connection java.sql.Statement

– java.sql.PreparedStatement– java.sql.CallableStatement

java.sql.ResultSetClass.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);con = DriverManager.getConnection(dataSource, user, paswd);

Page 147: JSP 示例 (Hello.jsp)

DriverManagerDriverManager pulbic static synchronized Connection getConnection(String url,

String user, String password) throws SQLException

pulbic static void setLoginTimeout(int seconds)

Page 148: JSP 示例 (Hello.jsp)

ConnectionConnection

Connection对象通过 DriverManager.getConnection() 取得 Statement createStatement() throws SQLException PrepareStatement prepareStatement(String sql) throws SQLException CallableStatement prepareCall(String sql) throws SQLException void setAutoCommit(Boolean autoCommit) throws SQLException

void commit() throws SQLException void rollback() throws SQLException

Page 149: JSP 示例 (Hello.jsp)

StatementStatement

ResultSet executeQuery(String sql) throws SQLException

int executeUpdate(String sql) throws SQLException

boolean execute(String sql) throws SQLException

Page 150: JSP 示例 (Hello.jsp)

PreparedStatementPreparedStatement

PrepareStatement pstmt = conn.prepareStatement(insert into stock values (?, ?, ?)”);

while(rs.next()){

pstmt.setString(1, rs.getString(“stockId”));

pstmt.setString(2, rs.getString(“stockName”));

pstmt.setString(3, rs.getString(“stockNum”));

pstmt.executeUpdate();

}

Page 151: JSP 示例 (Hello.jsp)

CallableStatementCallableStatement

继承于 PrepareStatement 接口,用于执行存储过程。CallableStatement stmt = conn.prepareCall(“{call Myprocedur

e(?, ?, ?)}”);

stmt.setString(1, rs.getString(“stockId”));

stmt.setString(2, rs.getString(“stockName”));

stmt.setString(3, rs.getString(“stockNum”));

stmt.executeUpdate();

}

Page 152: JSP 示例 (Hello.jsp)

ResultSetResultSet

boolean next() throws SQLException

void close() throws SQLException

Page 153: JSP 示例 (Hello.jsp)

07/TestJDBC.java07/TestJDBC.javaimport java.sql.*;public class TestJDBC{

public static void main(String[] args) {try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // 注册驱动程序 Connection con = DriverManager.getConnection("jdbc:odbc:student", "", ""); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("select * from Table1"); while(rs.next()){System.out.print("\t 编号: " + rs.getString(1));System.out.print("\t 性别: " + rs.getString(2));System.out.print("\t 分数: " + rs.getFloat(3));System.out.println(); } rs.close(); stmt.close(); con.close(); }catch(Exception e){ e.printStackTrace();}}

}

Page 154: JSP 示例 (Hello.jsp)

07/InsertData.java07/InsertData.javaimport java.sql.*;public class InsertData{

public static void main(String[] args) {try{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection("jdbc:odbc:s

tudent", "", ""); Statement stmt=con.createStatement();int i = stmt.executeUpdate("insert into Table1 values ('dir

k','m',20)");System.out.println( i + " rows been affected.");stmt.close(); con.close();

}catch(Exception e){ e.printStackTrace();}

}}

Page 155: JSP 示例 (Hello.jsp)

JavaBeanJavaBean 组件开发组件开发 JavaBean 概述 JSP 中使用 JavaBean 使用 JavaBean访问数据库

Page 156: JSP 示例 (Hello.jsp)

JavaBeanJavaBean 简介简介 JavaBean 是一个纯粹的 Java 类组件,具有公开的 setter 与 getter 方法,支持事件处理等, JavaBean 可重复使用,并具有良好的移植性。它可以是用来设计用户界面的组件,或是运用于 JSP网页中处理业务逻辑等。

Page 157: JSP 示例 (Hello.jsp)

JSPJSP 中使用中使用 JavaBeanJavaBean

<jsp:useBean id=“beanName” scope=“page|request|session|application” class=“package.class” /> <jsp:setProperty name=“beanName” property=“propertyName” value=“propertyvalue” /> <jsp:setProperty name=“beanName” property=“*” /> <jsp:getProperty name=“beanName” property=“propertyName” />

Page 158: JSP 示例 (Hello.jsp)

例子:例子: sampleBean.javasampleBean.javapackage bean;public class sampleBean{

private String sample = "Start value";public String getSample() {

return sample;}public void setSample(String newValue) {

if(newValue != null) {sample = newValue;

}}

}

Page 159: JSP 示例 (Hello.jsp)

myjsp\08\sample1.jspmyjsp\08\sample1.jsp<%@ page contentType="text/html;charset=GBK"%><html>

<head><title>Servlet 使用 JSP</title></head><jsp:useBean id="myBean"

scope="application" class="bean.sampleBean"/><body bgcolor="gray"><h2>JSP 使用 JavaBean 的例子 :</h2><hr>调用 jsp:setProperty 之前的值:

<jsp:getProperty name="myBean" property="sample"/><p><jsp:setProperty name="myBean"

property="sample" value="hhhhhhhhhhhhh"/>调用 jsp:setProperty 之后的值:<jsp:getProperty name="myBean" property="sample"/>

</body></html>

Page 160: JSP 示例 (Hello.jsp)

JavaBeanJavaBean 保存购物信息保存购物信息/myjsp/08/carts.html/myjsp/08/carts.jspDummyCart.java

Page 161: JSP 示例 (Hello.jsp)

使用使用 JavaBeanJavaBean 访问数据库访问数据库conn.java // 连接 student 库中的 table1 表。/myjsp/08/conn_db.jsp

/myjsp/08/d_sql2.jsp

Page 162: JSP 示例 (Hello.jsp)

JSPJSP 网上购物系统网上购物系统cart.jspCartManager //管理 session 、实现业务逻 辑等UserEntityOrderEntityOrderItemEntityProductEntity

Page 163: JSP 示例 (Hello.jsp)

ServletServlet 开发技术开发技术 Servlet 概述 Servlet实例 JSP 与 Servlet 的交互

Page 164: JSP 示例 (Hello.jsp)

ServletServlet 概述概述 Servlet 的基本概念 Servlet 是服务器端的 Java 小程序,用于响应客户机的请求。它最常见的用途是扩展Web 服务器,提供非常安全的、可移植的、易于使用的 CGI替代品。它是一种动态加载的模块,为来自Web 服务器的请求提供服务。它完全运行在 Java虚拟机上,由于它在服务

器端运行,因此它不依赖于浏览器的兼容性。

Page 165: JSP 示例 (Hello.jsp)

ServletServlet 概述概述 Servlet 和JSP的区别 JSP更加注重页面的表现,而 Servlet更注重业务逻辑的实现; JSP只能处理浏览器的请求,而 Servlet还可以处理客户端的应用程序的请求。

Page 166: JSP 示例 (Hello.jsp)

ServletServlet 概述概述 Servlet 的生命周期 Servlet 的生命周期始于将它装入 Web 服务器的内存时,并在终止或重新装入 Servlet 时结束。   (1) 初始化  当服务器装载 servlet 时,服务器创建一个 Servlet 实例并且调用 Servlet 的 init() 方法。在初始化阶段, Servlet 初始化参数被传递给 Servlet 配置对象。    (2) 处理请求  对于到达服务器的客户机请求,服务器创建特定于请求的一个“请求”对象和一个“响应”对象。服务器调用 Servlet 的 se

rvice() 方法,该方法用于传递“请求”和“响应”对象。 service() 方法从“请求”对象获得请求信息、处理该请求并用“响应”对象的方法以将响应传回客户机。 service() 方法可以调用其它方法来处理请求,例如 doGet() 、 doPost() 或其它的方法。    (3) 终止  当服务器不再需要 Servlet, 或重新装入 Servlet 的新实例时,服务器会调用 Servlet 的 destroy() 方法。

Page 167: JSP 示例 (Hello.jsp)

ServletServlet 概述概述 Servlet 的基本方法 两个基本软件包: javax.servlet 和 javax.servlet.http。下面主要介绍 j

avax.servlet.http.HttpServlet 中的基本方法:(1) init() 方法在 Servlet 的生命期中,仅执行一次 init() 方法。它是在服务器装入 Servlet 时执行的。 可以配置服务器,以在启动服务器或客户机首次访问 Servlet 时装入 Servlet。 无论有多少客户机访问 Servlet ,都不会重复执行 init() 。 (2) service() 方法 是 Servlet 的核心。每当一个客户请求一个 HttpServlet 对象,该对象的 service() 方法就要被调用,而且传递给这个方法一个“请求”( ServletRequest)对象和一个“响应”( ServletResponse)对象作为参数。 在 HttpServlet 中已存在 service() 方法。缺省的服务功能是调用与 HTTP 请求的方法相应的 do 功能。如果 HTTP 请求方法为 GET ,则缺省情况下就调用 doGet() ;如果 HTTP 请求方法为 POST ,则缺省情况下就调用 doPost()。

Page 168: JSP 示例 (Hello.jsp)

ServletServlet 概述概述(3) destroy() 方法(4) getServletConfig() getServletConfig()方法返回一个 ServletConfig 对象,该对象用来返回初始化参数和   ServletContext。 Serv

letContext 接口提供有关 servlet 的环境信息。 (5) getServletInfo() getServletInfo()方法是一个可选的方法,它提供有关 s

ervlet 的信息,如作者、版本、版权。

Page 169: JSP 示例 (Hello.jsp)

ServletServlet 实例开发实例开发import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class SimpleServlet extends HttpServlet{

// 重写 doPost 方法public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{res.setContentType("text/html"); // 首先设置头信息PrintWriter out = res.getWriter();// 用 writer 方法返回响应数据out.println("<html><head></head><body>");out.println("<h1 align=center><b><i><font size=5 face=Arial Black>“+"The first Servet,So simple!</h1></font></i></b><br>");out.println("<h2 align=center>You can see that this output is from the SimpleServlet.</h2>");out.println("</body></html>");out.close();}// 重写 doGet 方法public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,IOException{doPost(req, res);}

}

Page 170: JSP 示例 (Hello.jsp)

ServletServlet 与与 WebWeb 页面的交互页面的交互/myjsp/11/TestServlet.htm

TestServlet.java

Page 171: JSP 示例 (Hello.jsp)

JSPJSP 与与 ServletServlet 的交互的交互 11

// /myjsp/11/FromJspToServlet.jsp<html>

<body bgcolor="green"><!-- Forward to a servlet ,这个 servlet 存放在WEB-INF 的 servlet 目录下 --><!-- 下面的 / 指的是 /myjsp --><jsp:forward page="/servlet/SimpleServlet" /><body>

</html>

1. 从 JSP 到 Servlet 的信息传递

Page 172: JSP 示例 (Hello.jsp)

JSPJSP 与与 ServletServlet 的交互的交互 22

// /myjsp/11/servletToJsp.jspimport javax.servlet.*;import javax.servlet.http.*;public class servletToJSP extends HttpServlet { public void doGet (HttpServletRequest request,

HttpServletResponse response) {try { // Set the attribute and Forward to hello.jsp request.setAttribute ("servletName", "servletToJsp"); getServletConfig().getServletContext().getRequestDispatcher("/11/hello.jsp").forward(request, response);} catch (Exception ex) { ex.printStackTrace ();}

}}

2. 从 Servlet 到 JSP 的信息传递

Page 173: JSP 示例 (Hello.jsp)

JSPJSP 与与 ServletServlet 的交互的交互 22

//hello.jsp<%@ page contentType="text/html;charset=GBK"%><html>

<head><title>Servlet 使用 JSP</title>

</head><body bgcolor="gray">

<h2>Servlet 使用 JSP 的例子 :</h2><h2>这个页面是被<font color=ff0000>

<%= request.getAttribute("servletName")%></font>这个 Servlet调用的 .</h2>

</body></html>

2. 从 Servlet 到 JSP 的信息传递

Page 174: JSP 示例 (Hello.jsp)

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

Cl i ent

Server

ISO8859_1ISO8859_1

gb2312 gb2312

Page 175: JSP 示例 (Hello.jsp)

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

Page 176: JSP 示例 (Hello.jsp)

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

Page 177: JSP 示例 (Hello.jsp)

JSPJSP 文件的汉字问题文件的汉字问题 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 文档都应该包含该语句

Page 178: JSP 示例 (Hello.jsp)

JSPJSP 文件的汉字问题文件的汉字问题 ((JSPhanzi.jspJSPhanzi.jsp))

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

<html><head><title>JSP 中的汉字问题 </title></head><body> 你好</body></html>

Page 179: JSP 示例 (Hello.jsp)

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

<html><head><title>JSP 中的汉字问题 </title></head><body> 你好</body></html>

Page 180: JSP 示例 (Hello.jsp)

表单处理中的汉字问题表单处理中的汉字问题 表单处理涉及到客户端和服务器的完整交互过程 在客户端和服务器是 gb2312 ,传输用 ISO8

859_1 在服务器端接收到客户端数据时需要转换为

gb2312 后进行处理,方法name=new String(name.getBytes("ISO8859_1"), "gb2312");

服务器端指示客户端汉字的显示编码<%@ page contentType="text/html;charset=gb2312"%>

Page 181: JSP 示例 (Hello.jsp)

表单处理的汉字问题表单处理的汉字问题 (hanzi.jsp)(hanzi.jsp)<%--表单处理的汉字问题, 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><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>

Page 182: JSP 示例 (Hello.jsp)

处理过程处理过程<%--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>

Page 183: JSP 示例 (Hello.jsp)

处理过程(修改后)处理过程(修改后)<%--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>

Page 184: JSP 示例 (Hello.jsp)

ServletServlet 的汉字问题的汉字问题1. 某个页面提交中文内容给 Servlet , 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(“ 中文” );}

Page 185: JSP 示例 (Hello.jsp)

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

2”);

Page 186: JSP 示例 (Hello.jsp)

FTPFTP

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

Page 187: JSP 示例 (Hello.jsp)

谢谢!谢谢!