1."/"的使用:
给服务器使用: “/” 表示在当前web应用的根目录(tomcat里面的指定项目中webRoot下)
给浏览器使用: “/” 表示在webapps的根目录下
2.查询流程:
给浏览器使用
例子: url=/W项目名/资源名
先定位"/“然后定位项目名;之后到web.xml中寻找是否有url-pattern的值为"资源名”,如果有,定位到对应的Servlet;
如果没有,到webRoot根目录下找有没有对应的资源名;如果有,定位,如果没有就报404错误;
给浏览器使用:
例子:url=/资源名
在本项目web.xml中寻找是否有url-pattern的值为"资源名",如果有,定位到对应的Servlet;
如果没有,到webRoot根目录下找有没有对应的资源名;如果有,定位,如果没有就报404错误;
3.具体问题分析:
- 转发:
request.getRequestDispatcher("/target.html").forward(request, response);
转发是服务器内部的跳转,"/"是给服务器使用的,表示当前web应用的根目录,这句代码的含义是:转发到webRoot/target.html
2)重定向
重定向是服务器给浏览器发送响应之后,浏览器根据响应头中附带location再次请求新页面的过程.这个地址是给浏览器用的:
例子:response.sendRedirect("/Web_demo/target.html");
由于webapps的根目录有多个项目,所以需要指定具体的项目名;
3)html页面的超连接href
例子:
response.getWriter().write("<html><body><a href='/Web_demo/target.html'>超链接</a></body></html>)
由于超链接是给浏览器使用,所以"/"表示webapps根目录下
- html页面中的form提交地址
response.getWriter().write(")
同上
4 读取web应用下的资源文件
1)"."的使用
“.” 代表java命令运行目录。
在java项目中,java命令运行目录就是根目录
在javaweb项目中java命令运行目录在tomcat/bin目录下(Servlet在服务器上运行,而打开服务器的文件startup.bat在bin目录下)
结论: 在web项目中, . 代表在tomcat/bin目录下开始,所以不能使用这种相对路径。
2)getRealPath
getRealPath读取,自动定位到本项目中的WebRoot根目录,返回资源文件的绝对路径,
String path = this.getServletContext().getRealPath("/WEB-INF/classes/db.properties");
3). getResourceAsStream()
getResourceAsStream得到资源文件,自动定位到本项目中的WebRoot根目录,返回的是输入流
InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
Properties prop = new Properties();
prop.load(in);
5 读取web应用工程名
getContextPath():
获取的是本工程名