1.网络静态U盘项目:

   struts.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.multipart.maxSize" value="209715200"></constant>
<package name="udisk" extends="struts-default">
<global-results>
<result name="error">/error.jsp</result>
</global-results> <!-- 配置struts2的异常映射 -->
<global-exception-mappings>
<exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings> <action name="user-*" class="cn.zzsxt.udisk.action.UserinfoAction" method="{1}">
<result type="redirect">/login.jsp</result>
<result name="login" type="redirect">/login.jsp</result>
<result name="list" type="redirectAction">file-list</result>
</action>
<action name="file-*" class="cn.zzsxt.udisk.action.FileinfoAction" method="{1}">
<result name="list">/list.jsp</result>
<result name="success" type="redirectAction">file-list</result>
<!-- 下载 -->
<result type="stream" name="download">
<!-- inputName="输入流的名称",回掉action中getInputStream()方法获取输入流 -->
<param name="inputName">inputStream</param>
<!--contentType="文件类型" application/octet-stream代表对下载类型不限制 -->
<param name="contentType">application/octet-stream</param>
<!-- attachment:以附件方式保存 filename="保存的文件名称" ${fileName}获取action中fileName属性的值 -->
<param name="contentDisposition">attachment;filename=${fileName}</param>
</result>
</action>
</package>
</struts>

  FileinfoAction:

package cn.zzsxt.udisk.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;
import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.SessionAware; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; import cn.zzsxt.udisk.model.Fileinfo;
import cn.zzsxt.udisk.model.Userinfo;
import cn.zzsxt.udisk.service.IFileinfoService;
import cn.zzsxt.udisk.service.impl.FileinfoServiceImpl; public class FileinfoAction extends ActionSupport implements SessionAware,ServletRequestAware{
private IFileinfoService fileinfoService =new FileinfoServiceImpl();
private Map<String,Object> session;
private HttpServletRequest request;
private File[] upload;//接收上传的文件信息
private String[] uploadFileName;//接收上传文件的名称
private int fileId;
private String fileCode;//提取码
private String fileName;//文件名称
//结合stream结果视图完成下载功能
private InputStream inputStream; public File[] getUpload() {
return upload;
}
public void setUpload(File[] upload) {
this.upload = upload;
}
public String[] getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String[] uploadFileName) {
this.uploadFileName = uploadFileName;
} public int getFileId() {
return fileId;
}
public void setFileId(int fileId) {
this.fileId = fileId;
} public String getFileCode() {
return fileCode;
}
public void setFileCode(String fileCode) {
this.fileCode = fileCode;
} public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
} public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
/**
* 查询用户的文件列表
* @return
* @throws Exception
*/
public String list() throws Exception {
//从session中获取用户信息
Userinfo user = (Userinfo)session.get("loginUser");
if(user!=null){
int userId = user.getUserId();
List<Fileinfo> list = fileinfoService.findFileinfoByUserId(userId);
request.setAttribute("list", list);
}
return "list";
}
/**
* 文件的上传
* @return
*/
public String upload() throws Exception{
//获取登陆用户信息
Userinfo user = (Userinfo)session.get("loginUser");
String path = request.getServletContext().getRealPath("/");
Fileinfo[] files = new Fileinfo[upload.length];
for(int i=0;i<files.length;i++){
Fileinfo file = new Fileinfo();
file.setFileName(uploadFileName[i]);//设置文件名称
file.setFileSize(upload[i].length());//设置文件大小
file.setFilePath(path+"upload\\"+user.getUserName()+"\\"+uploadFileName[i]);
file.setUserId(user.getUserId()); //file.setUserinfo(user);
files[i]=file;
}
int count = fileinfoService.uploadFile(files, user, path, upload);
if(count>0){
return this.SUCCESS;
}
return this.ERROR;
} /**
* 删除文件
* @return
* @throws Exception
*/
public String delete() throws Exception{
int count = fileinfoService.removeFile(fileId);
if(count>0){
return this.SUCCESS;
}
return this.ERROR;
} /**
* 下载
* @return
* @throws Exception
*/
public String download() throws Exception{
//根据提取码获取文件信息
Fileinfo downloadFileinfo = fileinfoService.findFileinfoByFileCode(fileCode);
//获取文件保存的真实路径
String filePath = downloadFileinfo.getFilePath();
inputStream = new FileInputStream(filePath);
//解决下载时中文名称乱问问题
fileName = new String(downloadFileinfo.getFileName().getBytes("UTF-8"),"iso-8859-1");
return "download";
} @Override
public void setSession(Map<String, Object> arg0) {
this.session=arg0;
} @Override
public void setServletRequest(HttpServletRequest arg0) {
this.request=arg0;
}
}

  

  UserinfoAction:

