关于servlet和jsp路径表达方式的不同

在用servlet+jsp开发中,不管是服务器端跳转、客户端跳转还是表单请求路径,在servlet和jsp中路径的表达是不同的。

声明: 

1、项目名为zzzz,端口号改为默认(80)

2  <servlet-mapping>
    <servlet-name>X</servlet-name>
    <url-pattern>/servlet/X</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>n</servlet-name>
    <url-pattern>/servlet/n</url-pattern>
  </servlet-mapping>

3、jsp页面全部在WebRoot(根)目录下

4、绝对路径指的是和当前页(jsp或者servlet)相对位置,例如下列表单请求A:中的相对路径表示index1.jsp和index.jsp在同一个(物理)位置

一、在jsp中

1、表单请求

A:在index.jsp请求index1.jsp

      用相对路径:<form action="index1.jsp">

      用绝对路径:<form action="/zzzz/index1.jsp">

B:在index.jsp请求servlet

      用相对路径:<form action="servlet/n">

      用绝对路径:<form action="/zzzz/servlet/n">

 

2、客户端跳转

A:超链接

      相对路径:<a href="index1.jsp">跳转</a>或者<a href="servlet/n">跳转</a>

      绝对路径:<a href="/zzzz/index1.jsp">跳转</a>或者<a href="/zzzz/servlet/n">跳转</a>

B:sendRedirect方法

      相对路径:response.sendRedirect("index1.jsp")或者response.sendRedirect("servlet/n");

      绝对路径:response.sendRedirect("/zzzz/index1.jsp")或者response.sendRedirect("/zzzz/servlet/n");

3、服务器端跳转

     相对路径:request.getRequestDispatcher("index1.jsp").forward(request,response);

                       request.getRequestDispatcher("servlet/n").forward(request,response);

     绝对路径:request.getRequestDispatcher("/index1.jsp").forward(request,response)注意:不是request.getRequestDispatcher("/zzzz/index1.jsp").forward(request,response);

                       request.getRequestDispatcher("/servlet/n").forward(request,response);   

                       this.getServletContext().getRequestDispatcher("/index1.jsp").forward(request,response);

总结:除了服务器端跳转外,相对路径比绝对路径多了/zzzz

 

二、在servlet中

1、客户端跳转

A:超链接

      相对路径:PrintWriter out=response.getWriter();
                        out.println("<a href='../index.jsp'>跳转</a>");

                         或者

                        PrintWriter out=response.getWriter();
                        out.println("<a href='X'>跳转</a>");

      绝对路径:PrintWriter out=response.getWriter();
                        out.println("<a href='/zzzz/index.jsp'>跳转</a>");

                         或者

                       PrintWriter out=response.getWriter();
                       out.println("<a href='/zzzz/servlet/X'>跳转</a>");

B:sendRedirect方法

      相对路径:response.sendRedirect("../index1.jsp")或者response.sendRedirect("X");

      绝对路径:response.sendRedirect("/zzzz/index1.jsp")或者response.sendRedirect("/zzzz/servlet/X");

2、服务器端跳转

     相对路径:request.getRequestDispatcher("../index.jsp").forward(request,response);

                       request.getRequestDispatcher("X").forward(request,response);

                       request.getRequestDispatcher("./X").forward(request,response);

     绝对路径:request.getRequestDispatcher("/index.jsp").forward(request,response)注意:(不是request.getRequestDispatcher("/zzzz/index.jsp").forward(request,response);)

                       request.getRequestDispatcher("/servlet/X").forward(request,response);

                      this.getServletContext().getRequestDispatcher("/index.jsp").forward(request,response);

 

总结:

  1、 绝对路径

              无论是在jsp亦或在servlet中,除了服务器端跳转的绝对路径不用写上/zzzz(项目名)外都是正常的绝对路径

  2、相对路径

              无论是jsp还是servlet中,都是正常的相对路径

3、有意思的是,在jsp中的服务器端跳转时,路径index1.jsp,./index1.jsp,/index1.jsp的效果是一样,前两个是相对路径,第三个是绝对路径

4、注意,这里所说的服务器端跳转不仅仅是用request.getRequestDispatcher().forward()方法,也可以是<jsp:forward  page=""></jsp:forward>

 

你可能感兴趣的:(关于servlet和jsp路径表达方式的不同)