实验2 创建和发布Web应用程序.docx
《实验2 创建和发布Web应用程序.docx》由会员分享,可在线阅读,更多相关《实验2 创建和发布Web应用程序.docx(15页珍藏版)》请在冰点文库上搜索。
实验2创建和发布Web应用程序
实验二创建和发布Web应用程序
一、实验目的
动态Web很重要的一部分内容就是前台实现人机交互,在后台完成业务逻辑的运算。
本实验验证前后台数据传递的两种常用机制,进一步熟悉JSP结构,掌握后台响应进行动态处理的方法。
更常用的后台响应程序用Servlet。
Servlet是纯Java程序,但也可以输出HTML静态代码。
通过本实验,掌握Servlet的编程结构,理解Servlet生命周期。
有关Servlet的更高级应用请参阅相关教材。
以下选做:
JDBC是Java访问数据库的基础组件。
通过本实验,掌握JDBC连接数据库的方法和步骤;掌握数据访问的方法;了解不同数据库和不同提供商提供的驱动程序;
二、实验内容
1.用JSP的内置对象request在前后台页面间传递表单数据;
2.用置对象JavaBean在前后台页面间传递表单数据;
3.验证是否对数值、西文、中文字符都能正常传递;
4.用Servlet作后台响应程序,注意与JSP程序结构有何不同?
5.掌握在MyEclipse开发环境下正确创建Servlet程序的过程;
6.理解部署描述文件web.xml的作用;
以下选做:
1.以MSSQLServer2005为数据库,用微软提供的JDBC驱动建立连接。
2.先用Application程序验证将数据插入数据库表,然后从数据库表中读回数据验证刚插入的数据是否正确;
3.然后用Web程序实现form表单界面输入的数据插入数据库表,然后读回数据验证插入数据是否正确;
三、实验方法和步骤
==============================================================
第一部分:
利用JSP+BEAN实现如下图所示的留言板:
1.用值对象JavaBean实现页面间的参数传递
(1)创建值对象JavaBean,用以存储单条留言,包括标题、留言内容:
//WordBean.java
packageexamples;
publicclassWordBean{
privateStringwordTitle;
privateStringwordContent;
publicStringgetWordTitle(){
returnwordTitle;
}
publicvoidsetWordTitle(StringwordTitle){
this.wordTitle=wordTitle;
}
publicStringgetWordContent(){
returnwordContent;
}
publicvoidsetWordContent(StringwordContent){
this.wordContent=wordContent;
}
}
(2)创建值对象JavaBean,用以存储多条留言,使用ArrayList存储:
//WordsListBean.java
packageexamples;
importjava.util.ArrayList;
importjava.util.List;
publicclassWordsListBean{
privateListwords;
publicWordsListBean(){
words=newArrayList();
}
publicbooleanaddWord(WordBeanword){
words.add(word);
returntrue;
}
publicListgetWords(){
returnwords;
}
publicvoidsetWords(Listwords){
this.words=words;
}
}
(3)创建前台主界面WordUseBean.jsp
<%@pagelanguage="java"pageEncoding="UTF-8"%>
useBeanid="wordbean"class="examples.WordBean"scope="page">
useBean>
useBeanid="wordsbean"class="examples.WordsListBean"scope="application">
useBean>
<%request.setCharacterEncoding("UTF-8");%>
setPropertyname="wordbean"property="*"/>
<%
Stringpath=request.getContextPath();
StringbasePath=request.getScheme()+":
//"+request.getServerName()+":
"+request.getServerPort()+path+"/";
%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
">
<%
if(wordbean.getWordTitle()!
=null&&wordbean.getWordContent()!
=null)
wordsbean.getWords().add(wordbean);
%>
留言标题 | 留言内容 |
---|
<%
for(inti=0;i{
examples.WordBeanword=(examples.WordBean)wordsbean.getWords().get(i);
%>
<%=word.getWordTitle()%> | <%=word.getWordContent()%> |
<%
}
%>
标题: | |
内容: | |
|
functioncheckForm(){
if(document.all.wordTitle.value==''){
alert("对不起,留言标题不能为空!
");
returnfalse;
}elseif(document.all.wordContent.value==''){
alert("对不起,留言内容不能为空!
");
returnfalse;
}else{
returntrue;
}
}
【在线思考】
与通过内置对象request获取请求数据相比,WordUseBean.jsp页面增加了什么类型的标签?
分析标签里的内容和作用。
========================================================
第二部分:
利用JSP+BEAN+SERVLET实现如下图所示的留言板:
2.用Servlet实现页面间的参数传递
(1)创建WordUseServlet.jsp,内容如下:
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
<%@pageimport="examples.WordsListBean"%>
useBeanid="wordsbean"class="examples.WordsListBean"scope="application">
useBean>
<%
Stringpath=request.getContextPath();
StringbasePath=request.getScheme()+":
//"+request.getServerName()+":
"+request.getServerPort()+path+"/";
%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
">
留言标题 | 留言内容 |
---|
<%
for(inti=0;i{
examples.WordBeanword=(examples.WordBean)wordsbean.getWords().get(i);
%>
<%=word.getWordTitle()%> | <%=word.getWordContent()%> |
<%
}
%>
wordadded:
${word.wordTitle}
${word.wordContent}
标题: | |
内容: | |
|
functioncheckForm(){
if(document.all.wordTitle.value==''){
alert("对不起,留言标题不能为空!
");
returnfalse;
}elseif(document.all.wordContent.value==''){
alert("对不起,留言内容不能为空!
");
returnfalse;
}else{
returntrue;
}
}
(2)MyEclipse创建Servlet文件向导
选定当前工程击右键,“新建”—“Servlet”进入图4.1窗口,按提示输入文件名,选定要创建的方法。
点击“下一步”进入图4.2确定web.xml描述文件中对Servlet的描述,请见web.xml。
这里的ServletjspmappingURL是确定Servlet网络访问的映射名字,字符要尽量简单。
按“完成”生成Servlet代码框架。
业务逻辑代码在doPost()方法中。
图4.1创建Servlet窗口
图4.2确定Servlet在web.xml中的描述
(3)验证Servlet能正确地得到Form数据和输出HTML文档。
AddWordServlet.java如下:
packageexamples;
importjava.io.IOException;
importjava.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
publicclassAddWordServletextendsHttpServlet{
/**
*Constructoroftheobject.
*/
publicAddWordServlet(){
super();
}
/**
*Destructionoftheservlet.
*/
publicvoiddestroy(){
super.destroy();//Justputs"destroy"stringinlog
//Putyourcodehere
}
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
doPost(request,response);
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
request.setCharacterEncoding("UTF-8");
WordBeanword=newWordBean();
word.setWordTitle(request.getParameter("wordTitle"));
word.setWordContent(request.getParameter("wordContent"));
WordsListBeanwordsbean=(WordsListBean)getServletContext().getAttribute("wordsbean");
//在com.un.web.MyListener中初始化wordsbean。
if(wordsbean!
=null)
{
wordsbean.addWord(word);
}
request.setAttribute("word",word);
getServletContext().getRequestDispatcher("/WordUseServlet.jsp").forward(request,response);
}
publicvoidinit()throwsServletException{
//Putyourcodehere
}
}
(4)修改部署描述文件web.xml,添加如下内容:
AddWordServlet
examples.AddWordServlet
AddWordServlet
/servlet/AddWordServlet
【在线思考】
●请在前台分别输入数值、西文、中文字符串,后台是否得到正确的结果?
●请注释掉语句request.setCharacterEncoding("UTF-8");重复上面的输入,你会看到什么现象?
你会得到什么结论?
3.(选做)使用JDBC连接数据库
DBMS用SQLServer2005;建立数据库hhit,表guestboot,验证用MSforJDBC驱动;执行insert和select语句。
USE[hhit]
GO
/******对象:
Table[dbo].[guestbook]脚本日期:
03/10/201217:
14:
50******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
CREATETABLE[dbo].[guestbook](
[id][int]IDENTITY(1,1)NOTNULL,
[username][nvarchar](50)COLLATEChinese_PRC_CI_ASNULL,
[title][nvarchar](50)COLLATEChinese_PRC_CI_ASNULL,
[contents][nvarchar](50)COLLATEChinese_PRC_CI_ASNULL,
[pubdate][datetime]NULL,
CONSTRAINT[PK_guestbook]PRIMARYKEYCLUSTERED
(
[id]ASC
)WITH(IGNORE_DUP_KEY=OFF)ON[PRIMARY]
)ON[PRIMARY]
实现代码请参考HelloWorld.rar包中的WEB项目。
四、实验思考
1.总结用内置对象request与用JavaBean传递数据各有何特点?
2.与JSP比较Servlet处理静态和动态代码有何不同?
由此引申说明后台响应大多采用Servlet的原因;
3.在MyEclipse集成开发环境下,创建Servlet时为什么使用向导?
用创建普通类的向导是否可行?
五、实验报告
1.参考指导书中的实验程序,编程验证两种传递表单参数的机制;
2.根据【在线思考】的提示,分析调试中遇到的问题及解决的办法;
3.按思考题的提示总结出用内置对象request与用值对象JavaBean传递数据在编程上的变化;
4.创建Servlet实验程序,编程验证Servlet如何使用表单数据;
5.根据【在线思考】的提示,分析调试中遇到的问题及解决的办法;
6.按思考题的提示总结出JSP与Servlet在编程和使用上的区别;