package cn.zzsxt.udisk.action;

import java.util.Map;

import javax.servlet.ServletContext;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.SessionAware; import com.opensymphony.xwork2.ActionSupport; import cn.zzsxt.udisk.model.Userinfo;
import cn.zzsxt.udisk.service.IUserinfoService;
import cn.zzsxt.udisk.service.impl.UserinfoServiceImpl; public class UserinfoAction extends ActionSupport implements SessionAware{
private Userinfo user;
private IUserinfoService uesrinfoService = new UserinfoServiceImpl();
private Map<String,Object> session;
public Userinfo getUser() {
return user;
} public void setUser(Userinfo user) {
this.user = user;
}
/**
* 注册
* @return
* @throws Exception
*/
public String doRegister() throws Exception {
//获取服务器的upload目录
ServletContext servletContext = ServletActionContext.getServletContext();
String path = servletContext.getRealPath("/upload");
int count = uesrinfoService.doRegister(user,path);
if(count>0){
return this.SUCCESS;
}
return this.ERROR;
} public String doLogin() throws Exception {
Userinfo loginUser = uesrinfoService.doLogin(user);
if(loginUser!=null){
//将用户信息保持到session中
session.put("loginUser", loginUser);
return "list";
}
return this.LOGIN;
} @Override
public void setSession(Map<String, Object> arg0) {
this.session=arg0;
}
}

  

  FileinfoServiceImpl:

package cn.zzsxt.udisk.service.impl;

import java.io.File;
import java.util.List; import org.apache.commons.io.FileUtils; import cn.zzsxt.udisk.commons.MD5Utils;
import cn.zzsxt.udisk.dao.IFileinfoDao;
import cn.zzsxt.udisk.dao.impl.FileinfoDaoImpl;
import cn.zzsxt.udisk.model.Fileinfo;
import cn.zzsxt.udisk.model.Userinfo;
import cn.zzsxt.udisk.service.IFileinfoService; public class FileinfoServiceImpl implements IFileinfoService {
private IFileinfoDao fileinfoDao = new FileinfoDaoImpl();
@Override
public List<Fileinfo> findFileinfoByUserId(int userId) {
return fileinfoDao.findFileinfoByUserId(userId);
}
/**
* 上传文件
* 1.将文件上传到服务器端
* 2.将文件信息添加到数据库中
*/
@Override
public int uploadFile(Fileinfo[] file, Userinfo user,String path,File[] upload) throws Exception{
//将文件信息上次到服务器端
long totalSize=0,freeSize=32*1024*1024,usedSize=0; //此处freeSize初始化设置值,因为第一次进来listFiles()方法一直返回为空,fressSize一直为0,
//普通用户空间总大小为32M,VIP用户空间总大小128M      最下面判断剩余空间和文件大小,就一直抛异常。 并且要给listFiles()方法后面的循环遍历加一个
if(user.getUserType()==1){//普通用户            判断是否为空,如果为空执行的话会错误。 服务器每关闭一次,所有数据清空一次,所以没有那个路径,
totalSize = 32*1024*1024;//总字节数           导致第一次进来listFiles()返回为空
}else if(user.getUserType()==2){//VIP用户
totalSize = 128*1024*1024;
}
String userDirStr = path+"upload\\"+user.getUserName();
File userDir = new File(userDirStr);//用户上传文件的文件夹
File[] fs = userDir.listFiles();//获取该目录下的所有文件
//统计该用户已用空间大小
     if(fs!=null){
   for (File f : fs) {
   usedSize+=f.length();
   }
   freeSize = totalSize-usedSize;//计算剩余空间大小
    }
//统计上传文件的总大小
long uploadTotalSize=0;
for(File uploadFile:upload){
long length = uploadFile.length();//上传单文件的大小
if(user.getUserType()==1&&length>1*1024*1024){//普通用户
throw new Exception("普通用户单文大小不能超过1M!");
}
if(user.getUserType()==2&&length>2*1024*1024){
throw new Exception("VIP用户单文大小不能超过2M!");
}
uploadTotalSize+=length;
}
//上传文件大于剩余空间,抛出异常
if(uploadTotalSize>freeSize){
throw new Exception("剩余空间不足!");
}
int count=0;
//上传文件
for(int i=0;i<upload.length;i++){
File uploadFile = upload[i];
Fileinfo f = file[i];
//将文件上传到服务器端
FileUtils.copyFile(uploadFile, new File(userDir,f.getFileName()));
//将文件信息添加到数据库中
//对真实路径进行加密
String fileCode = MD5Utils.createMD5(f.getFilePath());
f.setFileCode(fileCode);
count = fileinfoDao.addFileinfo(file[i]);
}
return count;
}
/**
* 移除文件:
* 1.从服务器端用户上传目录下移除文件
* 2.从数据库中删除文件信息
*/
@Override
public int removeFile(int fileId) {
//根据文件编号查询文件详情信息
Fileinfo fileinfo = fileinfoDao.findFileinfoById(fileId);
String filePath = fileinfo.getFilePath();//获取文件保存的真实路径
File file = new File(filePath);
if(file.exists()){
file.delete();//删除文件
}
//从数据库中删除文件信息
return fileinfoDao.deleteFileinfo(fileId);
}
@Override
public Fileinfo findFileinfoByFileCode(String fileCode) {
return fileinfoDao.findFileinfoByFileCode(fileCode);
} }

  

   UserinfoServiceImpl:

