到现在才真正体会到一个人做项目的感受,我说的不是一个人做着玩的。在一个公司里给他们做项目管理软件(他们的项目不是软件项目哦)。
我一个人充当了好多人的角色,我也不认为到现在为止我的水平有多高,但是我现在确实是充当软件架构师的角色。项目到现在做了有两个多月了,在这个过程中出现了不少系统框架上的问题还有数据库设计的不完善造成的一系列问题。从一开始就没有做完整的需求分析,因为那个时候他们也不是很清楚要做一个什么样的东西出来,需求都很模糊。只是一个大概的构想,我但是就想了要把他们这种构想转化为需求的话也就等于是空想。所以只能是走一步说一步。需求是一步一步在变,我好像也是一步一步在改,改东西是最烦人的事情。
不写了,下班,明天继续。
接着昨天的写,昏昏沉沉的有敲了一天的代码
前些天做了有关 文件上传 的一些东西,现在把它贴出来
用的是Apache的Commons FileUpload组建
首先是要把需要的jar包放到WEB-INF的lib目录下,需要的jar包全部在附件里,没有的可以去下载
jsp文件:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'upload.jsp' starting page</title> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <form action="UploadServlet" method="post" enctype="multipart/form-data"> <table border="1" align="center"> <caption> 请选择要上传的文件 </caption> <tr> <td> 上传人 </td> <td> <input type="text" name="name"> </td> </tr> <tr> <td> 上传文件 </td> <td> <input type="file" name="file1name"> <input type="file" name="file1name"> </td> </tr> <tr> <td> <input type="submit" name="submit" value="上传" > </td> <td> <input type="reset" name="rest" value="重置"> </td> </tr> </table> </form> </body> </html>
UploadServlet.java
package com.xiang; import java.io.IOException; import java.io.*; import java.util.*; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class UploadServlet extends HttpServlet { private ServletContext app; private String savePath; public void init(ServletConfig conf) { savePath = conf.getInitParameter("savePath"); app = conf.getServletContext();// 获取servlet上下文,init方法只执行一次; } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=GBK"); PrintWriter out = response.getWriter(); request.setCharacterEncoding("GBK"); DiskFileItemFactory dif = new DiskFileItemFactory(); ServletFileUpload load = new ServletFileUpload(dif); try { //工程必须得有commons-io-1.4.jar,不然这个位置会报错 List items = load.parseRequest(request);// 解析reqeust,包括所传过来的参数,文件等等吧,总之请求过来的所有东西都在这里放着呢 Iterator it = items.iterator();// 既然items里包含了很多东西,那么我们需要取出每一个看看都是什么东西,主要区分input类型是text还是file while (it.hasNext()) { FileItem item = (FileItem) it.next();// 取出items里每一个元素,item即可是普通的文本信息,又可以是所上传的文件 if (item.isFormField()) {// 如果此方法返回真,说明就是普通的文本信息,相反就是文件啦 // 如果是普通文本信息,简单处理, 输出信息 System.out.println("表单参数的名字" + item.getFieldName() + "<br/>" + "表单参数的值" + item.getString("GBK")); } else { // 上传文件 // 判断用户是否选择的上传文件 if (item.getName() != null && !item.getName().equals("")) { System.out.println("上传文件的大小" + item.getSize()); System.out.println("上传文件的类型" + item.getContentType()); System.out.println("上传文件的名称" + item.getName());// 此处获得的名字,是客户端所选择的文件的路径和文件名,而我们往服务器保存时,要从新指定服务器端的路径 File tempFile = new File(item.getName());// 临时性的,目的调用它的tempFile.getName()方法,仅仅获取所上传文件的名字而不要路径 System.out.println("文件名字:" + tempFile.getName()); // app.getRealPath("/"); System.out.println("当前工程的绝对路径:" + app.getRealPath("/")); // 从新获取file,而此file才是真正的所要上传的 File file = new File(app.getRealPath("/") + savePath, tempFile.getName());// 注意新file的构建,逗号前边是路径,后面是文件名 item.write(file); System.out.println("上传成功"); } } } } catch (Exception e) { e.printStackTrace(); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
不要忘记在web.xml里田间配置
<servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>UploadServlet</servlet-name> <servlet-class>com.accp.UploadServlet</servlet-class> <init-param> <param-name>savePath</param-name> <param-value>uploads</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>UploadServlet</servlet-name> <url-pattern>/UploadServlet</url-pattern> </servlet-mapping>
大功告成