您的位置:首页 > 编程语言 > Java开发

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

2018-03-21 19:47 309 查看

一般使用如下几种方法

1.可以在
servlet
init()
方法里

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


  这将获取web项目的全路径

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


  
app
web
项目的根目录

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"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: