初识Servlet 遇到关于路径的问题

  • 这是我的项目结构:

项目结构

  • 项目的虚拟路径:

虚拟路径

  • 当我在web.xml中设置news.html为欢迎界面时:

web.xml

  • 网页会出现图片无法加载的问题:

网页

  • 我们可以看到news.html中的url是相对路径:

路径

  • 这样就会导致当网页打开后,网页会在当前目录下自动进行图片访问加载
    在这里插入图片描述
    我们知道通过../img/logo.png访问到的路径为localhost:8080/img/logo.png,那么就会产生一个问题:虚拟路径缺失,因此会导致图片无法加载。

解决方案一

我们可以把虚拟路径设置为 / ,这样可以避免虚拟路径的丢失。


解决方案二

也可以直接在浏览器中输入绝对路径:localhost:8080/test/news/news.html,也可以解决图片加载不出来的问题。
但这样欢迎界面就没有意义了。


解决方案三

可以不用设置欢迎界面,可以在index.jsp中通过<a>标签设置链接打开news.html页面。


总结

  • 对于这个项目,不能配置虚拟路径,如果配置虚拟路径news.html的图片将无法显示

  • 当访问到news.html ,浏览器会检测html中的所有路径(img,link),再次发起请求,而这些路径如果是相对路径,则会参照当前浏览器中的路径来进行查找

  • 由于相对路径参照的文件夹不一样,会有很多种解决方案,主要是要理解资源的加载路径、加载过程

	路径问题:
		
			java中的路径:转发,重定向路径,refresh,servlet绑定的路径
			
			流读取图片/文件,路径 (getRealPath或者直接是电脑上的某个绝对路径:d:\\stu.txt)
			
			html中的路径,img,link,a的href,form的action
			
			
		绝对路径:	以"/"开头的都是绝对路径(全路径:项目虚拟路径+资源路径)
		
			1. 转发:req.getRequestDispatcher("/servletDemo10").forward(req,resp);
				
				转发这里没有写全路径,是因为转发只能转发当前项目内的url,所以相当于默认就有项目虚拟路径
				
			2. 重定向:resp.sendRedirect(req.getContextPath() + "/servletDemo07"); //例如:/response/servletDemo07
			
			3. 定时刷新:resp.setHeader("Refresh","3;URL=/response/login.html"); // 这里其实也可以通过req.getContextPath()动态获取虚拟路径,然后进行拼接
			
			4. servlet绑定路径: @WebServlet("/addStudentServlet");// servlet绑定的路径相当于是给servlet指定一个访问的url,那肯定不需要写项目虚拟路径
				
				访问此servlet的路径:例如:/stu/addStudentServlet
				
			5. 文件:
			
				BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\stu.txt",true));//本地真实路径
			   
			    String realPath = getServletContext().getRealPath("/img/a.png"); //在项目中的路径:web/img/a.png
				
			6. <frame src="/crm/html/frame/left1.html" scrolling="no"/>  //在项目中的路径web/html/frame/left1.html (/crm是虚拟路径)
			
			7. <a href="/stu/addStudent.html">添加学生</a> //在项目中的路径:web/addStudent.html  (/stu是虚拟路径)
			
			8. <form action="/stu/addStudentServlet"> //(/stu是虚拟路径)
		
		
		相对路径: 不以"/"开头的都是相对路径(相对于当前浏览器地址栏的地址)
		
			1. img的src: <img src="../img/1.jpg">  
			2. link的href: <link rel="stylesheet" href="../css/login.css"/>
			
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值