贴一段代码:
/**
* 可以跳到
1. * request.getRequestDispatcher("/index.jsp").forward(request, response);
*/
/**
* 可以跳到
2. * request.getRequestDispatcher("/WEB-INF/jsp/jsp1.jsp").forward(request, response);
*/
/**
* 可以跳到
3. * response.sendRedirect("/Onlydemo/index.jsp");
*/
/**
4. * 不是web-inf下面的Jsp。可以跳到
* response.sendRedirect("/Onlydemo/jsp/jsp1.jsp");
*/
//为什么不可以直接访问它?这个问题就是第一段话
/**
5. * 不能直接访问到web-inf下面的Jsp页面,跳不过去
* response.sendRedirect("/Onlydemo/WEB-INF/jsp/jsp1.jsp");
*/
1.借用其他朋友的一段话:
应用服务器把WEB-INF指为禁访目录,即直接在浏览器里是不能访问的。
2.getRequestDispatcher(String path)方法
作用:返回一个ServletRequest对象。这个我们并不关心
使用:该路径必须以一个"/"开头,且作为相关的当前上下文根目录来解释
我的理解是:
就类似于我们写了Onlydemo这个工程,在这个工程下面找东西而已。系统已经为我们添加了前缀
就是:http://localhost:8081/Onlydemo
3.sendDirect()方法
作用:重定向即访问一个页面。前面一般加上"/"
我的理解是:系统为我们添加的前缀是:http://localhost:8081
好了,分析完直接看实验吧!
第一个实验:index.jsp是直接放在最外边的一个jsp页面,可以转发过去
第二个实验:jsp1.jsp是位于web-inf目录下的jsp下的jsp页面。可以转发过去
第三个实验:index.jsp是直接放在最外边的一个jsp页面,可以重定向访问过去
第四个实验:jsp1.jsp是jsp文件夹下的一个jsp页面,可以重定向访问过去
第五个实验:sp1.jsp是位于web-inf目录下的jsp下的jsp页面。不能重定向访问,这也符合朋友说的话
还有一个疑点:
就是action中的值
可以是相对路径,也可以是绝对路径。但是只要加了basePath的话,那就是相对于web项目的路径了