// 设定contentDisposition为null以禁止浏览器自动打开文件,
su.setContentDisposition(null);
// 下载功能
try {
su.downloadFile(docpath);
} catch (Exception e1) {
e1.printStackTrace();
response.setContentType("text/html;charset=gb2312");
response.getWriter().write(
"<script>alert('对不起,你访问的资源不存在!');</script>"); }
(2)由于用下载的Jar包在中文字符的处理上有问题,中文会显示乱码,所以我下载了smartupload的源码,手动修改里面的方法,实现对中文的支持。
public void upload(String charset) throws ServletException,IOException,SmartUploadException
{
int i = 0;
//boolean flag = false;
boolean flag1 = false;
//boolean flag2 = false;
long l = 0L;
//String s = "";//new String();
//String s2 = "";//new String();
String s4 = ""; //new String();
String s5 = ""; //new String();
String s6 = ""; //new String();
String s7 = ""; //new String();
String s8 = ""; //new String();
String s9 = ""; //new String();
String s10 = ""; //new String();
m_totalBytes = m_request.getContentLength();
m_binArray = new byte[m_totalBytes];
int j;
for(;i < m_totalBytes;i += j)
{
try
{
m_request.getInputStream();
j = m_request.getInputStream().
read(m_binArray,i,m_totalBytes - i);
}
catch(Exception exception)
{
throw new SmartUploadException("Unable to upload.");
}
}
只要upload.upload(“UTF-8”);类似这样传一个字符编码即可解决中文问题。
关键技术实现
Ajax实时增加节点作下拉菜单
JSON-RPC-Java是一个用Java来实现动态JSON-RPC的框架。利用它内置的一个轻量级 JSON-RPC java script 客户端,可以透明地在客户端java script中调用服务器端的Java代码。
JSON-RPC-Java可运行在Servlet容器中,如Tomcat,也可以运行在JBoss与其他JavaEE应用服务器中。因此可以在一个基于java script与DHTML的Web应用程序中利用它来直接调用普通Java方法与EJB中
使用方法:
1.将下载的jsonrpc.js导入到WebRoot的某个位置
2.将下载的jsonrpc.jar导入到WEB-INF/lib下
3.在web.xml中加入如下代码:
<servlet>
<servlet-name>
JSONRPCServlet
</servlet-name>
<servlet-class>
com.metaparadigm.jsonrpc.JSONRPCServlet
</servlet-class>
</servlet>
<servlet>
<servlet-mapping>
<servlet-name>
JSONRPCServlet
</servlet-name>
<url-pattern>/JSON-RPC</url-pattern>
</servlet-mapping>
关键代码段:
在要实现的页面顶部中加入:
<jsp:useBean id="JSONRPCBridge" scope="session" class="com.metaparadigm.jsonrpc.JSONRPCBridge">
</jsp:useBean>
<jsp:useBean id="ajax" class="com.eol.servlet.schoolAdmin.QueryLeftBar"></jsp:useBean>
<%
//在JSONRPCBridge中注册”ajax”,以便在JSONRpcClient对象中直接访问
JSONRPCBridge.registerObject("ajax", ajax);
%>
<script type="text/java script" src="js/jsonrpc.js"></script>
<script>
//创建JSONRpcClient对象
var jsonrpc = new JSONRpcClient("JSON-RPC");
var sid=${param.sid};
//在java script中调用服务器端的queryCampus方法
result=jsonrpc.ajax.queryCampus(sid);
//根据学校id查找该学校的校区列表,保存到list中
//循环list值,通过校区再查学校的全景
for(var i=0;i<result.length;i++){
document.write('<div class=MenuBox id=Menu_'+(i-1)+'>');
document.write("<div class=titBox>");
document.write("<h3 class=Fst>");
var a = result[i];
a = encodeURI(encodeURI(a));
document.write('<a href=QuerySidAndCampus?sid='+
sid+'&campus='+a+'>'+result[i]+'</a>');
document.write("</h3>");
document.write("</div>");
document.write("</div>");
result2=jsonrpc.ajax.queryPic(sid,result[i]);
document.write("<ul>");
for(var j=0;j<result2.length;j++)
{
document.write('<li>'+result2[j]+'</li>');
}
document.write("</ul>");
}
</script>
评论,回复评论效果的实现
图6.1 评论回复图
关键代码段:
<script type="text/java script">
function showbox(i){
var oldHTML = "";
var ioldIn = 0;
if (i>0){
if(ioldIn !=i) {
document.getElementById("oldid").value = document.getElementById("in"+i).value;
document.getElementById("sbox"+i).innerHTML = document.getElementById('sbox0').innerHTML;
document.getElementById("sbox"+i).style.display = "block"; }
}
else if(i==0){
for(j=1; j<6; j++){
document.getElementById("sbox"+j).innerHTML = "";
document.getElementById("sbox"+j).style.display = "none"; ioldIn = 0;
}
}
}
</script>
//这个java script代码用来做回复别人评论是出现的评论框的效果,通过判断哪一行的别点击,实现DIV层的显示和隐藏。
//评论时的笑脸表情的实现,将对应的数字和相应的图片地址替换
if(comment!=null){
if(comment.indexOf("[1]")>=0)
comment=comment.replace("[1]","<imgsrc='face001.gif'/>");
if(comment.indexOf("[2]")>=0)
comment= comment.replace("[2]","<img src='face002.gif'/>");
if(comment.indexOf("[3]")>=0)
comment= comment.replace("[3]","<img src='face003.gif'/>");
if(comment.indexOf("[4]")>=0)
comment= comment.replace("[4]","<img src='face004.gif'/>");
if(comment.indexOf("[5]")>=0)
comment= comment.replace("[5]","<img src='face005.gif'/>");
if(comment.indexOf("[6]")>=0)
comment= comment.replace("[6]","<img src='face006.gif'/>");
if(comment.indexOf("[7]")>=0)
comment= comment.replace("[7]","<img src='face007.gif'/>");
if(comment.indexOf("[8]")>=0)
comment= comment.replace("[8]","<img src='face008.gif'/>");
}
//[数字]来代替表情,存到数据库中,当输出评论时自动将数字替换为表情的地址,从而带到评论中可以附带表情的功能。
页面上用的动态排名及升下降得实现
图6.2 学校点击排名图
1、首页数据库中新建一个表:用来记录什么学校在什么时间被浏览了。
SELECT sname From TbSchooldate as a where convert(char(10),clickdate,126) = convert(char(10),getdate(),126) group by a.sname order by count(a.sname) DESC
//查询今天所有点击的学校。通过循环列出排名
SELECT sname From TbSchooldate as a where datediff(week,clickdate,getdate())=1 group by a.sname order by count(a.sname) DESC
//查询昨天所有点击的学校。通过循环列出
//然后通过比较获得该学校上升还是下降了几位
结束语
一个网站的长期发展需要有自己特色(核心竞争力)。从内容层面上讲,资讯类内容很难承担这个责任,而互动性的建立往往需要长期的积累,所以最终好的数据库信息将成为一个网站的支撑。而从营销角度来看,网站的互动性产生的网站粘度却是最关键的,甚至决定了网站的知名度和美誉度和品牌的形成。这个互动性不仅仅是指网站和学生之间的互动,而是指网站平台、学生(家长)、学校三者之间的互动。一个以高考报名为主题的网站或者版块,最好是以数据完善、前台查询功能方便的数据库内容为基础,以网站平台、学生(家长)、学校三者之间的良性互动为起飞的双翼。
目前国内的网站中,门户网站的教育频道还浮于表面,不够踏实;有一些网站对数据库内容做的比较深入,但是在营销上或者后期发展上还有缺乏;而更多网站还停留在新闻资讯层面,靠网络营销盈利,缺乏自己的特色,难成气候。
所以,这个行业对我们来说机遇很大。
致 谢
在本次毕业设计中,曾遇到过不少问题,如果单靠我个人的努力,很难按时完成毕业设计,在此,我衷心感谢指导过我的老师,首先感谢我的指导教师:吕太之老师。在实习的几个月里,当遇到难题时我就会请教他,他也耐心的帮我解答,寻找解决办法。让我顺利完成了360教育在线,他的严谨的治学风格、踏实的工作作风、平易近人的态度给我们留下了深刻的印象,谨此,向吕太之表示衷心感谢!
其次还要感谢我的父母和同学,谢谢你们的支持和帮助!
最后特别感谢在百忙之中抽出宝贵时间审阅文档的各位老师!
参考文献
[1]《使用JAVA技术开发网上书店》杨明 编著
[2]《科学技术文献出版社》,2005年12月
[3]《JSP数据库入门经典》John Kauffman等编著 清华大学出版社,2002年10月
[4]《使用Ajax和WebService重构网上书店》 徐袛祥 主编 科学技术文献出版社,2008年1月
[5]《Ajax基础教程》(美)Ryan Asleson,Nathaniel T.Schutta 编著 人民邮电出版社,2006年2月
[6]《JSP数据库编程案例精选》 徐袛祥 主编 科学技术文献出版社,2008年1月
[7]《面向对象的软件工程:构建复杂且多变的系统》(美)B.Bruegge;A.H.Dutoit 编著 清华大学出版社社,2002年10月
[8][美]麦斯科.《设计模式》.中国电力出版社,2005
[9][美]Nicholas C.Zakas.《java script高级程序设计》.人民邮电出版社,2006
[10][英]巴德. 《精通CSS:高级Web标准解决方案》.人民邮电出版社,2006
[11][英]基思. 《java script DOM编程艺术》.人民邮电