Servlet中关于路径的小结

URL(统一 资源定位符)、URI(统一资源标识符)都是由资源路径和资源名称组成。

 

访问路径按照路径是否可以独立完成资源准确定位的判别标准,可以将访问路径分为绝对路径相对路径

关系:绝对路径 = 参照路径 + 相对路径

绝对路径是一个详细的资源访问路径,但是相对路径需要详细说明。

相对路径:  ①以斜杠开头的相对路径  以路径名称开头的相对路径

①以斜杠开头的相对路径,根据路径所在文件所处位置的不同,分为前台路径和后台路径

前台路径:由浏览器解析执行的代码中所包含的路径。e.g:    html 、 css 、 js中的路径, jsp 文件中静态部分的路径 、HTML 标签中的路径.

例子: html 及 jsp 文件 中的 <img 、 <a href=" "></ 、 <form action=" "></ 等 标签中的路径 再如, css 文件中的 background:img( 等属性中的路径, js 文件 中的 window.location.href= 等属性中的路径 ,都属于前台路径。

前台路径的参照路径是 Web 服务器的根路径 ,例如 http://127.0.0.1:8080 。!!!

将前台路径转换为绝对路径的工作,是由浏览器自动完成的。

该路径的作用是要为用户该路径的作用是要为用户提交对某种资源的请求,是要查找并定位服务器中的某资源。简单来说,前台路径的作用是提交对某种资源的请求,是要查找并定位服务器中的某资源。简单来说,前台路径的作用是“查找”。

例如:

超链接的例子

                  

表单例子

<!--
		这是一个前台路径,前台路径的参数路径是当前Web服务器的根,即
			http://localhost:8080
		绝对路径 = 参数路径 + 相对路径
		即浏览器会自动将这个前台路径转换为绝对路径
			http://localhost:8080/loginServlet
		在Web服务器的根目录中没有loginServlet这个东西,所以这个访问路径
		是无法访问到loginServlet的,会报404
	 -->
	<form action="/loginServlet" method="POST">
		用户名:<input type="text" name="username"/><br>
		<input type="submit" value="登录"/>
	</form>

	<hr>

	<!--
		这是一个前台路径,前台路径的参数路径是当前Web服务器的根,即
			http://localhost:8080
		绝对路径 = 参数路径 + 相对路径
		即浏览器会自动将这个前台路径转换为绝对路径
			http://localhost:8080/25-relativePath2/loginServlet
		在Web服务器的根目录中存在25-relativePath2项目,而这个项目中存在loginServlet
		所以,这个访问路径是可以访问到的
	 -->
	<form action="/25-relativePath2/loginServlet" method="POST">
		用户名:<input type="text" name="username"/><br>
		<input type="submit" value="登录"/>
	</form>

后台路径:由服务器解析执行的代码及文件中所包含的路径。e.g: java 代码中的路径、 jsp 文件动态部分( java 代码块)中的路径、 xml 等配置 文件中的路径( 配置 文件是要被 java 代码 解析后加载到 内存 的,其中的路径会出现在 Java 代码中 )等。

后台路径的参照路径是Web应用的根路径 。如 http://127.0.0.1:8080/primary 。!!!

将后台路径转换为绝对路径的工作,是由服务器自动完成的。

该路径的作用是标识出该资源在服务器中的路径,以便客户端能够按照这个设定路径来查找相应资源。简单来说,后台路径的作用是“标识”。

举栗子:

<!-- web.xml 配置属于后台路径-->
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xmlns="http://java.sun.com/xml/ns/javaee"         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"         id="WebApp_ID" version="2.5">
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>

  <servlet>
    <description></description>
    <display-name>LoginServlet</display-name>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.bjpowernode.servlets.LoginServlet</servlet-class>
  </servlet>
  <!--
  	这是一个后台路径,后台路径的参照路径是当前Web应用的根,即
  		http://localhost:8080/25-relativePath2
  	绝对路径 = 参照路径 + 相对路径
  	将相对路径转换为绝对路径工作,是由Web服务器完成的,服务器会将
  	这个相对路径转换为:
  		http://localhost:8080/25-relativePath2/loginServlet
  	后台路径的绝对路径,其作用是“标识”。即客户端要想访问我这里定义的LoginServlet
  	那么,必须要提交上面的绝对路径。

  	客户端现在提交的请求为:
  		http://localhost:8080/25-relativePath2/loginServlet
  	其与这里的绝对路径是相同的,所以这个请求是可以访问到LoginServlet的
   -->
  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/loginServlet</url-pattern>
  </servlet-mapping>
</web-app>

 

这个栗子营养多!!!public class SomeServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		/*
		 *    这是一个后台路径,后台路径的参照路径是当前Web应用的根,即
		 *    	http://localhost:8080/26-relativePath3
		 *    绝对路径 = 参照路径 + 相对路径
		 *    将这个相对路径转换为绝对路径的工作,是由Web服务器完成的。即服务器会将
		 *    这个相对路径转换为:http://localhost:8080/26-relativePath3/otherServlet
		 *    服务器中对于OtherServlet这个资源指定的访问路径是
		 *    	http://localhost:8080/26-relativePath3/otherServlet
		 *    请求路径与资源的“标识”路径是相同的,那么,这个请求是可以跳转成功的
		 *
		 */
		 request.getRequestDispatcher("/otherServlet").forward(request, response);

		/*
		 * 	注意,对于response的sendRedirect()方法完成的重定向,若其参数路径为“以斜杠开头的相对路径”
		 *  这个后台路径是个特例。只所以其为特例,是由sendRedirect()方法的本质决定的。这个方法不仅可以完成
		 *  在当前项目中资源的跳转,还可以跳转到其它项目中的资源。所以这个后台路径的参照路径为“当前Web服务器
		 *  的根”。
		 *
		 * 注意,只有这一种重定向是特例,将来还会有其它方式实现的重定向,但那里的重定向就不是特例,
		 *  而是遵循我们之前的路径转换理论
		 */
		// 下面的写法无法完成跳转
		// response.sendRedirect("/otherServlet");

		// 下面的写法可以完成跳转,但这样写不太好
		// response.sendRedirect("/26-relativePath3/otherServlet");

		// 下面的写法才是最好的写法
		response.sendRedirect(request.getContextPath() + "/otherServlet");
	}
}

