第二讲动态网页技术开发.docx

上传人:b****4 文档编号:12257527 上传时间:2023-04-17 格式:DOCX 页数:14 大小:21.69KB
下载 相关 举报
第二讲动态网页技术开发.docx_第1页
第1页 / 共14页
第二讲动态网页技术开发.docx_第2页
第2页 / 共14页
第二讲动态网页技术开发.docx_第3页
第3页 / 共14页
第二讲动态网页技术开发.docx_第4页
第4页 / 共14页
第二讲动态网页技术开发.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

第二讲动态网页技术开发.docx

《第二讲动态网页技术开发.docx》由会员分享,可在线阅读,更多相关《第二讲动态网页技术开发.docx(14页珍藏版)》请在冰豆网上搜索。

第二讲动态网页技术开发.docx

第二讲动态网页技术开发

第二讲动态网页技术开发

1.JSP程序设计

1.1什么是JSP

JSP是JavaServerPages的缩写。

一个JSP页面除了普通的HTML标记符外,再使用标记符号“<%”,“%>”加入Java程序片。

一个JSP页面文件的扩展名是jsp,文件的名字必须符合标识符规定,需要注意的是,JSP技术基于Java语言,名字区分大小写。

<%@pagecontentType="text/html;charset=GB2312"%>

这是一个简单的JSP页面

<%inti,sum=0;

for(i=1;i<=100;i++)

{sum=sum+i;

}

%>

1到100的连续和是:


<%=sum%>

1.2JSP运行原理

当服务器上的一个JSP页面被第一次请求执行时,服务器上的JSP引擎首先将JSP页面文件转译成一个java文件,再将这个java文件编译生成字节码文件,然后通过执行字节码文件响应客户的请求,而当这个JSP页面再次被请求执行时,JSP引擎将直接执行这个字节码文件来响应客户。

字节码文件的主要工作:

(1)把JSP页面中普通的HTML标记符号(页面的静态部分)交给客户的浏览器负责显示。

(2)执行“<%”和“%>”之间的java程序片(JSP页面中的动态部分),并把执行结果交给客户的浏览器显示。

Note:

理解服务器端执行demo1.jsp

<%@pagelanguage="java"contentType="text/html;charset=GBK"%>

<%@pageimport="java.util.*"%>

<%

Datednow=newDate();

intdhours=dnow.getHours();

intdminutes=dnow.getMinutes();

intdseconds=dnow.getSeconds();

