哪里会用到路径?
转发
用于转发时的调用方法:
servletContext.getRequestDispatcher("路径").forward(request,response);
request.getRequestDispatcher("路径").forward(request,response)
请求重定向
用于请求重定向时的调用方法:
response.sendRedirect("路径");
html页面超链接href
用于页面超链时的写法:
response.getWriter().write("<html><body><a href='路径'>超链接</a></body></html>");
html页面中的form提交地址
表单提交时
response.getWriter().write("<html><body><form action='路径'><input type='submit'/></form></body></html>");
路径使用时需要注意的几点:
- 注意: 在web应用项目中,用到路径时统一用" / "开头
- 思考: 目标资源是给谁使用的
-
给服务器使用的:
转发是服务器将一个请求转发给另一个目标地址.所以是服务器使用 如果是服务器使用," / "代表当前web应用的根目录
-
给浏览器使用的
重定向则是:浏览器发出请求,服务器响应302 + location后,再由浏览器重新发送新的请求到目标地址,所以请求重定向是给浏览器使用的 如果是给浏览器使用," / "表示在webapps的根目录下
资源文件路径问题
错误代码:
File file = new File("./src/db.properties");
FileInputStream in = new FileInputStream(file);
// 创建配置文件对象
Properties prop = new Properties();
// 读取资源文件
prop.load(in);
// 根据属性名获取属性值
String user = prop.getProperty("user");
String pwd = prop.getProperty("password");
问题出在这句代码 : File file = new File("./src/db.properties");
注意:路径: ./src/db.properties"中的" . "(点)
在java项目中,表示相对路径中的当前路径.是相对于java命令运行的目录.
在web项目中,当前应用中的Servlet是在tomcat服务器上运行的,而tomcat服务器是由jvn调用tomcat/bin目录下的startup.bat文件运行的,也就意味意味着java命令是在tomcat/bin目录下调用的,所以".(点)"表示tomcat/bin目录.所以在web项目中用".(点)"是不可靠的
结论 : 在web项目中,".(点)"代表tomcat/bin目录下开始,所以不能使用这种相对路径,在web应用中应该使用web应用下加载资源文件的方式
推荐使用的方法
// 这个方法是
context.getRealPath("路径");
// 获得一个资源文件,返回的是一个输入流
context.getResourceAsStream("路径");
使用案例一
使用getRealPath("路径"); 方法
// 因为在web应用中,src文件夹下的java文件会被编译为class文件存放在/WEB-INF/class/文件夹下
// 所以db.properties文件也会被存放在/WEB-INF/class/文件夹下
// getRealPath()方法会返回一个字符串,代表资源文件在web项目中的绝对路径
String path = this.getServletContext().getRealPath("/WEB-INF/class/db.properties");
File file = new File(path);
FileInputStream in = new FileInputStream(file);
// 创建配置文件对象
Properties prop = new Properties();
// 读取资源文件
prop.load(in);
// 根据属性名获取属性值
String user = prop.getProperty("user");
String pwd = prop.getProperty("password");
使用案例二
使用context.getResourceAsStream("路径"); 方法
Properties prop = new Properties();
// 读取资源文件
prop.load(this.getServletContext().getResourceAsStream("/WEB-INF/class/db.properties"));
// 根据属性名获取属性值
String user = prop.getProperty("user");
String pwd = prop.getProperty("password");
网友评论