package cn.zzsxt.udisk.service.impl;

import java.io.File;

import cn.zzsxt.udisk.commons.MD5Utils;
import cn.zzsxt.udisk.dao.IUserinfoDao;
import cn.zzsxt.udisk.dao.impl.UserinfoDaoImpl;
import cn.zzsxt.udisk.model.Userinfo;
import cn.zzsxt.udisk.service.IUserinfoService; public class UserinfoServiceImpl implements IUserinfoService {
private IUserinfoDao userinfoDao = new UserinfoDaoImpl();
/**
* 注册需要对密码进行MD5密码
*/
@Override
public int doRegister(Userinfo user,String path) {
String oldPass = user.getUserPass();
//对用户输入的密码进行加密
String newPass = MD5Utils.createMD5(oldPass);
user.setUserPass(newPass);
//在服务器端创建一个与用户名相同的文件夹,用于保存该用户上次的文件
File uploadDir = new File(path+"/"+user.getUserName());
if(!uploadDir.exists())
uploadDir.mkdirs();
return userinfoDao.addUser(user);
} /**
* 登陆
*/
@Override
public Userinfo doLogin(Userinfo user) {
//对用户输入的密码进行加密
String oldPass = user.getUserPass();
//对用户输入的密码进行加密
String newPass = MD5Utils.createMD5(oldPass);
user.setUserPass(newPass);
return userinfoDao.doLogin(user);
} }

  

  

  