②以路径名称开头的相对路径

以路径名称开头的相对路径 ,无论是出现在前台页面 ,还是出现在后台Java 代码或配置文件中其参照路径都是当前访问路径的资源路径 。 即使是response的sendRedirect()方法的参数路径,若不以斜杠开头,其也属于以路径名称开头的相对路径”类,参照路径为当前访问路径的资源路径。

 举栗子:

public class SomeServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		/*
		 * 这是一个“以路径名称开头的相对路径”,其参照路径为“当前访问路径的资源路径”
		 * 就本例而言,是  http://localhost:8080/27-relativePath4
		 * 绝对路径 = 参照路径 + 相对路径
		 * 服务器会自动将这个相对路径转换为绝对路径:
		 * http://localhost:8080/27-relativePath4/otherServlet
		 *
		 */
		request.getRequestDispatcher("otherServlet").forward(request, response);

		/*
		 * 注意,对于response的sendRedirect()方法完成的重定向,若参数路径不以斜杠开头,
		 * 其是满足之前的路径理论的。其不是特例。下面的相对路径是可以完成跳转的。
		 *
		 */
		response.sendRedirect("otherServlet");

		//注意,若相对路径加上斜杠与不加斜杠,都可以完成跳转,那么,就要加上斜杠。
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns="http://java.sun.com/xml/ns/javaee"       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"       id="WebApp_ID" version="2.5">

  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>

  <!--
    服务器会将这个相对路径转变为如下的绝对路径:http://localhost:8080/26-relativePath3/otherServlet
    这个绝对路径的意思是,若想访问我这里定义的OtherServlet,那你就必须提交如上形式的访问路径。即这里指定了OtherServlet这个资源的访问路径。
   注:其中 <url-pattern>/otherServlet</url-pattern>中的/otherServlet的/是不能去掉的,不能按照以路径名称开头的相对路径去想,    因为这里是个配置文件只是用来标识的,并没有访问的资源路径,所有不可以去掉/          
   -->
  <servlet-mapping>
    <servlet-name>OtherServlet</servlet-name>
    <url-pattern>/otherServlet</url-pattern>
  </servlet-mapping>
