一、关于页面跳转的一下几种方法:
package com.gqx.load; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Test extends HttpServlet { /** * 给服务器端使用的: /表示当前web的根目录 (webroot下) * 给浏览器端使用的:/表示在webapps的根目录(webapps下) */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); /** * 转发 */ // request.getRequestDispatcher("/index.jsp").forward(request, response); /** * 请求的重定向 */ // response.sendRedirect("/TestService/index.jsp"); /** * html超链接 */ response.getWriter().write("<html><body><a href='/TestService/index.jsp'>超连接</a></body><html>"); /** * html页面中表单的提交 */ response.getWriter().write("<html><body><form action='/TestService/index.jsp'><input type='submit'/></form></body><html>"); } }
注意:要正确区分浏览器还是服务器端使用“.”符号来获取路径,请求的转发是直接由Servlet实现的,所以是由服务器端来完成的,而重定向是服务器向浏览器发送location和状态码302使浏览器去完成页面的跳转,此时是在浏览器的目录下实现跳转的,同理,表单请求和超链接都是浏览器短的目录,所以要注意点号的不同意义
二、读取服务器端的文件,路径的注意事项:
假设在服务器端设置了一个属性文件,需要读取如图:
属性的内容:
通过简单的文件读取如下:
File file=new File("./src/db.porperties);
我们会发现此时去运行,会发生错误,因为根本找不到文件,究其原因,不难发现,web项目的“.”与java项目的"."所指示的文件目录不同,web目录的“.”代表的是tomcat下的bin目录,此时就无法找到相应的文件和资源,这个时候我们可以用到servletContext下面的方法去获取路径
package com.gqx.load; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.Properties; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 读取web应用下面的资源文件(例如propertis) * @author Administrator * */ public class ResDemo extends HttpServlet { /** * "." 相对于java命令运行的当前路径 * 在java项目中,“.”代表java目录的根目录下开始, * 在web项目中:"."代表当前在tomcat/bin目录下开始,所以不能使用这种相对路径 */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 得到web应用资源下的文件 //方法1、servletContxt中的方法,拿到项目下的文件 // String path=this.getServletContext().getRealPath("/WEB-INF/classes/db.properties"); // File file=new File(path); // System.out.println(file.getAbsolutePath()); // // FileInputStream in=new FileInputStream(file); //方法2、getResourceAsStream() 得到资源文件,返回输入流 InputStream in=this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"); Properties pro=new Properties(); //读取资源文件 pro.load(in); String user=pro.getProperty("user"); String password=pro.getProperty("password"); System.out.println("user="+user); System.out.println("password="+password); } }
这时就会得到相对应的结果: