第3章JSP基础编程本课教学内容B/S结构建立Web项目注释jsp表达式、程序段和声明URL传值jsp指令和动作表单开发隐藏表单中文乱码问题B/S简介B/S结构C/S(客户机/服务器)B/S(浏览器/服务器)C/S结构模式图B/S结构模式图B/S简介C/S(客户机/服务器)C/S,分为客户机和服务器两层,把应用软件安装在客户机端,通过网络与服务器端相互通信。如果客户端改动了(如界面丰富,功能增加),就必须通知所有的客户端重新安装,维护稍有不便B/S简介B/S(浏览器/服务器)B/S结构却可以不用通知客户端安装某个软件,内容修改了,也不需要通知客户端升级。B/S也分为客户机和服务器两层,但是客户机上不用安装软件,只需要使用浏览器即可Web程序定义:Web原意是蜘蛛网,或网。在互联网等技术领域,特指网络,在应用程序领域,又是WorldWideWeb(万维网)的简称。在Web程序结构中,浏览器端与Web服务器端采用请求/响应模式进行交互。Web程序运行描述客户端Web服务器数据库服务器1:用户输入2:发送请求5:返回响应3:访问数据4:返回结果6:显示浏览器端与服务器端的交互模式Web程序运行描述浏览器端与服务器端的交互模式过程描述:客户端(通常是浏览器,如IE、Firefox等)接受用户的输入,如用户名、密码、查询字符串等客户端向Web服务器发送请求:输入之后,提交,客户端把请求信息(包含表单中的输入以及其他请求等信息)发送到Web服务器端,客户端等待服务器端的响应Web程序运行描述数据处理:Web服务器端使用某种脚本语言访问数据库,查询数据,并获得查询结果数据库向Web服务器中的程序返回结果发送响应:Web服务器端向客户端发送响应信息(一般是动态生成的HTML页面)显示:由用户的浏览器解释HTML代码,呈现用户界面Web程序应用于Web的编程语言:CGIPHPASPJSP。。。建立Web项目创建Web网站所涉及的几个步骤如下:创建Web项目:建立基本结构设计Web项目的目录结构:将网站中的各个文件分门别类编写Web项目的代码:编写网页部署Web项目:在服务器中运行该项目在MyEclipse中创建Web项目见课本目录结构Web项目要求按特定的目录结构组织文件,当在MyEclipse中创建完毕新的Web项目,就可以在MyEclipse的PackageExplorer中看到该Web项目的目录结构,由MyEclipse自动生成。目录用途src目录:用来存放Java源文件。WebRoot目录:是该Web应用的顶层目录,也称为文档根目录,由以下部分组成:两个重要目录(不要随意修改或者删除):WEB-INF目录:该目录存在于文档根目录下。但是该目录不能被引用,也就是说,该目录下存放的文件无法对外发布,当然就无法被用户访问到了目录用途META-INF目录:系统自动生成,存放系统描述信息,一般情况下使用较少其他目录,主要是网站中的一些用户文件,包括HTML网页、CSS文件、图像文件、JSP文件等部署页面编写完成之后,必须要将整个项目放到服务器中去运行,这叫做部署Web项目,具体操作步骤分为以下几步:单击MyEclipse工具栏上的部署图标在新弹出的对话框中选择欲部署的项目,接着单击Add按钮在下一个新弹出的对话框中,选择server为Tomcat6.x,然后单击Finish按钮运行部署Web项目后,就要开始访问页面:运行Tomcat6.x服务器(前面已经叙述过),开启IE窗口,输入URL为,按回车键并查看运行结果项目已经被放到了服务器中,路径是:C:\ProgramFiles\ApacheSoftwareFoundation\Tomcat6.0\webapps开发Web程序的常见错误未启动Tomcat未部署Web应用就访问URL输入错误注释一类是能够发送给客户端,可以在源代码文件中显示出其内容。主要是以HTML注释语法出现:!--注释内容--注释是代码不可或缺的重要组成部分。JSP注释可以分成两类:注释另一类是不能发送给客户端的,也就是说不会在客户端的源代码文件中显示其内容,仅提供给程序员阅读的,分为两种:JSP注释语法:%--注释内容--%Java代码注释://注释内容/*注释内容*/表达式、程序段和声明JSP表达式的作用是定义JSP的一些输出。表达式基本语法如下所示:%=变量/返回值/表达式%JSP表达式的作用是将其里面内容所运算的结果输出到客户端表达式、程序段和声明使用JSP表达式,需要注意几个细节:JSP表达式中不能用;结束在JSP表达式中不能出现多条语句JSP表达式的内容一定是字符串类型,或者能通过toString()函数转换成字符串的形式*详细代码示例见课本URL传值HTTP是无状态的协议。Web页面本身无法向下一个页面传递信息,如果需要让下一个页面得知该页面中的值,除非通过服务器。Web页面之间传递数据,是Web程序的重要功能,其流程如图:URL传值客户端页面1输入guokehua客户端页面2显示guokehuaP2发送guokehua响应服务器URL传值URL传值的局限性:传输的数据只能是字符串,对数据类型具有一定限制传输数据的值会在浏览器地址栏里面被看到,秘密性要求很严格的数据(如密码),不应该用URL方法来传值URL传值URL传值的优势:简单性和平台支持的多样性(没有浏览器不支持URL),很多程序还是用URL传值比较方便集合框架包括接口、实现和算法JSP指令和动作JSP指令告诉JSP引擎对JSP页面如何编译,不包含控制逻辑,不会产生任何可见的输出。其用法如下:%@指令类别属性1=属性值1属性n=属性值n%*注意,属性名大小写是敏感的JSP包含三个指令:page、include和taglib。其中,使用最多的是page指令和include指令JSP指令page指令的作用有:导入包:%@pageimport=包名.类名%设定字符集:%@pagepageEncoding=编码类名%设定MIME类型和字符编码:%@pagecontentType=MIME类型;charset=字符编码%JSP指令page指令的作用有:设定错误页面:在发生异常的页面上写:%@pageerrorPage=anErrorPage.jsp%在anErrorPage.jsp页面上写:%@pageisErrorPage=true%JSP动作JSP动作指使用XML语法格式的标记来控制服务器的行为。其用法如下:jsp:动作名属性1=属性值1属性n=属性值n/jsp:动作名相关内容/jsp:动作名JSP动作两个常见的JSP动作:jsp:include:当页面被请求时引入一个文件jsp:includepage=文件名/jsp:forward:将请求转到另外一个页面jsp:forwardpage=文件名/表单开发在一些系统中,如果用户要进行登录,就必须输入账号密码,这就是表单,例如:系统登录界面表单开发表单有如下性质:表单中可以输入一些内容,这些输入功能由控件提供,叫做表单元素表单中一般都有一个按钮负责提交点击提交按钮,表单元素中的内容会提交给服务器端表单元素放在form/form之间单一表单元素数据的获取单一表单元素,是指表单元素的值送给服务器端时,仅仅是一个变量。这种情况下的表单元素主要有:文本框、密码框、多行文本框、单选按钮、下拉菜单等单一表单元素数据的获取文本框、密码框、多行文本框、单选按钮和下拉菜单,其中的内容的获取方法均相同,利用request.getParameter(表单元素名)方法获得一个字符串。*具体代码示例见课本捆绑表单元素数据的获取捆绑表单元素,是指多个同名表单元素的值送给服务器端时,是一个捆绑的数组。这种情况下的表单元素主要有:复选框、多选列表框、其他同名表单元素等捆绑表单元素数据的获取具体获得方法和一般表单元素类似,同样利用request.getParameterValues(表单元素名)获得字符串数组*具体代码示例见课本隐藏表单例子:页面1中定义了一个数值变量,并显示其平方;要求在页面2中显示其立方。很明显,页面2必须知道页面1中定义的那个变量。可以用URL传值。但是通过URL方法,传递的数据可能被看到。为了避免这个问题,我们可以用表单将页面1中的变量传给页面2,这个表单就可以设定为页面1中的隐藏表单。隐藏表单网页制作中,input有一type=hidden的选项,它是隐藏在网页中的的一个表单元素,并不在网页中显示出来。这就是实现隐藏表单的方法实现方法:隐藏表单此时浏览器地址栏上的地址数据还是能够被看到。解决该问题的方法是将form的action属性设置为post(默认为get)解决数据传输安全问题方法:隐藏表单隐藏表单的弊端和URL方法类似,该方法传输的数据只能是字符串,对数据类型具有一定限制传输数据的值虽然在浏览器地址栏内不被看到,但是在客户端源代码里面也会被看到*具体代码示例见课本中文乱码问题如果使用的是Tomcat服务器,在提交过程中,如果提交的内容中含有中文,经常会出现中文乱码问题,出现的种类如下:中文无法显示没有把文件头上的字符集设置为中文字符集。一定要保证文件头上写明:%@pagelanguage=javapageEncoding=gb2312%或%@pagelanguage=javacontentType=text/html;charset=gb2312%中文乱码问题提交过程中显示乱码,有3种方法解决这个问题将其转成gb2312格式直接修改request的编码利用过滤器中文乱码问题将其转成gb2312格式方法如下:变量(字符串)=newString(变量(字符串).getBytes(ISO-8859-1),gb2312)中文乱码问题直接修改request的编码可以将request的编码修改为支持中文的编码,这样,整个页面中的请求,都可以自动转为中文request.setCharacterEncoding(gb2312)中文乱码问题利用过滤器利用过滤器,可以对整个Web应用进行统一的编码过滤,比较方便。该内容在后面的章节中提到*具体代码实例见课本本章结束本章总结Web站点的基本原理JSP的基本语法表单开发和隐藏表单上机习题