在访问web目录下资源时,request.getServletContext().getRealPath()经常被使用,该代码作用是获取项目的绝对路径,例如
D:\demo\JAVA EE\Spring MVC\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\Fortis\imgProduct
至于其和本地路径
D:\demo\JAVA EE\Spring MVC\Fortis\WebContent
的关系和两者之间的实际应用,下面会举例解释:
tomcat服务器启动时,项目会被加载到tomcat的项目路径下,此时项目的资源获取在项目路径而不是初始存放的本地路径,且每次tomcat部署时会清空并且重新上传项目数据
例如上传图片时候
//图片上传并显示
@RequestMapping("/updateimg2")
@ResponseBody
public Map<String, Object> updateimg2(MultipartFile file,HttpServletRequest request) throws IOException {
Map<String, Object> map=new HashMap<>();
//获取文件要上传的路径
String realpath=request.getServletContext().getRealPath("/imgProduct/");//tomcat部署路径
String pathname="D:\\demo/JAVA EE/Spring MVC/Fortis/WebContent/imgProduct";
//originalName:图片原始名字 uuid:随机序号(防止相同图片名字) imgname:存放在images文件夹的图片名字
String uuid = UUID.randomUUID().toString().replace("-", "");
String imgName=uuid+".jpg";
String targetpath=realpath+"/"+imgName;//tomcat路径+文件名
String sqlPath=pathname+"/"+imgName;
File dest=new File(sqlPath);
File targetfile=new File(targetpath);
file.transferTo(dest);
Files.copy(dest.toPath(), targetfile.toPath());//复制到tomcat目录(tomcat目录每次会刷新)
System.out.println(realpath);
map.put("code", 0);//判断上传是否成功
map.put("imagename", imgName);
return map;
}
重点是这句代码:
Files.copy(dest.toPath(), targetfile.toPath());//复制到tomcat目录(tomcat目录每次会刷新)
如果没有这行代码,上传的图片不会在页面显示,除非重新部署tomcat
我们可以看一下回显的html代码
注意,此时src下目录是项目目录,如果程序中只将图片放入本地D:\demo\JAVA EE\Spring MVC\Fortis\WebContent,项目是读取不到的