访问文件: http://localhost:8080/filter/login.jsp
工程名为filter
请求转发
request.getRequestDispatcher("/filter/login.jsp").forward(request, response);请求转发这么写就会报错,
请求转发不能写全路径。
浏览器解析到工程下的web目录,所以/filter工程名就不需要写了。斜杠就代表到了web目录。
request.getRequestDispatcher("/");要写斜杠,不写就会报错。 请求转发浏览器解析到工程下的web目录。相当于http://localhost:8080/工程名/web/
请求转发如果不写“/”,则表示相对路径,映射到当前资源所在路径,可以访问当前资源所在路径同一文件夹下的所有文件。
重定向
response.sendRedirect("/filter/login.jsp");重定向可以写全路径,但是不能写“/文件名”
response.sendRedirect("/login.jsp");重定向这样是错的。但是请求转发可以。
重定向映射到端口号,不包括工程名.
重定向相当于浏览器重新访问地址,所以说相当于访问的地址栏是空的,只映射到主机名和端口号,所以支持全路径或者省略主机名和端口,用“/”来省略主机名和端口号。
重定向如果不写“/”,则表示相对路径,映射到当前资源所在路径,可以访问当前资源所在路径同一文件夹下的所有文件。这点与请求转发一致。
请求转发是浏览器的一次请求,映射到主机名+端口号+工程名下的web文件夹,所以可以省略到web文件夹,用“/”来省略。请求转发不可以使用全路径,否则会在原来web目录下的资源路径后加上你要访问的全路径地址,就会找不到而报错。
比如想访问web下的login.jsp文件,如果在web/admin/a.jsp中写上request.getRequestDispatcher("/index.jsp"),那么是可以的。
但是如果在web.admin/a.jsp中写上request.getRequestDispatcher(“http://localhost:8080/filter/login.jsp”),写上了全路径,那么就会找不到路径。浏览器上会显示 /filter/admin/http://localhost:8080/filter/login.jsp 这样的路径,可以看出正如分析的那样,会在原来资源名的路径后面在加上我们要访问的全路径,所以就会报错。
超链接a标签
方式一:a标签浏览器解析到主机名和端口号。用“/”来省略主机名和端口号。
方式四:a标签浏览器解析到主机名+端口号+工程名下的web文件夹,不可以用“/”来省略。
方式二:a标签浏览器解析到主机名+端口号+工程名+该资源所在文件地址。但是不可以用“/”来省略,可以访问该资源所在文件地址同文件夹下的所有资源。
方式三:a标签可以直接输入全路径访问文件资源。
以上结论都通过验证,如有问题,欢迎讨论指正!