javaweb 上传文件,javaweb文件的上传和下载

  javaweb 上传文件,javaweb文件的上传和下载

  

目录

JavaWeb文件上传作为一个简单的用户管理系统,先上传效果数据表,准备Jar文件,准备项目结构。

 

  00-1010在本文中,我们学习了JavaWeb中最重要的技术之一,文件上传。我将使用一个小的用户管理系统来实现这个案例,并逐步引入。内容通俗易懂。言归正传!

  

JavaWeb文件上传

功能如下

 

  用户注册,参数包括用户名,用户名密码,用户头像,

  用户登录,登录成功后跳转到首页显示用户头像和姓名,支持账号注销。账户注销后,页面跳转到登录页面。

  技术栈:后端采用JavaWeb,MySQL5.7,Druid连接池,前端结合bootstrap.采用jsp框架

  

做一个简单的用户管理系统

完整操作项目演示:

 

  包含:用户注册,用户登录,用户登录后会显示用户信息,即头像和帐户名,右侧会显示注销。点击注销跳转到登录页面。

  项目结构Java源码

  前端页面jsp

  

先上效果

t_user_info

 

  CREATE TABLE ` t _ user _ info `(` noid ` int(11)NOT NULL AUTO _ INCREMENT,` username ` varchar(32)COLLATE utf8mb 4 _ unicode _ ci NOT NULL,` head _ portrait _ path ` varchar(64)COLLATE utf8mb 4 _ unicode _ ci NOT NULL,PRIMARY KEY(` noid `))ENGINE=InnoDB AUTO _ INCREMENT=5 DEFAULT CHARSET=utf8mb 4 COLLATE=utf8mb 4 _ unicode _ ci

  

数据表准备

项目所需jar包如下:

 

  Jar文件放在WEB-INF/lib文件夹中,主要是为了安全。

  文件上传需要的jar包:

  Jar文件我会同步资源,朋友们不用担心~

  

Jar文件准备

本项目采用三层架构实现,即:service层、dao层、servlet层

 

  因为在servlet层:,之前在servlet层类中添加、删除和检查了太多的类,导致代码冗余,所以当在jsp页面中发送请求时,它是以模块化的方式被访问的,例如:

  3358 localhost/blog/http://www . Sina.com//adduser访问adduser 3358 localhost/blog/http://www . Sina.com//user模块的GetUserList访问get userlist 3358 localhost/blog/http://www . Sina.com//user模块的adddept和user.user/GetDeplist的adddept 3358 localhost/blog/访问dept,的GetDeplist对应的类,解决该类的所有数据库添加、删除和查询操作,提高了可维护性提取公共父类:dept

  ss="brush:java;">public class BaseServlet extends HttpServlet{@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.获取浏览器请求的资源String uri = req.getRequestURI();//2.获取请求的方法名,最后斜线后面的内容String methodName = uri.substring(uri.lastIndexOf("/")+1);try {//3.根据方法名获取方法,通过反射获取Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);//4.调用方法method.invoke(this, req, resp);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}dao层dao层抽取出公共数据库连接类,BaseDao,基于db.properties配置文件连接本地数据库

  db.properties配置文件:

  

driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://127.0.0.1/db_blog?useSSL=trueusername=rootpassword=111111

BaseDao核心代码

 

  

public class BaseDao {//采用单例模式实现,防止数据库连接超时private static DataSource ds = null;public QueryRunner initQueryRunner() throws Exception {if (ds == null) {String dbFile = this.getClass().getClassLoader().getResource("/").getFile();dbFile = dbFile.substring(1) + "db.properties";FileReader fr = new FileReader(dbFile);Properties pro = new Properties();pro.load(fr);ds = DruidDataSourceFactory.createDataSource(pro);}QueryRunner qur = new QueryRunner(ds);return qur;}}

Userservlet核心代码

 

  

@WebServlet("/user/*")public class UserServlet extends BaseServlet{//业务层类,用于调用业务层方法UserService userService = new UserServiceImpl();/*** 注册用户* @param req* @param resp*/public void register(HttpServletRequest req, HttpServletResponse resp) {//获取数据DiskFileItemFactory factory = new DiskFileItemFactory();ServletFileUpload fileUpload = new ServletFileUpload(factory);try {List<FileItem> fileItemList = fileUpload.parseRequest(req);//获取当前项目的路径String classesPath = this.getClass().getResource("/").getPath();File f1 = new File(classesPath);//项目路径String projectPath = f1.getParentFile().getParentFile().getParentFile().getAbsolutePath();//最后上传的路径String uploadPath = projectPath + "\ROOT\upload\";File f2 = new File(uploadPath);if (!f2.exists()) {f2.mkdirs();}//存入数据库的路径String headPortraitPath = "";for (FileItem fileItem : fileItemList) {if (!fileItem.isFormField()) {//是文件域String fileName = fileItem.getName();//获取原来文件的后缀String suffix = fileName.substring(fileName.lastIndexOf("."));//生成新的文件名,为防止重复,采用随机数String destFileName = UUID.randomUUID().toString().replace("-", "");//存入数据库的路径拼接完毕,例如格式:随机文件名.txtheadPortraitPath = destFileName + suffix;//写入硬盘的路径uploadPath += headPortraitPath;//获取输入流InputStream is = fileItem.getInputStream();//输出流FileOutputStream fos = new FileOutputStream(uploadPath);//将上传的文件写入指定路径try {byte[] buf = new byte[10240];while (true) {int realLen = is.read(buf, 0, buf.length);if (realLen < 0) {break;}fos.write(buf, 0, realLen);}} finally {if (fos != null)fos.close();if (is != null)is.close();}} else {//不是文件域,是普通控件//获取输入框的名称String fieldName = fileItem.getFieldName();//获取输入框中的值String fieldVal = fileItem.getString("utf-8");//加入请求域中req.setAttribute(fieldName, fieldVal);}}String username = (String) req.getAttribute("username");String password = (String) req.getAttribute("password");//验证参数是否合法,不为空boolean flag = userService.exam(username, password);if (flag) {//将数据存入数据库User user = new User();user.setUsername(username);user.setPassword(password);user.setHead_portrait_path(headPortraitPath);if (userService.save(user)) {resp.sendRedirect(req.getContextPath()+"/login.jsp");}} else {resp.sendRedirect(req.getContextPath()+"/register.jsp");}} catch (Exception e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}/*** 用户登录* @param req* @param resp*/public void login(HttpServletRequest req, HttpServletResponse resp) {//获取数据String username = req.getParameter("username");String password = req.getParameter("password");//验证是否存在该用户User user = new User();try {if (userService.exam(username, password)) {user.setUsername(username);user.setPassword(password);user = userService.getByUser(user);if (user.getHead_portrait_path() != null) {HttpSession s1 = req.getSession();s1.setAttribute("user", user);resp.sendRedirect(req.getContextPath()+"/index.jsp");} else {resp.sendRedirect(req.getContextPath()+"/login.jsp");}} else {resp.sendRedirect(req.getContextPath()+"/login.jsp");}} catch(Exception e) {e.printStackTrace();}}}

到此这篇关于JavaWeb文件上传流程的文章就介绍到这了,更多相关JavaWeb文件上传内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: