JavaServer Pages(JSP) 网页程序设计

Slides:



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

网络应用程序设计 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 超文本标识语言) 是一种用来制作超文本文档的简单标记语言。
第3章 JavaScript语言基础.
在PHP和MYSQL中实现完美的中文显示
HTML.
第3章 超文本标记语言(HTML) 3.1 基本结构标记 3.2 文本格式标记 3.3 超链接标记<A></A>
移动开发的灵便迭代之道 黄凯.
JSP示例(Hello.jsp) <HTML> <BODY> 你好<br> </BODY>
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程序开发平台搭建 ---观其大略
第一讲 J2EE基础 博和利初级培训 —开发技能.
网 站 设 计 与 建 设 Website design and developments
PHP 變數、常數與運算子 變數 常數 運算子
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
网站设计 前端 选择器(复习),表单.
任务1-3 使用Dreamweaver创建ASP网页
网页设计与制作教程第5版 机械工业出版社同名教材 配套电子教案.
HTML 103 互動式網頁.
SOA – Experiment 2: Query Classification Web Service
第3章 Java語法的JSP程式 3-1 Java語言的基礎 3-2 JSP程式的基本架構 3-3 Java的變數與資料型態
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
Ch09 在網頁之間傳遞資訊 網頁程式設計.
JSP程序设计 第9章 Servlet简介.
HTML 103 互動式網頁 助教:黃毓瑩.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
项目二:HTML语言基础.
第4章 Excel电子表格制作软件 4.4 函数(一).
段磊 王慧锋 TEL: 数据库系统原理课程设计 实验环节4 段磊 王慧锋 TEL:
第6章 PHP的数据采集.
PHP程式設計 五、程式流程控制結構 建國科技大學 資訊管理學系 饒瑞佶.
Python 环境搭建 基于Anaconda和VSCode.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第四章 UNIX文件系统.
HTML表单 JSP借由标签所构成的表单区块中,取得用户在其中特定字段输入的数据內容 。 JSP 动态网页新技术.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第4章 JSP动态网页设计基础 教学目标 教学重点 教学过程 2019年10月21日.
表单页面 表单是用户利用浏览器对Web站点网络数据库进行查询的一种界面,用户利用表单可以输入信息或选择选项等,然后将这些信息提交给服务器进行处理。通过表单,既可以将浏览器的信息发送到Internet服务器上,同时表单也可以使用户与站点的浏览者交互或从浏览者那里收集信息。它是网页的设计者和使用者相互交流的工具。表单对象包括文本域(单行、多行、密码)、列表、菜单、复选框、单选框、按钮等。
第四章 jsp语法 4.1 jsp页面的基本结构 一个jsp页面可由五种元素组合而成: 普通的html标记符
Presentation transcript:

JavaServer Pages(JSP) 网页程序设计

JSP语法及内置对象 Java基础知识 JSP语法 JSP内置对象 HTML表单 JSP与客户机的交互

JSP语法 概述 基本语法

复习JSP的概念 Java Server Page Servlet简化设计,逻辑与界面设计分开,开发更方便; HTML语法的 java 扩展,加入新的标签(<%, %>,…); 强大的组件(Java Bean)支持功能;

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

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 分析器 JSDK request jsp parser *.jsp *.java *.class 执行 response

JSP 执行过程

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原始代码中包含了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>

脚本语法 脚本语法包括 “HTML注释”:<!— comments --> “声明” “表达式” “脚本段”

编译器指令 编译器指令包括“包含指令”, “页指令”和“taglib指令” 它们包含在“<%@ %>”卷标里。 它们包含在“<%@ %>”卷标里。 两个主要的指令是page与include。

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

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

HTML注释(peixun2.1.jsp) <html> <head> <title> HTML注释 </title> </head> <body> <!-- This file displays the user login screen --> 未显示上一行的注释。 </body> </html>

HTML注释

