在用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>