第二讲动态网页技术开发.docx
- 文档编号:2359353
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:14
- 大小:21.69KB
第二讲动态网页技术开发.docx
《第二讲动态网页技术开发.docx》由会员分享,可在线阅读,更多相关《第二讲动态网页技术开发.docx(14页珍藏版)》请在冰点文库上搜索。
第二讲动态网页技术开发
第二讲动态网页技术开发
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页面提交信息,表单的一般格式: 提交手段 ….. 其中 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,查询数据库,实现分页显示。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二讲 动态网页技术开发 第二 动态 网页 技术开发