《Web体系结构与开发技术》实验报告.docx
- 文档编号:9948001
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:20
- 大小:118.58KB
《Web体系结构与开发技术》实验报告.docx
《《Web体系结构与开发技术》实验报告.docx》由会员分享,可在线阅读,更多相关《《Web体系结构与开发技术》实验报告.docx(20页珍藏版)》请在冰豆网上搜索。
《Web体系结构与开发技术》实验报告
《Web体系结构与开发技术》实验报告
班级:
计软二班学号:
20095538姓名:
郭凯
实验日期:
2011/12/16实验成绩:
一、实验目的
1.了解Web体系结构与开发技术的基本知识
2.掌握静态页面的标签结构,能够编写静态页面。
3.掌握Flash的基本原理,会使用AdobeFlash制作Flash动画。
4.掌握动态网站技术JSP,理解其原理,并使用JSP技术制作个人网站。
二、实验原理
JSP(JavaServerPages)是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。
JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。
用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。
网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。
JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。
Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。
插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。
JSP与JavaServlet一样,是在服务器端执行的,通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
三、实验步骤
1.网站前期准备工作。
1)网站功能设计。
网站为在线音乐网站,主要功能有:
用户在线听音乐,管理员后台登录,添加、管理歌手,添加、管理歌曲等功能。
2)数据库设计。
由于网站功能较少,结构较简单,数据库设计也比较简单,具体如下:
数据库名:
music_db
数据表设计:
admin(管理员表):
idint主键自增
namevarchar(10)登录名
pwdvarchar(20)登录密码
typeint管理员权限
song(歌曲表):
idint主键自增
namevarchar(30)歌曲名
artistvarchar(20)艺术家(歌手)
albumvarchar(30)所属专辑
urlvarchar(50)硬盘路径
genrevarchar(10)流派
durationvarchar(10)时长
timesint点播次数(热度)
artist(歌手表):
idint主键自增
namevarchar(20)艺术家名(歌手名)
typevarchar(5)性别
areavarchar(20)地区
notevarchar(1000)简介
songsint歌曲数量
hotint热度
3)目录结构设计。
在开发工具MyEclipse中新建WebProject工程music_player,并创建如下目录:
各目录说明:
/src资源目录,包含编写的各种Java类,Servlet源文件
/WebRoot网站根目录
/WebRoot/admin后台管理界面的所属目录
/WebRoot/conn包含连接数据库的代码文件
/WebRoot/csscss样式表文件目录
/WebRoot/images网站排版所需图片目录
/WebRoot/jsjs代码文件目录
/WebRoot/META-INF系统自动生成的目录
/WebRoot/music存放上传的音乐文件目录
/WebRoot/WEB-INF存放Web信息目录,包含所需类库,配置文件
2.网站代码编写。
1)登录界面。
原理简介:
通过将login.jsp页面表单的action设置为./admin/index.jsp,将表单填写的用户密码值传递给后台页面,后台index.jsp页面通过查询数据库,比对用户是否存在以及密码是否正确,如果正确,则进入后台,并设置session保存登录信息;否则返回登录页面,并通过url传递登录出错信息并显示。
关键代码:
见附录:
代码片段1。
2)添加歌曲界面。
原理简介:
后台./admin/add_song.jsp界面显示添加歌曲表单。
将表单属性设置为enctype=”multipart/form-data”使之能上传二进制文件,同时action设置为ServletUploadServlet.java,UploadServlet.java的主要功能为获取上传的表单域的值,将其转码为UTF-8格式以及将二进制歌曲文件存储到磁盘,并将数据写入到数据库中。
关键代码:
见附录:
代码片段2。
3)管理歌曲及歌手。
原理简介:
通过查询数据库,将现有歌手及歌曲的信息以表格形式显示出来,为每一个数据添加操作(删除,修改),通过点击操作进入相应的操作页面,然后进行相应的操作,并将操作结果存如数据库,完成数据的修改。
关键代码:
略。
4)防止恶意登录。
为防止他人在未进行登录验证的情况下通过输入恰当的url登录后台,在登录后台页面时均会检验其是否已登录,即检验是否已设置session值,如已设置,才能登录,否则会跳转到登录页面。
且session的设置只有在其登录成功后才能设置生效。
当退出后,会立即清楚session值。
关键代码:
略。
5)前台主页面各功能逻辑。
原理简介:
通过点击导航条,主页获得查询字符串中的值对,获得要显示的内容及定位。
例如导航条中的排行榜,其链接为./index.jsp?
current=rank,则为链接到主页(即本页面),并传递current=rank值对,主页通过获得值对,知道要显示的内容为“排行榜”,于是进行相应的工作,如查询数据库,设置相应的值,然后将数据显示到页面的相应标签内。
关键代码:
见附录:
代码片段3。
6)前台播放歌曲功能。
原理简介:
播放歌曲功能主要通过加载WindowsMediaPlayer控件来实现歌曲的播放。
其主要内容为
歌曲的播放,暂停,音量大小由js代码控制控件实现。
当点击歌曲后面的播放链接后,如./index.jsp?
current=rank&play=13,主页通过play=13获得要播放歌曲的ID,通过查询数据库获得歌曲的磁盘路径,并将路径值设置给一个隐藏的标签,在页面初始化后,js代码获得路径值,并传递给控件,然后点击播放按钮,则能通过js播放歌曲。
关键代码:
见附录:
代码片段4。
四、实验结果
代码片段1(登录验证)
//判断是否已登录(即是否已设置session值)
//已登录则获取值,未登录则返回登录页面
if(session.getAttribute("admin_name")!
=null)//session已设置
admin_name=session.getAttribute("admin_name").toString();
elseif(session.getAttribute("admin_name")==null&&request.getParameter("name")==null)//session未设置且不是从登录页面转来此页面
response.sendRedirect("../login.jsp?
islogin=unlogin");
else//从登录页面转来此页面,获取表单,检验正确性
{
//获取表单数据
if(request.getParameter("name")!
=null)
name=request.getParameter("name").toString();
if(request.getParameter("pwd")!
=null)
pwd=request.getParameter("pwd").toString();
//转码
name=newString(name.getBytes("ISO-8859-1"),"UTF-8");
pwd=newString(pwd.getBytes("ISO-8859-1"),"UTF-8");
//查询数据库
sql="select*fromadminwherename='"+name+"'";
ResultSetrs=stmt.executeQuery(sql);
Stringquery_pwd="";
if(rs.next())
query_pwd=rs.getString("pwd");
//比对密码
if(query_pwd==""||!
pwd.equals(query_pwd))//用户名或密码不对,重新登录
response.sendRedirect("../login.jsp?
islogin=wrong");
else//登录成功,设置session
session.setAttribute("admin_name",name);
}
代码片段2(添加歌曲的ServletUploadServlet.java)
importmons.fileupload.FileItem;
importmons.fileupload.FileItemFactory;
importmons.fileupload.FileUploadException;
importmons.fileupload.disk.DiskFileItemFactory;
importmons.fileupload.servlet.ServletFileUpload;
importjava.text.SimpleDateFormat;
importjava.util.Calendar;
importjava.util.Date;
importjava.util.Iterator;
importjava.util.List;
importjava.io.*;
importjava.sql.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
publicclassUploadServletextendsHttpServlet{
publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException
{
try
{
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriterout=response.getWriter();
FileItemFactoryfactory=newDiskFileItemFactory();
ServletFileUploadupload=newServletFileUpload(factory);
List
InputStreamis=null;
StringuploadPath="D:
\\workspace\\music_player\\WebRoot\\music\\";//存储路径
Stringfilename="";
Stringresult="";//结果字符串
booleansuccess=false;//事务指示
booleansuccess1=false;
booleansuccess2=false;
String[]valuerow=newString[4];
inti=0;
for(FileItemitem:
items)
{
if(item.isFormField())
{
Stringfieldname=item.getFieldName();
Stringvalue=item.getString("UTF-8");
valuerow[i]=value;
i++;
}
elseif(item.getName()!
=null&&!
item.getName().equals(""))
{
filename=item.getName().substring(item.getName().lastIndexOf("\\")+1);
is=item.getInputStream();
}
elseif(item.getName()==null&&item.getName().equals(""))
out.println("无文件");
}
//以时间命名文件
intindex=filename.indexOf(".");
Datedt=newDate();
SimpleDateFormatsdf=newSimpleDateFormat("yyyyMMddHHmmssSSS");
filename=filename.substring(0,index)+sdf.format(dt)+filename.substring(index);
filename=uploadPath+filename;
//连接数据库,检查歌手是否已存在,后再则开始上传
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
Stringurl="jdbc:
sqlserver:
//localhost:
1433;DatabaseName=music_db;characterEncoding=UTF8";
Stringdb_user="sa";
Stringdb_pwd="sa";
Connectionconn=DriverManager.getConnection(url,db_user,db_pwd);
Statementstmt=conn.createStatement();
Stringsql="select*fromartistwherename='"+valuerow[1]+"'";
booleanisexit=true;
ResultSetrs1=stmt.executeQuery(sql);
if(rs1.next())
isexit=true;//歌手已存在
else
isexit=false;//歌手不存在
if(!
isexit)
{
out.println("歌手不存在,请先
}
else
{
sql="insertintosong(name,artist,album,url,genre,times)values('"+valuerow[0]+"','"+valuerow[1]+"','"+valuerow[2]+"','"+filename+"','"+valuerow[3]+"',0)";
intrs=stmt.executeUpdate(sql);
if(rs==1)
success1=true;
else
success=false;
//开始上传
if(!
filename.equals(""))
{
FileOutputStreamfos=newFileOutputStream(filename);
byte[]buffer=newbyte[8192];//每次读8K字节
intcount=0;
while((count=is.read(buffer))>0)
{
fos.write(buffer,0,count);
}
fos.close();
is.close();
success2=true;
}
}
success=success1&&success2;//事务成功?
if(success)
result="添加成功!
else
{
result="添加失败,";
if(success1==false)
result+="数据库错误,";
if(success2==false)
result+="上传错误,";
result+="
";
}
if(success)
out.println(result);
}
catch(Exceptione)
{
System.err.println(e.getMessage());
}
}
}
代码片段3(前台页面逻辑)
Stringcurrent="";
if(request.getParameter("current")!
=null)
current=request.getParameter("current").toString();
<%
if(current.equals("rank"))///////////////////排行榜
{
%>
top10歌手
歌手 | 歌曲数 | 热度 |
<%=name%> | current=song&artistid=<%=artistid%>"><%=songs%> | <%=hot%> |
top10歌曲
歌名 | 歌手 | 播放次数 | 播放 |
<%=name%> | <%=artist%> | <%=times%> | current=rank&play=<%=songid%>">播放 |
<%
代码片段4(控件控制control.js)
varstate;
varvarb;
varvarfullscreen=0;
functionloop()
{
WindowsMediaPlayer.playCount=2;
}
functionopenfile()
{
if(url.value=="")
return;
WindowsMediaPlayer.URL=url.value;
}
functionplayerinit()
{
WindowsMediaPlayer.url="";//定义你自己的文件
WindowsMediaPlayer.settings.autoStart=false;
}
functionplay()
{
if(WindowsMediaPlayer.controls.isavailable('play'))
{
WindowsMediaPlayer.controls.play();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Web体系结构与开发技术 Web 体系结构 开发 技术 实验 报告