java:struts框架(网路静态U盘项目)的更多相关文章

  1. Java - Struts框架教程 Hibernate框架教程 Spring框架入门教程(新版) sping mvc spring boot spring cloud Mybatis

    https://www.zhihu.com/question/21142149 http://how2j.cn/k/hibernate/hibernate-tutorial/31.html?tid=6 ...

  2. Java日志框架那些事儿

    文章首发于[博客园-陈树义],点击跳转到原文Java日志框架那些事儿. 在项目开发过程中,我们可以通过 debug 查找问题.而在线上环境我们查找问题只能通过打印日志的方式查找问题.因此对于一个项目而 ...

  3. javaWeb项目(SSH框架+AJAX+百度地图API+Oracle数据库+MyEclipse+Tomcat)之一 基础Struts框架搭建篇

    即将开始着手写这个项目,所以希望通过这篇博客来记录自己学习的过程 今天开学第一天,就上了软件工程实践课,自己也开始着手做这个大作业了.首先我的项目名称叫做智能班车管理系统. 项目的概况: 该软件产品是 ...

  4. java三大框架——Struts + Hibernate + Spring

    Struts主要负责表示层的显示 Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作) Hibernate主要是数据持久化到数据库 再用jsp的servlet做网页开发的时候有个 w ...

  5. Java后端框架之Spring Boot详解,文末有Java分布式实战项目视频可取

    在 Java 后端框架繁荣的今天,Spring 框架无疑是最最火热,也是必不可少的开源框架,更是稳坐 Java 后端框架的龙头老大. 用过 Spring 框架的都知道 Spring 能流行是因为它的两 ...

  6. Taurus.MVC 微服务框架 入门开发教程:项目集成:3、客户端:其它编程语言项目集成:Java集成应用中心。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...

  7. Struts框架——(三)动态ActionForm

    一.DynaActionForm的引入意义 使用ActionForm把表单数据单独封装起来,而且提供了自动的数据验证,简化了代码的编写,给我们带来了极大的方便. 但是,ActionForm也存在一些明 ...

  8. 读《架构探险——从零开始写Java Web框架》

    内容提要 <架构探险--从零开始写Java Web框架>首先从一个简单的 Web 应用开始,让读者学会如何使用 IDEA.Maven.Git 等开发工具搭建 Java Web 应用:接着通 ...

  9. [转]JAVA三大框架SSH和MVC

    Java—SSH(MVC) JAVA三大框架的各自作用  hibernate是底层基于jdbc的orm(对象关系映射)持久化框架,即:表与类的映射,字段与属性的映射,记录与对象的映射 数据库模型 也就 ...

随机推荐

  1. Java中如何判断两个对象是否相等(Java equals and ==)

    原文https://www.dutycode.com/post-140.html 如何判断两个对象相等,这个问题实际上可以看做是如何对equals方法和hashcode方法的理解. 从以下几个点来理解 ...

  2. 前端面试题-CSS Hack

    一.CSS Hack的概念 由于不同厂商的流览器或某浏览器的不同版本(如IE,Firefox/Safari/Opera/Chrome等),对CSS的支持.解析不一样,导致在不同浏览器的环境中呈现出不一 ...

  3. windows笔记本命令行方式建立wifi热点

    建立热点: @echo off netsh wlan set hostednetwork mode=allow netsh wlan set hostednetwork ssid=热点名 key=密码 ...

  4. python_自动化测试用例参数化

    参数化有三种,代码驱动,数据驱动,关键字驱动 代码驱动,测试数据写在代码中 如下: import requests,json import unittest import BeautifulRepor ...

  5. 在HTML中引入CSS的方式

    有 4 种方式可以在 HTML 中引入 CSS.其中有 2 种方式是在 HTML 文件中直接添加 CSS 代码,另外两种是引入 外部 CSS 文件.   ㈠内联方式 内联方式指的是直接在 HTML 标 ...

  6. jquery attribute$=value选择器 语法

    jquery attribute$=value选择器 语法 作用:[attribute$=value] 选择器选取每个带有指定属性且以指定字符串结尾的元素. 语法:$("[attribute ...

  7. 字符串之format整理

    format 用法 本文根据官方文档及自己理解整理,只整理出自己可以理解的部分,h因个人水平有限,难免有所错误和纰漏,欢迎批评指正. 格式{ [field_name] ["!" c ...

  8. codevs 5929 亲戚x

                         题目描述 Description 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. ...

  9. ant design 的表格默认选中

    在使用 ant design 的表格时候使用默认选中项, 需要配置的 Table 的 rowSelection const rowSelection = { type: 'checkbox', get ...

  10. node.js实现web解析dns

    var http = require('http'), //服务器创建 dns = require('dns'), //DNS查询,主要负责解析当前DNS域名,返回DNS服务器IP地址 fs = re ...