out.println("服务器时间:

"+dhours+":

"+dminutes+":

"+dseconds);

%>

vardnow=newDate();

vardhours=dnow.getHours();

vardminutes=dnow.getMinutes();

vardseconds=dnow.getSeconds();

document.write("
浏览器时间:

"+dhours+":

"+dminutes+":

"+dseconds);

该部分程序的执行结果是一样的,是因为浏览器和服务器在同一台计算机上。

HTML代码可以直接查看,JSP代码是在服务器端解释的,浏览器端不可见。

1.3JSP与JavaServlet的关系

JavaServlet是Java语言的一部分,提供了用于服务器编程的API,JavaServlet编写的Java程序称为一个servlet。

servlet通过HTML与客户交互信息。

servlet的最大缺点是不能有效的管理页面的逻辑部分和页面的输出部分,导致servlet代码非常混乱,用servlet来管理网站变成一件很困难的事情。

为了克服servlet的缺点,SUN公司用JavaServlet作为基础,推出了JavaServerPage。

JSP提供了servlet的几乎所有好处,当一个客户请求一个JSP页面时,JSP引擎根据JSP页面生成一个Java文件,即一个servlet。

1.4JSP页面的基本结构

在传统的HTML页面文件中加入java程序片和JSP标签就构成了一个JSP页面文件。

JSP页面

(1)普通的HTML标记符。

(2)JSP标签:

如,指令标签、动作标签。

(3)JSP代码,使用“<%”和“%>”符号标记。

page指令

常用的page指令标记(属性)有:

language,import,contentType等。

<%@page属性1=“属性1的值”属性2=“属性2的值”……%>

importjava.util.*;

importjava.io.*;

include指令

用来将另一个文件包含到当前的JSP页面中,即可以是JSP页面也可以是HTML页面。

<%@includefile="文件的名字"%>

jsp:

include指令

includepage="文件的名字"/>

jsp:

forward指令

forwardpage="文件的名字"/>

1.5JSP代码

(1)变量和方法demo2.jsp

jsp代码中有两种生命变量和方法的方式:

“<%%>”和“<%!

%>”,后者定义的变量时被共享的,任何一个用户的操作都会影响到其他用户。

可以用来计数。

<%@pagelanguage="java"contentType="text/html;charset=GBK"%>

<%!

inti=0;%>

<%

i++;

out.println(i);

%>个人访问本站

定义函数。

synchronized表示当前一个用户在执行该方法的时候,其他的用户必须等待,直到该用户完成操作。

<%@pagelanguage="java"contentType="text/html;charset=GBK"%>

<%!

intnumber=0;

synchronizedvoidcountPeople(){

number++;

}

%>

<%

countPeople();

%>

本站访问量<%out.println(number);%>

1.6JSP内置对象

有些对象不用声明就可以在JSP页面的脚本部分使用,这就是JSP的内置对象。

JSP的内置对象有:

resquest、response、session、application、out。

HTTP通信协议是客户与服务器之间一种提交(请求)信息与响应信息(request/respone)的通信协议。

在JSP中,内置对象request封装了用户提交的信息,那么该对象调用相应的方法可以获取封装的信息,即使用该对象可以获取用户提交的信息。

(1)resquest对象

客户通常使用HTML表单向服务器的某个JSP页面提交信息,表单的一般格式:

提交手段

…..

其中

是表单标签,method取值get或post。

Get方法和post方法的主要区别是:

使用get方法提交的信息会在提交的过程中显示在浏览器的地址栏中,而post方法提交的信息不会显示在地址栏中。

提交手段包括:

通过文本框、列表、文本区等,例如:

上面的表单使用post方法向页面tom.jsp提交信息,提交信息的手段是:

在文本框输入信息,其中默认信息是“ok”;然后点击“送出”按钮向服务器的JSP页面tom.jsp提交信息。

request对象可以使用getParameter(Strings)方法获取该表单通过text提交的信息,比如:

request.getParameter(“boy”);

获取客户提交的信息demot.jsp

request对象获取客户提交信息的最常用的方法是getParameter(Strings)。

<%@pagecontentType="text/html;charset=GB2312"%>

<%StringtextContent=request.getParameter("girl");

doublenumber=0,r=0;

if(textContent==null)

{textContent="";

}

try{number=Double.parseDouble(textContent);

if(number>=0)

{r=Math.sqrt(number);

out.print("
"+String.valueOf(number)+"的平方根:

");

out.print("
"+String.valueOf(r));

}

else

{out.print("
"+"请输入一个正数");

}

}

catch(NumberFormatExceptione)

{out.print("
"+"请输入数字字符");

}

%>

当用request对象获取客户提交的汉字字符时,会出现乱码问题,所以对含有汉字字符的信息必须进行特殊的处理方式。

byteb[]=textContent.getBytes("ISO-8859-1");

textContent=newString(b);

(2)respons对象

与request对象相对应的对象是response对象。

我们可以用response对象对客户的请求作出动态响应,向客户端发送数据。

比如,当一个客户请求访问一个JSP页面时,该页面用page指令设置页面的contentType属性的值是text/html,那么JSP引擎将按着这种属性值响应客户对页面的请求,将页面的静态部分返回给客户。

contentType的取值有:

text/html、text/plainapplication/x-msexcel、application/msword等。

Demo3.jsp

<%@pagecontentType="text/html;charset=GB2312"%>

我正在学习response对象的


setContentType方法

将当前页面保存为word文档吗?

<%Stringstr=request.getParameter("submit");

if(str==null)

{str="";

}

if(str.equals("yes"))

{response.setContentType("application/msword;charset=GB2312");

}

%>

respose重定向

将客户重新引导至另一个页面。

例如,如果客户输入的表单信息不完整,就会再被引导到该表单的输入页面。

使用response的sendRedirect(URLurl)方法实现客户的重定向。

response.sendRedirect("**.jsp");

(3)session对象

session.jsp

<%@pagecontentType="text/html;charset=GB2312"%>

<%Strings=session.getId();

%>

您的session对象的ID是:


<%=s%>

输入你的姓名连接到tom.jsp

tom.jsp

<%@pagecontentType="text/html;charset=GB2312"%>

我是Tom页面

<%Strings=session.getId();

Stringname_str=(String)request.getParameter(“boy”);

byteb[]=name_str.getBytes("ISO-8859-1");

name_str=newString(b);

session.setAttribute("name_str",name_str);

%>

您的在Tom页面中的session对象的ID是:

<%=s%>,名字<%=name_str%>

点击超链接,连接到Jerry的页面。


欢迎到Jerry屋来!

jerry.jsp

<%@pagecontentType="text/html;charset=GB2312"%>

我是Jerry页面

<%Strings=session.getId();

Stringname_str=(String)session.getAttribute("name_str");

%>

您在Jerry页面中的session对象的ID是:

<%=s%>

名字:

<%=name_str%>

点击超链接,连接到session的页面。


欢迎到session屋来!

session对象和客户之间建立一一对应关系,即每个客户都对应着一个session对象(该客户的会话),这些session对象互不相同,具有不同的Id号码。

session对象的常用方法Demo4.jsp

(1)publicvoidsetAttribute(Stringkey,Objectobj)

session对象类似于散列表,session对象可以调用该方法将参数Object指定的对象obj添加到session对象中,并为添加的对象指定了一个索引关键字,如果添加的两个对象的关键字相同,则先前添加的对象被清除。

(2)publicObjectgetAttibue(Stringkey)获取session对象含有的关键字是key的对象。

由于任何对象都可以添加到session对象中,因此用该方法取回对象时,应强制转化为原来的类型。

(3)publicvoidremoveAttribue(Stringkey)从当前session对象中删除关键字是key的对象。

(4)publicStringgetId()

获取session对象的编号。

(4)application对象

与session对象不同的是application对象。

服务器启动后,就产生了这个application对象。

当一个客户访问服务器上的一个JSP页面时,JSP引擎为该客户分配这个application对象,当客户在所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭,这个application对象才被取消。

与session对象不同的是,所有客户的application对象是相同的一个,即所有的客户共享这个内置的application对象。

我们已经知道,JSP引擎为每个客户启动一个线程,也就是说,这些线程共享这个application对象。

application对象的常用方法

(1)publicvoidsetAttribute(Stringkey,Objectobj)

application对象可以调用该方法将参数Object指定的对象obj添加到application对象中,并为添加的对象指定了一个索引关键字,如果添加的两个对象的关键字相同,则先前添加对象被清除。

(2)publicObjectgetAttibue(Stringkey)

获取application对象含有的关键字是key的对象。

由于任何对象都可以添加到application对象中,因此用该方法取回对象时,应强制转化为原来的类型。

(3)publicEnumerationgetAttributeNames()

application对象调用该方法产生一个枚举对象,该枚举对象使用nextElemets()遍历application对象所含有的全部对象。

(4)publicvoidremoveAttribue(Stringkey)

从当前application对象中删除关键字是key的对象。

由于application对象对所有的客户都是相同的,任何客户对该对象中存储的数据的改变都会影响到其他客户,因此,在某些情况下,对该对象的操作需要实现同步处理。

用application制作留言板demo5.jsp

客户通过submit.jsp向messagePane.jsp页面提交姓名、留言标题和留言内容,messagePane.jsp页面获取这些内容后,用同步方法将这些内容添加到一个向量中,然后将这个向量再添加到application对象中。

当用户点击查看留言版时,showMessage.jsp负责显示所有客户的留言内容,即从application对象中取出向量,然后遍历向量中存储的信息。

(5)out对象

demo6.jsp

out对象是一个输出流,用来向客户端输出数据。

out对象可调用如下的方法用于各种数据的输出:

out.print(Boolean),out.println(boolean):

用于输出一个布尔值。

out.print(char),out.println(char):

输出一个字符。

out.print(double),out.println(double):

输出一个双精度的浮点数。

out.print(fload),out.println(float):

用于输出一个单精度的浮点数。

out.print(long),out.println(long):

输出一个长整型数据。

out.print(String),out.println(String):

输出一个字符串对象的内容。

out.newLine():

输出一个换行符。

out.flush():

输出缓冲区里的内容。

out.close():

关闭流。

例子

文件上传(demo7.jsp)

首先,我们将客户提交的全部信息保存为一个临时文件,该文件的名字是客户的session对象的Id,不同客户的这个Id是不同的。

然后读取该文件的第2行,这一行中含有客户上传的文件的名字,获取这个名字。

再获取第4行结束的位置,以及倒数第6行的结束位置,因为这两个位置之间的内容是上传文件的内容。

然后将这部分内容存入文件,该文件的名字和客户上传的文件的名字保持一致。

最后删除临时文件。

2.Servlet编程技术

2.1Servlet工作原理

servlet由支持servlet的服务器:

servlet引擎,负责管理运行。

当多个客户请求一个servlet时,引擎为每个客户启动一个线程而不是启动一个进程,这些线程由servlet引擎服务器来管理,与传统的CGI为每个客户启动一个进程相比较,效率要高的多。

一个servlet是javax.servlet包中HttpServlet类的子类,由支持servlet的服务器完成该子类的对象,即servlet的初始化。

Hello.javaSimpleservlet

2.2调用servlet的方式

通过表单向servlet提交数据(givenumber.jsp)

通过超链接访问servlet(connection.jsp)

2.3汉字问题

示例Character

2.4Servlet中的会话管理

和jsp中的相似。

request.getSession().setAttribute("loginUserName",loginUserName);

rolename=(String)request.getSession().getAttribute("loginRole");

示例servlet_session.jsp

2.5连接数据库

示例AccessDB

3实践

1.开发一个购物车。

用户通过一个JSP页面:

choice.jsp选择商品,提交给servlet:

AddCar,该servlet负责将商品添加到用户的session对象中(相当于用户的一个购物车),并将session对象中的商品显示给用户。

用户可以不断地从choice.jsp页面提交商品给AddCar。

用户通过remove.jsp页面选择要从购物车中删除的商品提交给servlet:

RemoveGoods,该servlet负责从用户的购物车(用户的session对象)删除商品。

2.采用Ajax+Servlet,查询数据库,实现分页显示。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1