</web-app>    

原文地址:https://www.cnblogs.com/lijie0609/p/11842528.html

时间: 2024-08-30 10:55:26

Servlet中关于路径的小结的相关文章

在开发中关于javaweb中的路径问题小结

转自http://blog.csdn.net/yinyuehepijiu/article/details/9136117 在javaweb项目中添加配置文件,满足连接数据库配置参数以及其他自定义参数存放,可自己写一个配置文件**.properties,把项目所需的自定义配置信息以名值对的形式写入文件.在项目工程目录下的WebRoot\WEB-INF\classes目录下新建一个conf文件夹专门存放配置文件,然后把**.properties配置文件放到conf中,部署时IDE会自动将其复制到相应

JAVA中获取路径

内容来自于snannan_268 关键字: java中获取路径 JAVA中获取路径: 1.jsp中取得路径:   以工程名为TEST为例: (1)得到包含工程名的当前页面全路径:request.getRequestURI() 结果:/TEST/test.jsp (2)得到工程名:request.getContextPath() 结果:/TEST (3)得到当前页面所在目录下全名称:request.getServletPath() 结果:如果页面在jsp目录下 /TEST/jsp/test.jsp

Servlet中路径问题:调度

Servlet中路径问题:调度 (1)调用后台方法 (2)根据结果完成跳转 重定向 response.sendRedirect(url); 转发 request.getRequestDispatcher(url).forward(request,response);MyServlet: http://localhost/news/myServlet31 重定向 response.sendRedirect(url);相对路径: response.sendRedirect("a/b.jsp"

Servlet中转发和重定向的路径问题

Servlet中有两种方式获得转发对象(RequestDispatcher):一种是通过HttpServletRequest的getRequestDispatcher()方法获得,一种是通过ServletContext的getRequestDispatcher()方法获得: 重定向的方法只有一种:HttpServletResponse的sendRedirect()方法. 这三个方法的参数都是一个URL形式的字符串,但在使用相对路径或绝对路径上有所区别. ★ HttpServletResponse

Java Web开发中路径问题小结

看以博客感觉不错,分享一下http://www.cnblogs.com/tianguook/archive/2012/08/31/2665755.html (1) Web开发中路径的几个基本概念 假设在浏览器中访问了如下的页面,如图1所示: 图1 Eclipse中目录结构如图2所示: 图2 那么针对这个站点的几个基本概念表述如下: 1. web站点的根目录:http://localhost:8080/ 2. web应用程序的的根目录:http://localhost:8080/test/ 3.同

servlet中的相对路径和绝对路径

servlet中,所有路径的配置都要用绝对路径. 什么是绝对路径,就是以“/”开头的路径(开发中就这样理解). 实际开发中,“/”所代表的含义不同,但主要分以下两种情况: 1.servlet内部配置路径 servlet内部的含义就是:在客户端看不到,全是在(应用)后台处理的部分(简单说,就是除了JSP以外的所有地方).包含以下2点: a. web.xml中servlet 配置的路径 <servlet>  <servlet-name>helloWorld</servlet-na

解决servlet在web.xml中的路径跳转问题

<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.s

JSP、Servlet中的相对路径和绝对路径

1.JSP.Servlet中的相对路径和绝对路径  前提:假设你的Http地址为http://192.168.0.1/你的web应用为test,path="/test"那么你的web应用URL为http://192.168.0.1/test/ 如果JSP,JS文件放在WEB-INF目录下根本无法访问的,JSP如果放在WEB-INF目录下可以通过服务器内部转向进行访问(主要是为了页面的安全),但是JS是通过客户端向服务器请求的,所以图片以及一些JS,CSS只能放在WEB-INF外面  

Servlet配置虚拟路径(访问路径)的三种方法以及web开发中的路径问题

一.虚拟路径 配置虚拟路径 web.xml配置文件的虚拟路径 <servlet-mapping> <url-pattern>/demo5</url-pattern> </servlet-mapping> 三种配置方法 * 完全路径匹配 * 以/开头的                 /demo5         /servlet/demo5 * 目录匹配   * 以/开头的                    /*   * 通过:http://localh