java:struts框架(网路静态U盘项目)
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盘项目)的更多相关文章
- 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 ...
- Java日志框架那些事儿
文章首发于[博客园-陈树义],点击跳转到原文Java日志框架那些事儿. 在项目开发过程中,我们可以通过 debug 查找问题.而在线上环境我们查找问题只能通过打印日志的方式查找问题.因此对于一个项目而 ...
- javaWeb项目(SSH框架+AJAX+百度地图API+Oracle数据库+MyEclipse+Tomcat)之一 基础Struts框架搭建篇
即将开始着手写这个项目,所以希望通过这篇博客来记录自己学习的过程 今天开学第一天,就上了软件工程实践课,自己也开始着手做这个大作业了.首先我的项目名称叫做智能班车管理系统. 项目的概况: 该软件产品是 ...
- java三大框架——Struts + Hibernate + Spring
Struts主要负责表示层的显示 Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作) Hibernate主要是数据持久化到数据库 再用jsp的servlet做网页开发的时候有个 w ...
- Java后端框架之Spring Boot详解,文末有Java分布式实战项目视频可取
在 Java 后端框架繁荣的今天,Spring 框架无疑是最最火热,也是必不可少的开源框架,更是稳坐 Java 后端框架的龙头老大. 用过 Spring 框架的都知道 Spring 能流行是因为它的两 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:3、客户端:其它编程语言项目集成:Java集成应用中心。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...
- Struts框架——(三)动态ActionForm
一.DynaActionForm的引入意义 使用ActionForm把表单数据单独封装起来,而且提供了自动的数据验证,简化了代码的编写,给我们带来了极大的方便. 但是,ActionForm也存在一些明 ...
- 读《架构探险——从零开始写Java Web框架》
内容提要 <架构探险--从零开始写Java Web框架>首先从一个简单的 Web 应用开始,让读者学会如何使用 IDEA.Maven.Git 等开发工具搭建 Java Web 应用:接着通 ...
- [转]JAVA三大框架SSH和MVC
Java—SSH(MVC) JAVA三大框架的各自作用 hibernate是底层基于jdbc的orm(对象关系映射)持久化框架,即:表与类的映射,字段与属性的映射,记录与对象的映射 数据库模型 也就 ...
随机推荐
- 11jsp
1.JSP 1. 指令 作用:用于配置JSP页面,导入资源文件 格式: <%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %> 分类: ...
- 清除zencart分类页多页后面的&disp_order &sort字符串的方法
在includes\classes\split_page_results.php页面中的function display_links()函数第一行添加如下两行代码即可$parameters=preg_ ...
- Atcoder Regular 099 暴力区间扩张 n/dig(n)极值打表 团分割背包
C 直接把第一次加在哪里for一遍即可 /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) u ...
- 第三次java测验2
package java3; public class Suiji { public long a=12345L;//定义long类型的a,b,c变量 public long c=12345L; pu ...
- volatile关键字解决线程间内存共享变量同步的问题,让变量可以立即同步。
- python 安装第三方包
python环境是Anaconda3安装的,由于项目需要用到git的第三方包,但是在conda自带的环境中没有. 例如使用jieba分词库. 安装的三种方式: (1)全自动安装:`easy_insta ...
- js 设置多条css样式
如果在一个网页中给id="mydiv"的元素添加css样式,先获取该节点:var obj = document.getElementById("mydiv"); ...
- 2019春Python程序设计测试(20190604--20190604)
1-1 在Python 3.x中可以使用中文作为变量名. (2分) T F 1-2 Python变量使用前必须先声明,并且一旦声明就不能再当前作用域内改变其类型.(2分) T ...
- python-加密算法
#!/usr/bin/python3 # coding:utf-8 # Auther:AlphaPanda # Description: 使用hashlib模块的md5和sha系列加密算法对字符串进行 ...
- [大数据] hadoop全分布式安装
一.准备工作 在伪分布式的搭建基础上修改配置,搭建全分布式hadoop环境,伪分布式安装参照 hadoop伪分布式安装. 首先准备4台虚拟机,信息如下: 192.168.1.11 namenode1 ...