servlet的路径跳转及路径问题

其实这个路径的问题应该不只是servelt,应该是整个项目里比如jsp的跳转,超链接,都符合。

 1 <body>
 2     <h1>Servlet路径跳转</h1>
 3     <hr>
 4     <!--使用相对路径访问HelloServlet -->
 5     <!-- /servlet/HelloServlet 第一个/表示服务器的根目录 -->
 6     <a href="servlet/HelloServlet">访问HelloServlet!</a><br>
 7     <!-- 使用绝对路径 访问HelloServlet,可以使用path变量:path变量表示项目的根目录-->
 8     <a href="<%=path%>/servlet/HelloServlet">访问HelloServlet!</a><br>
 9     <!--表单中action的URL地址写法,与超链接方式完全相同。 -->
10     <a href="servlet/TestServlet">访问TestServlet,跳转到Test.jsp</a>
11
12   </body>

1.  相对路径

  <a href="servlet/HelloServlet">访问HelloServlet!</a>。只所以这样写,是因为当前jsp和要访问的servelt不在一个目录下,所以要写明所在的包:  

  (这里我不太理解的是,index.jsp其实是和src一个目录等级,为什么不是写src/servlet/HelloServlet?还是说src这样项目自带的文件夹是不需要写明的?只需要些了包名/类名就是相对路径?还是说index和src是一个层次,相对路径就直接从下一个层次的servlet开始?)

  

  超链接里servlet/HelloServelt前面不能有  反斜线,反斜线是代表服务器根目录,"/servlet/HelloServlet"代表的地址是:

    

2. 绝对路径

  <a href="<%=path%>/servlet/HelloServlet">访问HelloServlet!</a>里的path就是当前的上下文,表示项目的根目录:

  JSP开头一般会有这两句代码:

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

  (我前面不知道哪里有认为相对路径更靠谱,因为绝对路径的话,发布出去的项目和自己电脑的代码,绝对路径不一样。不过这么看的话,绝对路径是获取上下文,那倒是任何时候都靠谱了,怪不得项目的代码里都是用path)

  项目结构里index.jsp是在ServletPathDirection\WebRoot下面(ServletPathDirection是项目名)。但是打印这个path,值是项目名:ServletPathDirection。和WebRoot无关。

  这么说的话,HelloServlet虽然在ServletPathDirection\src\servlet下面,但是实际的path是ServletPathDirection\servlet??

  也就是说,获取上下文路径,项目创建时自带的文件夹是无效的,不算路径,只有自己创建的文件夹才算??

  不对,这个上下文,就只是项目名,是项目的根目录,HelloServlet获取上下文,值也是ServletPathDirection??

  

  那这样的话,绝对路径就是项目根目录+自己创建的包/类??项目本身有的文件夹是不算的?

  这么看的话,文件的物理路径,和代码里那个路径就不是一个意思了,物理路径一定是包含有src的:

      /ServletPathDirection/src/servlet/HelloServlet.java

  

ps:

  尝试了几次想要在servelt里打印一下路径看看,但是一直写不对。

  刚刚看到,servelt输出是到页面,一直写System.out是不行的,要写HTML:

    

PrintWriter out=response.getWriter();//取得输出流
out.println("<html>");//输出的内容要放在HTML中
out.println("<body>");
out.println("要输入的内容.........");
out.println("</body>");
out.println("</html>");

  好吧,还是没做出来。

  不过绝对路径应该就是项目的根目录+自己创建的那个文件路径了,servlet绝对路径的则是项目根目录+<url-pattern>的值。

  

  

3.  url方法

  web.xml里注册servlet时有写其url:

 <servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <!--url-pattern处必须以/开头,这里的/表示项目的根目录  但是超链接里使用时,是不写/的-->
    <url-pattern>/servlet/TestServlet</url-pattern>
  </servlet-mapping>

  这里和上面不一样,超链接里的  反斜线代表服务器的根目录,所以超链接里使用servlet的url时,前面是不写/的;url的反斜线代表的是项目的根目录。

  表单里的  action:“url”  写法和超链接一致:

<a href="servlet/TestServlet">访问TestServlet,跳转到Test.jsp</a>

web.xml里的url是有   /     但是表单里   action后的url   是没有   /   的。。

  ps: 超链接方法servlet是直接是url,不带前面的  反斜线,也不带  .java.但是超链接访问jsp就要写   .jsp:

    

<a href="test.jsp">访问Test.jsp</a>

  

  

  此时,由当前页面index.jsp访问到了TestServlet.java。然后TestServlet的     doPost(){   里面写跳转 }(doGet里面直接写的是doPost,所以不管什么提交方式最后肯定是用doPost,但是超链接访问也没有写是get还是post啊?(ps:超链接的默认请求方式是get,也能修改)):

  