HTML注释(peixun2.2.jsp) <html> <head> <title>要多加练习</title> </head> <body> <!--This page was loaded on <%= (new java.util.Date()).toLocaleString() %> --> 在源文件中包括当前时间。 </body> </html>

HTML注释

IE中的源程序有注释

隐藏注释 JSP 语法格式如下: <%-- 注释 --%>  不发送到客户端。

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

隐藏注释

在IE中查看源代码

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

声明(test2.4.jsp) <%@ page language=”java” import=”java.util.*” %> <html> <head> <title> test2.4.jsp </title> </head> <body> <%! int i = 0; %> <%! int a, b, c; %> <%! Date date; %> </body> </html>

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

表达式(peixun2.4.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>

peixun2.4.jsp执行结果

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

脚本段 (peixun2.5.jsp) <%! int condition;%> <html> <%@ page language="java" import="java.util.*" %> <%! int condition;%> <html> <head> <title> test </title> </head> <body>

<% condition=1; switch(condition){ case 0: out.println("You must select condition 0!"+"<br>"); break; case 1: out.println("You must select condition 1!"+"<br>");

转义符: 双引号 \“ ,单引号\’,反斜杠\\,回车\r,换行\n,制表符\t,退格 \b break; case 2: out.println("You must select condition 2!"+"<br>"); default: out.println("Your select not in \"0,1,2\",select again!!"+"<br>"); } %> </body> </html> 转义符: 双引号 \“ ,单引号\’,反斜杠\\,回车\r,换行\n,制表符\t,退格 \b

脚本段执行结果

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

包含指令(peixun2.6.jsp) <html> <head> <title>test</title> </head> <body bgcolor="white"> <font color="blue"> The current date and time are <%@ include file=“peixun2.6.1.jsp" %> </font> </body> </html> 

“peixun2.6.1.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指令 属性: 1.language="java" 声明脚本语言的种类,目前只能用"java" 。 2.import="{package.class | package.* },..." 需要导入的Java包的列表,这些包作用于程序段,表达式,以及声明。下面的包在JSP编译时已经导入了,所以就不需要再指明了: java.lang.* javax.servlet.* javax.servlet.jsp.* javax.servlet.http.*   

3.errorPage="relativeURL" 设置处理异常事件的JSP文件。   4.isErrorPage="true | false" 设置此页是否为出错页,如果被设置为true,你就能使用exception对象

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

page指令(peixun2.7.jsp) <%@ page import="java.util.*, java.lang.*" %> <%@ page buffer="24kb" autoFlush="false" %> <%@ page errorPage="error.jsp" %> <html> <head> <title>test3</title> </head> <body> Test for using 'Page'. </body> </html>

page指令例子运行结果

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指令(peixun2.8.jsp) <%@ 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”指定参数值。

注意 “<jsp:forward>”标签从一个JSP文件向另一个文件传递一个包含用户请求的request对象。“<jsp:forward>”标签以后的代码,将不能执行。

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

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

运行结果(TOMCAT)

<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: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="peixun2.10.1.jsp" flush="true" > <jsp:param name="User" value="HiFi King" /> </jsp:include> </body> </html>

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

<jsp:include>运行结果(TOMCAT)

<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>属性 1.type="bean | applet" 将被执行的插件对象的类型,你必须得指定这个是Bean还是applet,因为这个属性没有缺省值。   2.code="classFileName" 将会被Java插件执行的Java Class的名字,必须以.class结尾。这个文件必须存在于codebase属性指定的目录中。

3.codebase="classFileDirectoryName" 将会被执行的Java Class文件的目录(或者是路径),如果你没有提供此属性,那么使用<jsp:plugin>的jsp文件的目录将会被使用。   4.name="instanceName" 这个Bean或applet实例的名字,它将会在Jsp其它的地方调用。

<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> 创建一个Bean实例并指定它的名字和作用范围。 JSP 语法格式如下:         id="beanInstanceName"     scope="page | request | session | application"         {             class="package.class" |            

type="package.class" |             class="package.class" type="package.class" |             beanName="{package.class | <%= expression %>}" type="package.class"         }         {             /> |             > other elements </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的名称区分大小写。

5.beanName="{package. class | <%= expression %>}" type="package 5.beanName="{package.class | <%= expression %>}" type="package.class" 使用java.beans.Beans.instantiate方法来从一个class或串行化的模板中实例化一个Bean,同时指定Bean的类型。 Beans.instantiate方法将检查此名称是否表示一个类或一个串行化模板。如果这个Bean是被串行化的,那么Beans.instantiate方法将通过使用一个类装载器读取串行化格式(类似package.class.ser)。

beanName可以是package和class,也可以是表达式,它的值会传给Beans beanName可以是package和class,也可以是表达式,它的值会传给Beans.instantiate方法。type的值可以和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" 2.property="*" 表示已经在“<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属性的类型(转换方法见表4.1)。如果是一个表达式,那么它的类型就必须和将要设定的属性值的类型一致。 如果参数值为空值,那么对应的属性值也不会被设定。此外,不能在同一个“<jsp:setProperty>”中同时使用param和value参数 。

例://建立类rmg.student package rmg; 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="rmg.student" /> <%=student.getname()%><br> <% student.setname("cong"); %> <%-- 用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="rmg.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>

运行结果

小结与习题 集中介绍了JSP的各种语法,掌握这些语法使进行JSP开发的基本要求,于一般的网页开发不同,JSP对大小写是敏感的,这一点要注意,尤其是对曾使用过其他开发语言的读者。 与Bean相关的几种语法的使用将在“Bean的使用”一章中专门进行讲解,因此可对照学习。熟练使用这些语法是必须的,因此读者应该多加练习,观察不同用法所产生的效果上的差异。对于给出的例子最好是自己敲入文件并观察执行结果。 随后的几章将各有重点的讲述与语法相关的一些问题。 

习题 1.举例说明HTML注释与隐藏注释有何异同。 2.试写一个JSP文件,包含所有JSP语法元素 3.Scriptlet中应遵循什么样的语法规则? 4.<jsp:include>元素包含静态文件与包含动态文件处理上有何不同? 5.<jsp:forward>起到什么样的作用?使用时有哪些注意事项? 6.page指令能起到那些作用?有效范围有多大?

实践:练习JSP编程 1. HelloWorld.jsp 最简单的jsp程序 2. Scripting.jsp 程序片段 3. Declaration.jsp 变量的声明 4. Directive.jsp 和 Top.htm 和 Bottom.jsp Directives语法 5. Include.jsp 和 Date.jsp include指令 6. News.jsp 和 Item1.htm 和 Item2.htm 和 Item3.htm 和 Item4.htm <jsp:include >的使用 7. ForwardTest.jsp 和 morning.htm 和 afternoon.jsp <jsp:forward >的使用

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

重点介绍 request,请求对象 session,会话对象 application,应用程序对象

综述 有几种对象看起来和ASP的内置对象差不多,功能也类似,这是因为这些内置对象的构建基础是标准化的HTTP协议。如果使用过ASP,又对Java有一定的了解的话,那么对这几种JSP内置对象的使用应该能迅速掌握。需要注意的问题是对象名的写法,包括这些对象方法的调用时也要书写正确,因为Java语言本身是大小写敏感的。

从本质上讲,JSP的这些内置对象其实都是由特定的Java类所产生的,在服务器运行时根据情况自动生成,所以如果你有较好的Java基础,可以参考相应的类说明,表3.1给出了他们的对应关系。更进一步的讲解将会在讲解Servlet的一章中展开,如果你的Java基础不太好,可以先熟悉在这一章里所介绍的各种方法的使用。

request和response “request” 对象代表的是来自客户端的请求,例如我们在FORM表单中填写的信息等,是最常用的对象。关于它的方法使用较多的是getParameter、getParameterNames和getParameterValues,通过调用这几个方法来获取请求对象中所包含的参数的值 “response” 对象代表的是对客户端的响应,也就是说可以通过“response”对象来组织发送到客户端的数据。但是由于组织方式比较底层,所以不建议普通读者使用,需要向客户端发送文字时直接使用“out” 对象即可。

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

request对象示例(输出结果) <HTML> <BODY> 你好, 独孤求败, 今天是 9号,星期1

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

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

session对象 概要 HTTP是无状态(stateless)协议; Web Server 对每一个客户端请求都没有历史记忆; 存于客户端; 客户端的每次访问都把上次的session记录传递给Web Server; Web Server读取客户端提交的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>

application对象 “application” 对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有getMimeType和getRealPath等。

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

config、 page、 exception “config” 对象提供一些配置信息,常用的方法有getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。 “page” 对象代表了正在运行的由JSP文件产生的类对象,不建议一般读者使用。 “exception” 对象则代表了JSP文件运行时所产生的例外对象,此对象不能在一般JSP文件中直接使用,而只能在使用了“<%@ page isErrorPage="true "%>”的JSP文件中使用

request请求对象 1.getAttribute 原型:public java.lang.Object getAttribute(java.lang.String name) 说明:以对象的形式返回特定名称的属性值。这个方法允许Servlet引擎给出一个客户请求的特定信息。 ( Servlet为服务器端小程序,所有JSP页面都事先翻译成Servlet后才执行)

request请求对象 如果所给名称的属性不存在将返回空值。 属性名应该遵循和包命名方式同样的约定,不要采用如“java.*”、“ javax.*”及 “sun.*”.这样的命名。 参数:name 一个标示属性名的字符串 返回值:一个包含属性值的对象,当属性不存在是为空。

request对象使用示例( peixun2.11.jsp ) <%@ page contentType="text/html;charset=gb2312" %> <html> <head> <title>request</title> </head> <body> <form method="POST" action="post.jsp"> <p align="center">用户登录 <p align="center"> 用户名:<input type="text" name="User" size="20">     密码:<input type="password" name="pwd" size="20"><br> <br>

浏览器类型: <input type="radio" name="radio" value="ie" checked >IE    <input type="radio" name="radio" value="ns">Netscape <br> 资料选项: <input type="checkbox" name="check1" value="ON" checked>标题 <input type="checkbox" name="check2" value="ON">详细 <input type="hidden" name="hidden" value="transPara"> </p><p align="center"> <input type="submit" value=" 提交"> <input type="reset" value="全部重写"></p> </form> </body> </html>

Post.jsp代码 <%@ page contentType="text/html;charset=gb2312"%> <head><title>test</title></head> <body> <% out.println("用户名:"+request.getParameter("User")+"<br>"); out.println("密码:"+request.getParameter("pwd")+"<br>"); out.println("浏览器:"+request.getParameter("radio")+"<br>"); out.println("标题:"+request.getParameter("check1")+"<br>"); out.println("详细:"+request.getParameter("check2")+"<br>"); out.println("隐含:"+request.getParameter("hidden")+"<br>"); out.println("getContentLength()="+request.getContentLength()+"<br>");

out. println("getContentType()="+request out.println("getContentType()="+request.getContentType()+"<br>"); out.println("getRequestURI()="+request.getRequestURI()+"<br>"); out.println("getServerPort()="+request.getServerPort()+"<br>"); out.println("getServerName()="+request.getServerName()+"<br>"); out.println("getProtocol()="+request.getProtocol()+"<br>"); out.println("getRemoteAddr()="+request.getRemoteAddr()+"<br>"); out.println("getHeaderNames()="+request.getHeaderNames()+"<br>"); out.println("getMethod()="+request.getMethod()+"<br>"); out.println("getServletPath()="+request.getServletPath()+"<br>"); out.println("isRequestedSessionIdValid()="+request.isRequestedSessionIdValid()+ "<br>"); %> </body> </html>

运行结果

session对象示例 <%--session对象示例,peixun2.12.jsp文件代码--%> <%@ page contentType="text/html;charset=gb2312"%> <html> <head><title>session</title></head> <body> <form method="post" action="post1.jsp"> 请输入您的姓名: <input type="text" name="username"> <input type="submit" value="submit"> </form > </body> </html>

post1.jsp <%@ page contentType="text/html;charset=gb2312"%> <head><title>post.jsp</title></head> <body> <%@ page language="java" %> <%! String name=""; %> <p> <% name = request.getParameter("username"); //将username存入session session.putValue("username", name); %> 您的姓名是:<%=name%> <p><form method="post" action="post11.jsp"> 您最喜欢的娱乐是: <input type="text" name="amuse"> <input type="submit" value="submit"> </p> </form> </body> </html>

post11.jsp <%@ page contentType="text/html;charset=gb2312"%> <head><title>post1.jsp</title></head> <body> <%@ page language="java"%> <%! String amuse=""; %> <% amuse=request.getParameter("amuse"); String user=(String)session.getValue("username"); %> 您的姓名是: <%=user%> 您喜欢的娱乐是: <%=amuse%> </body> </html>

运行结果

提交后

输入值

再次提交(保存名字)

application对象运行示例 <%--application对象示例,peixun2.13.jsp文件代码--%> <%@ page contentType="text/html;charset=gb2312"%> <html> <head><title>application</title><head> <body> <% out.println("Java Servlet API Version "+application.getMajorVersion() +"."+application.getMinorVersion()+"<br>"); out.println("peixun2.13.jsp's MIME type is:"+application.getMimeType("peixun2.13.jsp") +"<br>"); out.println("URL of 'peixun2.13.jsp' is: "+application.getResource(“/peixun2.13.jsp")+"<br>"); out.println("getServerInfo()="+application.getServerInfo()+"<br>"); out.println(application.getRealPath(" ")); application.log("Add a Record to log_file"); %> </body> </html>

运行结果

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

运行结果(第一次访问)

刷新一次

exception对象示例 <%--exception对象示例,ErrorPage.jsp文件代码--%> <%@ page contentType="text/html;charset=gb2312"%> <%@ page isErrorPage="true" %> <html> <body bgcolor="#ffffc0"> <h1>Error page login</h1> <br>An error occured in the bean. Error Message is: <br> <%= exception.getMessage() %><br> <%= exception.toString()%><br> </body> </html>

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

3.4 HTML表单 复习Web运行原理 HTML表单的概念 表单元素介绍 HTML表单的客户端确认 客户端表单确认实例

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

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

页面访问失败

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

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

表单的例子(peixun2.15.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">     密码:<input type="password" name="pwd" size="20"><br> <br> </form> </body> </html>

运行结果

form标记 描述表单的特性,语法 method表单传输方法 action为表单处理方式,通常为一个URL enctype为编码方式 <form method="POST" action="“ enctype=“”> method表单传输方法 GET方法将表单信息在URL后传输 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

客户端确认例子 <%--客户端确认例子,peixun2.17.jsp文件代码--%> <%@ page contentType="text/html;charset=gb2312"%> <html> <head><title>客户端确认</title><head> <body> <form method="POST" name="frm1" onsubmit="return checkform(this)"> <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>

运行结果

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

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

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

向客户端输出 使用内置对象out 使用“=” 参看peixun2.11.jsp和post.jsp out.println(content) 使用“=” <%= content% > 参看peixun2.11.jsp和post.jsp out.println("用户名:" +User+"<br>"); 参看peixun2.14.jsp 您是第<%=application.getAttribute("counter")%>位访问者!

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

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

服务器端确认的例子 <%--服务器端确认例子,peixun2.18.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)

(未输入姓名)直接提交

输入用户名

输入用户名后提交

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中指示浏览器文档的编码(myJSP\index.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) <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>