关于jsp中路径问题
一、不同目录下的不同路径
这个叫做web服务器的根路径
这个叫做项目的根路径
webRoot目录下所有的文件相当于在项目的根路径下
servlet文件的配置的url-pattern 的第一个字符必须是”/”,决定了它也在项目的根路径下,如果配置的路径中有文件夹,则依据文件夹的多少顺序分别为各级别目录,如上图中的my就是在项目根路径下的servlet文件夹下。
如:index.jsp文件相当于在项目pathdemo的根路径下,下面这种写法是正确的。http://localhost:8080/pathdemo/index.jsp
如:servlet 定义的文件:<url-pattern>/servlet/my</url-pattern>
相当于项目的根路径“http://localhost:8080/pathdemo/”下有一个文件夹servlet,servlet文件夹下有一个文件“my”。所以可以表示为
http://localhost:8080/pathdemo/servlet/my
二、调用时如何写路径才正确
- 表单中action=””路径
如果表单中有action 要调用一个servlet叫“your”.它们位于同一目录下,直接写成action=”your”即可,这是相对路径。能用相对路径就用相对路径,短小,字符少。易理解。
如上图,如果action要调用“my”,相对路径写就是:action=”servlet/my”。
- servlet中重定向的路径(相当于从项目外部重新发出请求)
重定向的路径要写绝对路径,相当于从项目外部重新发出的请求。
request.getContextPath() 表示项目的根路径
重定向到index.jsp,用下述语句即可
response.sendRedirect(request.getContextPath()+"/index.jsp");
- servlet中转发(跳转)的路径(相当于从项目内部跳转到另一个页面)
//转发 第一个/表示是项目名称的根路径
下面是转发语由于转发语句是从项目内部跳转到项目内部的其它文件,所以可以写成: request.getRequestDispatcher("/index.jsp").forward(request, response);
可以看出转发的第一字符如果是“/”代表了项目的根的路径,这是一种绝对路径的写法。
特别注意的是:当前这一条语句所在的servlet文件的当前目录是哪一级。如果在根路径下,转发到根路径下,可以用相对路径的写法:request.getRequestDispatcher("index.jsp").forward(request, response);这里省略了第一个“/”。如果在根路径下某个文件夹下,也就是说该servlet文件与转发的文件不在同一个目录下,一般不用相对路径。如定义的时候: <url-pattern>/servlet/my</url-pattern>
转发到index.jsp,写相对路径不好写,就写绝对路径。
request.getRequestDispatcher("/index.jsp").forward(request, response);
- 转发到其它的servlet文件
一定根据当前所处的目录,与要转发的目录,一般同级目录与下级目录写相对路径。否则写绝对路径好。
如果重定向,一定用绝对路径。