//请求重定向方式跳转到test.jsp,当前路径是ServletPathDirection/servlet/
         response.sendRedirect("test.jsp");
         //使用request.getContextPath获得上下文对象
         response.sendRedirect(request.getContextPath()+"/test.jsp");
        //服务器内部跳转,这里的斜线表示项目的根目录
        request.getRequestDispatcher("/test.jsp").forward(request, response);
        request.getRequestDispatcher("../test.jsp").forward(request, response);

  第一种用重定向,地址就直接写目标的名字,是在当前目录下找test.jsp,找不到。Servlet的Java文件和jsp不在一级的目录里。

  第二句加上了上下文(其实就是项目根目录),就补全了路径(但如果jsp文件也在一个包下面呢?那也应该加上包名)

  第三句用请求转发,  反斜线代表是根目录,路径是对的

  第四句的  ../    也可以(这是回退到根目录的意思还是  回退到上一级?)

ps:

   

./表示当前目录

../表示父级目录

 /表示根目录(超链接里是代表服务器的根目录,所以超链接里是不写  /   ;表单的action访问也是不写。重定向里也是代表服务器根目录。只有请求转发里可以写  /  代表项目根目录)
 

  

原文地址:https://www.cnblogs.com/youwuyi/p/10251039.html

时间: 2024-11-06 16:29:04

servlet的路径跳转及路径问题的相关文章

Servlet路径跳转问题

Servlet中路径跳转 相对路径         注意这里的相对含义,相对于谁而言 经过多次试验总结,servlet相对路径跳转相对于servlet配置的xml路径(或servlet3.0注解路径) 如下: //XML文件  <servlet-mapping> <servlet-name>RegServlet</servlet-name> <url-pattern>/servlet/RegServlet</url-pattern> </s

Servlet路径跳转2--在servlet当中,跳转到某网页时的路径写法

课程1-13   http://www.imooc.com/video/5554 Servlet路径跳转: 绝对路径:放在任何地方都对的路径 相对路径:相对于当前资源的路径 两种方法:请求重定向,服务器内部跳转 方法一:请求重定向方式跳转到test.jsp,超链接写法如下 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOExcept

jsp页面跳转的路径问题

<form class="box login" action="/graduation_system/BServlet" method="post"> <fieldset class="boxBody"> <label>用户名</label> <input type="text" name="username" tabindex=&q

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

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

Java开发之Servlet之间的跳转

一.转向(Forward) 1.要点说明 转向是通过RequestDispatcher对象的forward()方法来实现的.RequestDispatcher可以通过HttpServletRequest的getRequestDispatcher()方法获得.getRequestDispatcher()方法的参数必须以“/”开始.Forward不仅可以跳转到本应用的另一个Servlet.JSP页面,也可以跳转到另一个文件,甚至WEB-INF文件夹下的文件. 转向通过request.setAttri

web应用路径问题(相对路径,绝对路径,动态获取路径)

1.相对路径和绝对路径 绝对路径:以 " / " 开头的路径,是完整的路径. 相对路径:不以 " / " 开头的路径,是相对于当前web资源目录的路径. 在绝对路径中, " / " 的含义有两种解释: (1)如果是服务器端解析, " / " 代表相对于当前web应用的绝对路径,即:协议名://服务器名(主机地址):端口号/项目名/,例如:http://localhost:8080/MyTest/. (2)如果是浏览器端解析(出

php 相对路径中 及 绝对路径中 的一些问题

写本篇文章,是为了以后学习中遇到问题好解决 php的相对路径是以当前工作目录为基准的,并不是以当前处理的文件目录为基准,这样导致我们在开发过程中总会遇到一些问题. 但是如果我们使用绝对路径,就会导致后期的项目移植,以及可维护性较差. 在使用include以及requice包含文件的时候,在文件路径前都加上dirname(__FILE__)可解决路径问题 dirname(__FILE__)获取当前文件的目录路径 ps: 当前有四个文件,分别为a.php,b.php,c.php,d.php 他们之间

Python主文件路径和当前模块路径

主执行文件路径sys.argv[0]                                                                                                                     当前模块路径__file__ 两者获取的为相对路径,需要绝对路径时,请转换

iOS开发——路径篇&amp;混编路径与全局宏路径

混编路径与全局宏路径 最近在做东西的时候有一个地方要用到一个第三方库的,但是目前swift版的还没有找到,自己又不想写(其实是不会写),所以就想到了混编,但是中间出现了好多问题,其中印象最深的就是桥接文件的路径问题,着让我想到了关于Xcode6之前的一个pch文件路径,虽然不一样,但是,我就是很傻逼的在这里搞了好久才搞通,所以就总结一些. 一:混编路径 关于混编,这里就不多说了.平时我们想要实现一个功能,但是在swift目前还没有找到好的方法,而正好objective-C却很容易实现的时候(或第