JSP/Servlet/HTML开发时路径问题

JSP动态页面开发的过程中经常需要通过相对路径来引用相关资源,我们可以把路径分为两类:一类是HTML代码中的静态路径,一类JSP标记、Java脚本中的动态路径。

 

1、  HTML中的静态相对路径:

a)        如果路径以“/”开始,则表示路径以当前应用的上级目录(即服务器根目录,不是当前应用根目录)为相对基准路径,所以以“/”开始的路径会在其后面紧跟着当前应用的上下文路径,然后才是所引用的应用中资源的路径。

b)        如果路径不以“/”开始,则表示路径以当前JSP页面的请求路径为相对基准路径。这里的“当前JSP页面的请求路径”即URL请求路径中应用上下文名称后面的路径部分。

http[s]://[address]:[port]/MyWebApp/[当前JSP页面的请求路径]

 “当前JSP页面的请求路径”可以是JSP文件在应用中的实际路径,也可以是在servlet-mapping配置中的url-pattern所指的路径。见如下示例。

Web应用的目录:

MyWebApp/

MyWebApp/WEB-INF/web.xml

MyWebApp/index.jsp

MyWebApp/images/

MyWebApp/images/img1.jpg

MyWebApp/jsp/myJsp.jsp

MyWebApp/index.jsp

web.xml中的配置:

  <servlet>

    <servlet-name>myJspServletservlet-name>

    <jsp-file>/jsp/myJsp.jspjsp-file>

  servlet>

  <servlet-mapping>

    <servlet-name> myJspServlet servlet-name>

    <url-pattern>/jsp/myJspServlet url-pattern>

  servlet-mapping>

  <servlet-mapping>

    <servlet-name> myJspServlet servlet-name>

    <url-pattern>/myJspServlet url-pattern>

  servlet-mapping>

 

  • 如果访问URL为:http[s]://[address]:[port]/MyWebApp/jsp/myJsp.jsp,则myJsp.jsp所产生的html中对资源img1.jpg的相对引用路径应被写为“../images/img1.jpg”。
  • 如果访问URL为:http[s]://[address]:[port]/MyWebApp/jsp/myJspServlet,则myJsp.jsp所产生的html中对资源img1.jpg的相对引用路径应被写为“../images/img1.jpg”。
  • 如果访问URL为:http[s]://[address]:[port]/MyWebApp/myJspServlet,则myJsp.jsp所产生的html中对资源img1.jpg的相对引用路径应被写为“images/img1.jpg”。
  • 如果访问URL为:http[s]://[address]:[port]/MyWebApp/index.jsp,则index.jsp所产生的html中对资源img1.jpg的相对引用路径应写为“images/img1.jpg”。

 

2、  JSP标记、Java脚本中的动态相对路径:

对于JSP标记中的动态相对路径,如果以“/”开头,那么路径主页是参照JSP应用的上下文关系路径;如果路径不以“/”开头,那么:

a)        用于include指令元素(<%include file=””%>file属性中的路径则表示为相对于当前jsp文件(因为include指令作用于JSP的编译期间)

b)        用于jsp:includejsp:forward动作元素(page属性中的路径则表示为相对于当前jsp页面(即http[s]://[address]:[port]/MyWebApp/[当前JSP页面的请求路径]中的当期JSP页面的请求路径,因为jsp:include动作元素作用于JSP的运行期间)。


对于Java脚本中的动态路径,具体可参考JavaDoc。常用的动态路径有:

a)        ServletContext.getRequestDispatcher(String path),其中pathServletContext对象上下文中的请求路径,其中,ServletContext对象可以是通过getContext()方法来获取的其他应用上下文的对象。例如:getContext(“/OtherWebAppOfTheServer”)+”/”+ getContext(“/OtherWebAppOfTheServer”).getRequestDispatcher(“/servletName”)

b)        ServletRequest.getRequestDispatcher(String path),其中path为当前应用上下文中的请求路径。如果path以“/”开头,则表示相对于当前应用上下文路径,否则表示相对于当前JSP页面的请求路径。

c)        HttpServletResponse.sendRedirect(String location),其中location如果以“/”开头,则表示相对于服务器根目录,否则表示相对于当前请求的目录。如果重定向到同一服务器的其他应用,则location可写为:“/OtherWebAppOfTheServer/servletName”。

 

你可能感兴趣的:(JSP/Servlet,jsp,include,html,javadoc,url)