Web资源文件的加载

时间:2024-11-28 13:33:38

一、关于页面跳转的一下几种方法:

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使浏览器去完成页面的跳转,此时是在浏览器的目录下实现跳转的,同理,表单请求和超链接都是浏览器短的目录,所以要注意点号的不同意义


二、读取服务器端的文件,路径的注意事项:

假设在服务器端设置了一个属性文件,需要读取如图:

Web资源文件的加载

属性的内容:Web资源文件的加载

通过简单的文件读取如下:

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);
	}
}

这时就会得到相对应的结果:

Web资源文件的加载