Java Web 回顾总结(四) - Servlet - 常用路径获取与使用

一般使用如下几种方法

1.可以在servletinit()方法里

  String path = this.getServletContext().getRealPath("/");

  这将获取web项目的全路径

  例如 :H:\eclipse\wepapps\app\

  appweb项目的根目录

2.通用获取路径方式获取 任意的class 的绝对路径

  this.getClass().getClassLoader().getResource("/").getPath();

  这将获取 到该 class目录的全路径

  例如 : H:\eclipse/webapps/app/com/server/Demon1

  这个方法也可以不在web 环境里确定路径,比较好用

java Web url 路径映射

JavaWeb开发中,只要是写URL地址,那么建议最好以/开头,也就是使用绝对路径的方式

/是给服务器用的,则代表当前的web工程,如果/是给浏览器用的,则代表webapps目录。

示例

1.ServletContext.getRealPath(String path)获取资源的绝对路径
/**
* ServletContext.getRealPath("/download/1.JPG")是用来获取服务器上的某个资源,
* 那么这个"/"就是给服务器用的,"/"此时代表的就是web工程
 * ServletContext.getRealPath("/download/1.JPG")表示的就是读取web工程下的download文件夹中的1.JPG这个资源
*/

//得到 要访问的web资源的绝对路径(要在 init() 中使用)
this.getServletContext().getRealPath("/download/1.JPG");
2.在服务器端forward传参跳转到其他页面
/**
  * 客户端请求某个web资源,服务器跳转到另外一个web资源,这个forward也是给服务器用的,
 * 那么这个"/"就是给服务器用的,所以此时"/"代表的就是web工程
 */
this.getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
3.使用include指令或者<jsp:include>标签引入页面
 <%@include file="/jspfragments/head.jspf" %>
 <jsp:include page="/jspfragments/demo.jsp" />
  此时"/"代表的都是web工程。

“/”代表webapps目录的常见应用场景

示例
1.使用sendRedirect实现请求重定向

response.sendRedirect("/req/index.jsp");

服务器发送一个URL地址给浏览器,浏览器拿到URL地址之后,再去请求服务器,所以这个/是给浏览器使用的

  此时/代表的就是webapps目录,”/req/index.jsp这个地址指的就是webapps\req\index.jsp`

  response.sendRedirect("/项目名称/文件夹目录/页面");
  这种写法是将项目名称写死在程序中的做法,不灵活,万一哪天项目名称变了,此时就得改程序,所以推荐使用下面的灵活写法:

response.sendRedirect("/req/index.jsp");

  这种写法改成

response.sendRedirect(request.getContextPath()+"/index.jsp");


request.getContextPath()获取到的内容就是/req,这样就比较规范
使用request.getContextPath()代替/项目名称,推荐使用这种方式
2.使用超链接跳转


<a href="/JavaWeb_HttpServletResponse_Study_20140615/index.jsp">跳转到首页</a>
 
这是客户端浏览器使用的超链接跳转,这个”/”是给浏览器使用的,此时”/”代表的就是webapps目录。

使用超链接访问web资源,绝对路径的写法推荐使用下面的写法改进:

<a href="${pageContext.request.contextPath}/index.jsp">跳转到首页</a>

  这样就可以避免在路径中出现项目的名称,使用${pageContext.request.contextPath}取代”/req”

3.Form表单提交
<form action="/req/servlet/CheckServlet" method="post">    
        <input type="submit" value="提交">
</form>

  这是客户端浏览器将form表单提交到服务器,所以这个/是给浏览器使用的,此时/代表的就是webapps目录。

对于form表单提交中action属性绝对路径的写法,也推荐使用如下的方式改进:

<form action="${pageContext.request.contextPath}/servlet/CheckServlet" method="post">
         <input type="submit" value="提交">
</form>

${pageContext.request.contextPath}的效果等同于request.getContextPath(),两者获取到的都是/项目名称

4.js脚本和css样式文件的引用
 <%--使用绝对路径的方式引用js脚本--%>
 <script type="text/javascript" src="${pageContext.request.contextPath}/js/index.js">  </script>

 <%--${pageContext.request.contextPath}与request.getContextPath()写法是得到的效果是一样的--%>

 <script type="text/javascript" src="<%=request.getContextPath()%>/js/login.js"></script>

<%--使用绝对路径的方式引用css样式--%>
  <link rel="stylesheet" href="${pageContext.request.contextPath}/css/index.css" type="text/css"/>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值