使用tomacat创建虚拟目录完成图片的上传与显示

创建目录

D:\img

配置tomacat的server.xml(推荐在eclipse的Servers中的tomacat配置文件中修改)

Host标签最后添加下面的标签
<Context docBase="D:\img" path="/img"/>

编写servlet

/**
     * <p>Title: doAddfruit</p>
     * <b>Description:添加商品</b><br> 
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     * <b>Author:</b> Lsc
     * <br><b>Date:</b> 2018年6月17日 下午9:04:08
     * <br><b>Version:</b> 1.0
     * @Note 
     * 
     */
    private void doAddfruit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        //颜色不一样的这一段代码是文件上传和收集传过来的文本信息
 //存储商品的文本属性---顺序:fid,fname,spec,up,t1,t2,img,stock
        List<String> friutAttrbuteList = new ArrayList<String>();
        //文件存储路径
        String realPath = null;
        //文件名
        String name = null;
        try {
            DiskFileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
            if (servletFileUpload.isMultipartContent(request)) {
                List<FileItem> parseRequest = servletFileUpload.parseRequest(request);

                for (FileItem fileItem : parseRequest) {
                    //判断是不是普通文件域
                    if (fileItem.isFormField()) {
                        //获得商品的属性信息
                        String friutAttrbute = fileItem.getString("UTF-8");
                        //将文本属性添加到list中
                        friutAttrbuteList.add(friutAttrbute);
                    }else {
                        //获取文件名
                        name = fileItem.getName();
                        //生成一个文件名
                        name = UUID.randomUUID().toString().replaceAll("_", "")+"$"+name;
                        //文件存储的位置,为了防止tomcat清理缓存的时候将商品图片删除,建立一个虚拟目录。详细位置见server.xml。使用了虚拟目录
                        realPath="/img";
                        //检测路径是否存在,不存在就创建
                        File file = new File(realPath);
                        if (!file.exists()) {
                            file.mkdir();
                        }
                        //将文件写入文件中
                        fileItem.write(new File(file,name));
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
//      文本属性---顺序:fid,fname,spec,up,t1,t2,img,stock
        int fid = Integer.parseInt(friutAttrbuteList.get(0));
        String fname = friutAttrbuteList.get(1);
        String spec = friutAttrbuteList.get(2);
        double up = Double.parseDouble(friutAttrbuteList.get(3));
        String t1 = friutAttrbuteList.get(4);
        String t2 = friutAttrbuteList.get(5);
        int inum = 1;
        int stock = Integer.parseInt(friutAttrbuteList.get(6));
        //文件位置
        String path = realPath+"\\"+name;
        //构造一个fruit对象
        Fruit fruit = new Fruit(fid, fname, spec, up, t1, t2, inum,stock,path);
        boolean boo = fServiceI.add(fruit);
        if (boo)
            doAllfruit(request, response);
        else
            request.getRequestDispatcher("BSindex5.jsp").forward(request, response);
    }

图片显示

<img src="+fruit.getPath()+">

tips:
创建虚拟目录的另一种方法:
在Tomcat根目录下的/conf/Catalina/localhost/ 路径下新建一个filename.xml,并在该xml中编写语句
<Context docBase="F:\Java\JavaWebWorkspace\news"/>
即可创建虚拟站点,虚拟站点名为filename。注意docbase指向你自己的应用程序目录,各参数参见方法1中的标签的参数(注意此文件名将作为Context中的path属性值,不管文件里的path属性值如何设置也是无效的 )。
如果需要分层虚拟站点,可以将文件名改成a#b#c,访问分层虚拟站点时用localhost:8080/a/b/c
Context标签详解:
<Context path="/yang" docBase="f:\mysite1\xxx.war" debug="0" reloadable="true" crossContext="true" />

说明:
  • path:指定访问该 Web 应用的 URL 入口。
  • docBase:指定 Web 应用的文件路径,可以给定绝对路径,也可以给定相对于<Host>的appBase 属性的相对路径,如果 Web 应用采用开放目录结构,则指定 Web 应用的根目录,如果 Web 应用是个 war 文件,则指定 war 文件的路径。(指定项目所在地址)
  • reloadable:如果这个属性设为 true,tomcat 服务器在运行状态下会监视在WEB-INF/classes 和 WEB-INF/lib 目录下 class 文件的改动,如果监测到有 class 文件被更新的,服务器会自动重新加载 Web 应用。
  • crossContext:如果想在应用内调用 ServletContext.getContext()来返回在该虚拟主机上运行的其他 web application 的 request dispatcher,设为 true。在安全性很重要的环境中设为 false,使得 getContext()总是返回 null。缺省值为 false。
  • Debug:与这个 Engine 关联的 Logger 记录的调试信息的详细程度。数字越大,输出越详细。如果没有指定,缺省为 0。这个方法一般在设置后都需要重启服务器才有效(有时候即使设置了reloadable=“true” 也需要重新启动)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值