下載鏈接:http://go.rritw.com/download.csdn.net/detail/hacke2/4744171
1.可行性分析
web開發技術是Internet應用的一個重要方而,而JSP又是web開發的最先進的技術,是當前web開發人員的首選技術。
隨着網络技術的日益普及和信息化建設的重視,網络硬盤是一種新型安全的網络存儲系統,已越來越受到.人們的重視和喜歡,主要适用個人文件存儲,可以用作個人的一個網络U盤,網络硬盤是一塊專屬的存儲空間,用戶通過上網登錄網站的方式,可以方便上傳、蔔載文件。只要能上網就可以用網络硬盤登錄到服務器上進行個人文件的上傳、刪除等操作,隨時隨地存儲自己的個人文件。
2.需求分析
2.1 系統模塊設計
本系統做为一個較完整的網站,主要系統的主要模塊如下:
·會員注冊 新會員要登錄該網站享有對自己的資源進行下載或者上傳資料就必須的有自己的會員號碼。會員在注冊的時候需要填寫會員名、登錄密碼、確認密碼等信息。如果該會員已經存在與該系統的會員信息數據庫中,則提示注冊失敗。
·會員登錄 會員根據自己注冊的會員號碼和密碼登錄該系統。首次登陆會在TOMCAT目錄裏建一個以自己用戶名命名的目錄。
·修改密碼 會員为了自己的信息的安全可以對自己的注冊時候填寫的密碼進行修改。
·上傳文件 上傳自己的文件,大小格式均有限制。
·下載文件 下載你自己的文件
2.2 數據庫設計
本系統使用MySQL數據庫建立了一個userinfo數據庫,表用來存儲會員的信息,還有一個admin來存儲管理員账號密碼。
2.2.1 userinfo表的字段
會員的注冊信息存入userinfo表中,userinfo的主鍵是id,標准的字段說明如下:
·id 會員注冊時自動增長的識別碼
·userName 會員用戶名
·userPassword 會員密碼
2.2.2 userinfo的詳細設計如圖2-1所示
圖 2-1
2.2.3 admin表的字段
管理員的注冊信息存入admin表中,admin的主鍵是adminName,默認值为admin,鍵adminPassword默認值为admin888標准的字段說明如下:
·adminName 管理員账號
·adminPassword 管理員密碼
2.2.4 admin的詳細設計如圖2-2所示
圖2-2
3.系統管理
3.1設計說明
本設計使用的JSP引擎是Tomcat6.0,使用IDE为 MyEclipse8.0。
連接數據庫使用的建立連接橋來連接數據庫,因此在設計系統之前在本地數據源新建mytest的系統數據源,方便實驗Java連接數據庫。
3.2 頁面管理
本系統所有的JSP頁面都保存在KO目錄中。
用戶可以通過在瀏覽器的地址欄中輸入http://127.0.0.1:8080/KO/index.jsp來訪問該主頁。
3.3.3 JavaBean
本系統使用的Javabean的包名均为com.其中,BaseConn.java为鏈接數據庫的JDBC,CheckAdmin.java为檢查管理員,CheckLogin.java为檢查普通用戶
3.4後台設計
後台主要为注冊用戶的相關操作,比如增加,刪除,修改,搜索等
4.模型圖
5.會員注冊
要登錄該網站就必須要有會員名,因此如果沒有成为會員的用戶必須注冊會員。在填寫注冊信息的使用必須填寫會員名,登錄密碼。
5.1 模型(Javabean)
描述注冊信息的Javabean中要有會員的名稱、密碼、年齡、性別、郵箱、電話號碼以及一個注冊提示信息。
在CheckLogin.java對這些信息進行描述。具體代碼如下:
package com;
import java.sql.*;
public class CheckLogin {
/**
* 檢測用戶登錄信息
* @param String userName
* 用戶登錄的用戶名
* @param String userPassword
* 用戶登錄的密碼
* @return String
* 返回一個字符串:如果用戶名已經在數據庫存在並且用戶輸入的密碼也正確
返回字符串 SUCCESS_LOGIN
* 如果用戶名已經在數據庫存在但是輸入的密碼不正確
返回字符串 WRONG_PASSWROD
* 如果用戶名不存在返回字符串 NONE_USER
* */
public String checklogin(String userName,String userPassword)
throws SQLException,ClassNotFoundException
{
BaseConn conn = null;
try
{
conn = new BaseConn();
//創建一個用預處理的SQL語句
String sql = "select * from userinfo where userName=?";
//創建一個預處理SQL對象
PreparedStatement ps = conn.preparedStatement(sql);
ps.setString(1,userName);
//從數據庫中查詢該用戶名是否在數據庫存在
ResultSet rs = conn.executeQuery();
if(rs.next())
{
if(rs.getString("userPassword").equals(userPassword))
{
return "SUCCESS_LOGIN";
}
else
return "WRONG_PASSWORD";
}
else
return "NONE_USER";
}catch(SQLException ex)
{
ex.printStackTrace();
throw ex;
}catch(ClassNotFoundException ex)
{
ex.printStackTrace();
throw ex;
}
finally
{
conn.closeDB(); //關閉數據庫連接,釋放JDBC資源
}
}
/**
* 如果是新用戶時,將用戶登錄用戶名和密碼保存到數據庫中
* */
public boolean saveToDataBase(String userName,String userPassword)
throws SQLException,ClassNotFoundException
{
BaseConn conn = null;
try
{
conn = new BaseConn();
String sql = "insert into userinfo(userName,userPassword) values(?,?)";
PreparedStatement ps = conn.preparedStatement(sql);
ps.setString(1,userName);
ps.setString(2,userPassword);
conn.executeUpdate();
return true;
}catch(SQLException ex)
{
ex.printStackTrace();
throw ex;
}catch(ClassNotFoundException ex)
{
ex.printStackTrace();
throw ex;
}finally
{
conn.closeDB(); //關閉數據庫連接,釋放JDBC資源
}
}
}
5.2 視圖(JSP頁面)
本模塊有兩個視圖,register.jsp與register_post.jsp.一個提供用戶填寫注冊信息,一個提交用戶提供注冊信息,把會員填寫的基本信息寫入userinfo表。 注冊頁面的效果圖如圖5-1所示
圖 5-1
該頁面提交给了register_post.jsp
register_post.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@page import="com.CheckLogin"%>
<jsp:useBean id="check" class="com.CheckLogin"/>
<html>
<head>
<title>注冊吧^_^</title>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<style>
<body>
<% request.setCharacterEncoding("gbk");
//獲取用戶昵稱
String userName = request.getParameter("userName");
//獲取用戶密碼
String userPassword=request.getParameter("userPassword");
//將獲取到的用戶登錄信息與數據庫中保存的用戶信息進行比較
String loginMsg = check.checklogin(userName,userPassword);
if(loginMsg.equals("SUCCESS_LOGIN"))
{
out.println("該用戶已經存在,請重新選擇用戶名");
}
else if(loginMsg.equals("WRONG_PASSWORD"))
{
out.println("該用戶已經存在,請重新選擇用戶名");
}
else if(loginMsg.equals("NONE_USER"))
{
boolean sf = check.saveToDataBase(userName,userPassword);
if(sf)
{
out.println("注冊成功");
%>
<br>
<a href="login.jsp">返回登錄</a>
<%
}
}
else
{
out.println("該用戶名已經存在,請選擇另一個用戶名注冊");
}
%>
</body>
</html>
6.會員登錄
用戶在此頁面輸入自己的用戶名、密碼登錄該網站,由於本設計只設計了會員管理系統,模塊之中只有個人中心是有效模塊。會員進行個人中心能進行相關操作。
6.1 模型(Javabean)
此意注冊为同一Javabean,CheckLogin.java
6.2 視圖(JSP視圖)
本模塊有兩個個視圖:login.jsp提供给用戶填寫登錄信息,checkLogin.jsp是在驗證並提交用戶填寫的登錄信息,在主頁面提供给會員該網站的全部功能。
登錄頁面的效果圖如圖6-1所示
圖 6-1
其中,checkLogin.jsp代碼如下:
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<jsp:useBean id="check" class="com.CheckLogin"/>
<% request.setCharacterEncoding("GBK");
//獲取用戶昵稱
String userName = request.getParameter("userName");
//獲取用戶密碼
String userPassword=request.getParameter("userPassword");
//將獲取到的用戶登錄信息與數據庫中保存的用戶信息進行比較
String loginMsg = check.checklogin(userName,userPassword);
if(loginMsg.equals("SUCCESS_LOGIN")) {
session.setAttribute("user",userName);//建立session對象以便以後對登陆作驗證
response.sendRedirect("welcome.jsp");
}
else if(loginMsg.equals("WRONG_PASSWORD"))
{
out.println("你輸入的用戶名或密碼錯誤,請檢正後重新輸入");
}
else if(loginMsg.equals("NONE_USER"))
{
out.println("用戶名不存在!!!");
}
%>
<html><<head><link rel="stylesheet" type="text/css" href="styles.css"></head><body><a href=login.jsp>返回</a></body></html>
7.主頁面
設为主頁面为welcome.jsp
登陆後的顯示为圖7.1
具體代碼如下:
welcome.jsp
<%@ page language="java" contentType="text/html; charset=gbk"
pageEncoding="GB18030" import="java.sql.*,java.util.*,java.io.*"%>
<%@include file="conn.jsp"%>
<%@include file="config.jsp"%>
<%
//當用戶登入此頁時,到根目錄box目錄新建一個以此用戶名为命名的目錄
String Save_Location=getServletContext().getRealPath("/")+"box//";
try{
if (!(new java.io.File(Save_Location).isDirectory())) {//如果文件夾不存在
new java.io.File(Save_Location).mkdir(); //不存在 文件夾,則建立此文件夾
new java.io.File((Save_Location)+id+"//").mkdir(); //創建文件夾,命名为當前用戶的名字
}
else {//存在excel文件夾,則直接建立此文件夾
new java.io.File((Save_Location)+id+"//").mkdir(); //創建文件夾,命名为當前用戶的名字
}
}catch(Exception e){
e.printStackTrace(); //創建文件夾失敗
out.print("error");
return;
}
File userBox=new File((Save_Location)+id+"//");
File userBoxfile[]=userBox.listFiles();
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>歡迎使用網络硬盤</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<br />
<table width="809" height="204" border="1" align="center">
<tr>
<td height="26" align="left">
<font color="red">歡迎
<%=session.getAttribute("user")%>的到來!</font><font color="#0000ff"> </font> <a href="update.jsp?userName=<%=session.getAttribute("user")%>">修改密碼</a> <a href="logout.jsp">退出登錄</a>
<br>
</td>
</tr>
<tr>
<td height="58" align="left" valign="top"><a href="box_upload.jsp"><img src="images/box-upload.jpg" width="131" height="45"></a>
<% for(int i=0;i<userBoxfile.length;i++){%>
<tr><td height="22">
<p><font color="#FF00FF"><%=userBoxfile[i].getName()%></font></p></td><td height="25">
<span style="font-size: 9pt">
<a href="box_download.jsp?filename=<%=userBoxfile[i].getName()%>" target=_top>
<font color="#0A9EE4">下載</font></a></span></td>
<td height="25"><span style="font-size: 9pt">
<a href="box_del.jsp?action=confirm&filename=<%=userBoxfile[i].getName()%>" target=_top>
<font color="#0A9EE4">刪除</font></a></span>
</td>
</tr>
<%} %>
</td>
</tr>
<tr align="center">
<td height="26" align="center"> <font color="#c0c0c0">
版本信息:重慶理工大學軟件工程課程設計軟件二班王興龍</font></td>
</tr>
</table>
</body>
</html>
8.上傳功能
8.1上傳功能運用jspSmartUpload.jar組件,方便,靈活
上傳頁面用box_upload_do.jsp
具體代碼如下:
<%@ page contentType="text/html; charset=gbk" language="java"
import="java.util.*,com.jspsmart.upload.SmartUpload" errorPage=""%>
<%@ include file="conn.jsp"%>
<%@ include file="config.jsp"%>
<%
// 新建一個SmartUpload對象
SmartUpload su = new SmartUpload();
// 上傳初始化
su.initialize(pageContext);
// 設定上傳限制
// 1.限制每個上傳文件的最大長度。
su.setMaxFileSize(5000000);
// 2.限制總上傳數據的長度。
su.setTotalMaxFileSize(150000000);
// 3.設定允許上傳的文件(通過擴展名限制)。
su.setAllowedFilesList("rar,zip,txt.mp3,jpg,gif,ppt,doc,xls,bmp,wav,mid,dat,ppt");
// 4.設定禁止上傳的文件(通過擴展名限制),禁止上傳帶有exe,bat,jsp,htm,html擴展名的文件和沒有擴展名的文件。
// su.setDeniedFilesList("exe,bat,jsp,htm,html,asp,php,com");
// 上傳文件
su.upload();
// 將上傳文件全部保存到指定目錄
String cqutroot = dirPath.replace('\\', '/');
su.save(cqutroot + "box/" + id);
out.print("<script>");
out.print("alert('文件上傳成功!');");
out.print("location.href='welcome.jsp';");
out.print("</script>");
%>
上傳頁面为upload.jsp效果为圖8.1
圖8.1
該頁面为POST方式,提交到了box_upload_do.jsp,代碼如下:
<%@ page contentType="text/html; charset=gbk" language="java"
import="java.util.*,com.jspsmart.upload.SmartUpload" errorPage=""%>
<%@ include file="conn.jsp"%>
<%@ include file="config.jsp"%>
<%
// 新建一個SmartUpload對象
SmartUpload su = new SmartUpload();
// 上傳初始化
su.initialize(pageContext);
// 設定上傳限制
// 1.限制每個上傳文件的最大長度。
su.setMaxFileSize(5000000);
// 2.限制總上傳數據的長度。
su.setTotalMaxFileSize(150000000);
// 3.設定允許上傳的文件(通過擴展名限制)。
su.setAllowedFilesList("rar,zip");
// 4.設定禁止上傳的文件(通過擴展名限制),禁止上傳帶有exe,bat,jsp,htm,html擴展名的文件和沒有擴展名的文件。
su.setDeniedFilesList("exe,bat,jsp,htm,html,asp,php,com");
// 上傳文件
su.upload();
// 將上傳文件全部保存到指定目錄
String cqutroot = dirPath.replace('\\', '/');
su.save(cqutroot + "box/" + id);
out.print("<script>");
out.print("alert('文件上傳成功!');");
out.print("location.href='welcome.jsp';");
out.print("</script>");
%>
9.下載文件
9.1 jspSmartUpload.jar下載對中文支持不是很好,所以我用I/O
box_download.jsp,具體代碼如下:
<%@ page language="java" contentType="text/html; charset=gbk" import="com.jspsmart.upload.*,java.sql.*,java.io.*" %>
<%@ include file="config.jsp"%>
<%@ include file="conn.jsp"%>
<%
java.io.BufferedInputStream bis=null;
java.io.BufferedOutputStream bos=null;
try{
String filename=request.getParameter("filename");
filename=new String(filename.getBytes("iso8859-1"),"gb2312");
response.setContentType("application/x-msdownload");
response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("gb2312"),"iso8859-1"));
bis =new java.io.BufferedInputStream(new java.io.FileInputStream(config.getServletContext().getRealPath("box/"+id+"/" + filename)));
bos=new java.io.BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
int bytesRead;
while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff,0,bytesRead);
}
}
catch(Exception e){
e.printStackTrace();
}
finally {
if (bis != null)bis.close();
if (bos != null)bos.close();
}
%>
10.刪除文件
用戶上傳錯誤時需刪除文件。
box_del.jsp,具體代碼如下
<%@ page language="java" contentType="text/html; charset=gbk"
pageEncoding="GB18030" import="java.sql.*,java.util.*,java.io.*"%>
<%@ include file="config.jsp"%>
<%@ include file="conn.jsp"%>
<%
String cqutroot=dirPath.replace('\\','/');//將dirPath的"\\"全替換为"/"
try {
//處理成中文字符
String filename=codeToString(request.getParameter("filename"));
String action=codeToString(request.getParameter("action"));
if(filename==null)
{
out.print("<script>");
out.print("alert('filename錯誤!');");
out.print("location.href='welcome.jsp';");
out.print("</script>");
}
if(action==null)
{
out.print("<script>");
out.print("alert('action錯誤!');");
out.print("location.href='box.jsp';");
out.print("</script>");
}
action=request.getParameter("action");
if(action.equals("del"))
{
File delfile=new File(cqutroot+"box/"+id+"/"+filename);
delfile.delete();
out.print("<script>");
out.print("alert('刪除成功!');");
out.print("location.href='welcome.jsp';");
out.print("</script>");
}
if(action.equals("confirm"))
{
%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>確認刪除文件?</title>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<table width="646" height="345" border="1" align="center">
<tr>
<td><p align="center"><font color="#ff0000"><strong>確認刪除<%=filename%>?</strong></font></p></td>
</tr>
<tr>
<td><div align="center">
<input type="button" value="提交" name="B1" onClick="javascript:location.href='box_del.jsp?action=del&filename=<%=filename%>';">
<input type="button" value="返回" name="B2" onClick="javascript:location.href='welcome.jsp';">
</div></td>
</tr>
</table>
</body>
</html>
<%
}
else
{
out.print("<script>");
out.print("location.href='welcome.jsp';");
out.print("</script>");
}
}
catch(Exception e)
{
out.print("<script>");
out.print("location.href='welcome.jsp';");
out.print("</script>");
}
%>
11.後台系統
後台我做了這幾個頁面:管理員登陆:admin_login.jsp;檢查管理員是否正確:admin_check.jsp;後台首頁:admin.jsp;用戶刪除:user_del.jsp;用戶密碼修改:user_edit.jsp;修改保存:user_save.jsp.搜索功能:search.jsp
12.驗證是否已經真正登陆
为了防止不通過驗證就登陆到操作界面,做出驗證頁面,主要是檢查session是否存在。
其中,conn.jsp是普通用戶,admin_conn.jsp是管理員的。具體代碼如下:
Conn.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%
String id = (String)session.getAttribute("user");
if (null==id || id.equals("")) {
out.print("<script language='javascript'>alert('請先登錄系統!');window.location = 'login.jsp';</script>");
}
%>
admin_conn.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%
String admin_id = (String)session.getAttribute("admin");
if (null==admin_id || admin_id.equals("")) {
out.print("<script language='javascript'>alert('請先登錄系統!');window.location = 'admin_login.jsp';</script>");
}
%>
13.輔助頁面
獲取程序文件夾的絕對路徑功能和中文字符串的轉換是好多頁面都共有的,存在一個頁面調用起來比較方便,代碼如下
Config.jsp
<%@ page language="java" contentType="text/html; charset=gbk"%>
<%
//獲取程序文件夾的絕對路徑
String dirPath=application.getRealPath(request.getRequestURI());
dirPath=dirPath.substring(0,dirPath.lastIndexOf('\\')+1);
dirPath=dirPath.substring(0,dirPath.lastIndexOf('\\'));
dirPath=dirPath.substring(0,dirPath.lastIndexOf('\\')+1);
%>
<%!
//定義處理中文字符串的函數
public String codeToString(String str01) throws Exception
{//處理中文字符串的函數
String s=str01;
if(true)
{
try
{
byte tempB[]=s.getBytes("ISO-8859-1");
s=new String(tempB);
}
catch(Exception e)
{
s=str01;
}
}
return s;
}
%>
14.退出系統
會員在網站中可以選擇退出系統,logon.jsp負責銷毀用戶的session對象,導致登錄失效,用戶能夠隨時退出系統。
logon.jsp的代碼如下:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
session.invalidate();
response.sendRedirect("login.jsp");
%>
15.設計總結
通過本次設計,基本掌握了WEB設計的頁面設計,首次接觸學習並使用JSP,JAVABEAN以及文件的上傳下載,數據的連接等知識,對以後的深入學習打下了基礎。就這個設計而言,由於時間以及個人能力的限制,在網站編寫的過程中有很多的不足。許多老師要求的功能都沒有達到,比如文件的搜索與共享等,只是能初步實現功能。在這方面應該加強學習,爭取取得好的成績。最後謝謝老師给我們這次的課程設計鍛煉的機會。
参考文獻:
[1]王柯柯,Web網頁設計技術,機械工業出版社,2011;
[2]馬建紅,李占波,JSP應用與開發技術,2011;
[3]常建功,Java Web典型模塊與項目實戰大全,2010;
[4]史曉紅,章立, Dreamweaver CS4網頁設計與實訓教程,2010
From:CSDN
留言列表