P324 第四题
jsp图片为何显示不出来?
原因:
jsp能访问到哪是有容器(tomcat或者weblogic等)控制的。应用服务不允许你访问本地的其他目录,自然是访问不了(即使能访问也不会是“D:\123.jpg”这种形式,jsp会先被转换成servlet提供服务,当页面访问jsp时实际上是jsp 所对应的servlet发送给浏览器的的html代码,而原jsp页面中的html是不会进行处理的,而直接发送给浏览器(客户端),你的链接中所说的“D:\123.jpg”对应的是服务器上的“D:\123.jpg”,而不是客户机器上的“D:\123.jpg”。客户端上有没有“D:\123.jpg”。html是你本地的浏览器解析的,所以“D:\123.jpg”只会去本地磁盘上找,而不回去服务器上找)。需要配置图片的虚拟访问路径(推荐配置二)。
解决异常 (配置一or配置二)
-
配置一
寻找此电脑中安装Tomcat路径下的的server.xml。
server.xml地址:apache-tomcat-8.5.54\conf\server.xml
在标签里添加
<Context path="/uploadfile" docBase="C:\apache-tomcat-8.5.54\webapps\statics\uploadfile" reloadable="true" crossContext="true"/>
docBase : 图片在此电脑地址 path:虚拟地址
2.配置二
在IDEA中修改tomcat的图片访问路径,选中Edit Configuration… 再点击Deployment
找到本地Tomcat的图片文件地址,设置虚拟地址,点击Apply保存,再OK。
流程如图:
修改思路
/uploadfile 虚拟路径。
${provider.idPicPath}的值是从providerService.getProviderById(id);数据库中获取的导入prvoider对象传入的。
C:\apache-tomcat-8.5.54\webapps\statics\uploadfile\1600911883531_Personail.jpg
需要在UserController.java中修改provider.setIdPicPath和provider.setWorkPicPath 值,使用String字符串的截取,将provider类的idpicPath和workPicPath修改成 文件名.jpg 例(1600911883531_Personail.jpg)
/**
* 查看详情Provider 使用REST风格
* @param id
* @param model
* @return
*/
@RequestMapping(value = "/viewPro/{id}",method = RequestMethod.GET)
public String viewPro(@PathVariable String id,Model model){
logger.info("=====进入viewPro()=======");
Provider provider=providerService.getProviderById(id);
String photoId=provider.getIdPicPath();
provider.setIdPicPath( photoId.substring(photoId.lastIndexOf("\\")+1) );
//lastindexOf("\\")中的“\\” 转义符 成 “/”
String photoWork=provider.getWorkPicPath();
provider.setWorkPicPath(photoWork.substring(photoWork.lastIndexOf("\\")+1) );
logger.info("营业执照:"+provider.getIdPicPath());
logger.info("组织机构代码证:"+provider.getWorkPicPath());
model.addAttribute(provider);
return "jsp/providerview";
}
model.addAttribute(provider);
return "jsp/providerview";
}