电子商务网站开发相关技术,建设局属于什么单位,网页设计师职业要求,怎么做网站站内搜索javaweb有两种方式读取资源文件 在Servlet中读取#xff0c;可以使用servletContext#xff0c;servletContext可以拿到web所有的资源文件#xff0c;然后随便读#xff0c;但是这种方法不常用#xff0c;尽量少在Servlet中读取资源文件 在普通Java类中#xff08;DAO中可以使用servletContextservletContext可以拿到web所有的资源文件然后随便读但是这种方法不常用尽量少在Servlet中读取资源文件 在普通Java类中DAO中使用类加载器来读 和 绝对路径来读取 类装载器可以访问的范围是classes文件夹下的文件 src文件夹下面的文件在发布之后都会在classes文件夹下也就是整个类加载器都可以通过类加载器来操作 1. 使用servletContext 软件开发中用作资源文件配置文件的文件类型有两种xml文件和properties文件 比如新建一个properties文件用作数据库的配置 urljdbc\:mysql\://localhost\:3006/test
usernametest
password123 然后在Servlet中读取文件 public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {InputStream instream this.getServletContext().getResourceAsStream(/WEB-INF/classes/db.propertites); Properties pro new Properties(); //mappro.load(instream);String url pro.getProperty(url);String username pro.getProperty(username);System.out.println(url);System.out.println(username);} 其中路径不能写成/src/db.propertites / 表示当前web程序 因为最终读取的是发布在服务器中的文件。都是在classes文件夹下面 对于properties文件的操作都可以使用properties这个类 这个类是把文件中的数据以map形式存储 有几行就会有几个元素 注意 我们在写Java的时候常用下面这种方式读取文件但是在javaweb中是不行的 public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {FileInputStream instream new FileInputStream(/WEB-INF/classes/db.propertites); Properties pro new Properties(); //mappro.load(instream);String url pro.getProperty(url);String username pro.getProperty(username);System.out.println(url);System.out.println(username);} FileInputStream instream new FileInputStream(/WEB-INF/classes/db.propertites); 考虑清楚这个相对路径是相对谁的。 这句话是由服务器来调用服务器由Java虚拟机来运行所以这个是相对Java虚拟机的启动目录 Java虚拟机的目录是 我们启动服务器都是在C:\tomcat\bin目录下的startup.bat启动的时候同时启动虚拟机 所以是相对的是这个目录。。 所以在javaweb中读取文件用Servlet不能使用这种方式这种方式必须把文件放在Java虚拟机目录下 传统方式也不是不可行必须要知道文件的绝对路径 使用servletContext先得到文件在磁盘的绝对路径。 public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String path this.getServletContext().getRealPath(/WEB-INF/classes/db.propertites)FileInputStream instream new FileInputStream(path); Properties pro new Properties(); //mappro.load(instream);String url pro.getProperty(url);String username pro.getProperty(username);System.out.println(url);System.out.println(username);} 这中方式可以得到该文件的名称。 因为有时间文件名称是客户机传过来的开发者需要知道 就需要截取path字符串了。 path.substring(path.lastIndexOf(\\) 1) 2. 使用类装载器 对数据库配置文件的读取一般是不放在servlet中的一般是放在DAO类中 这样才能把web层和数据层分开来 类装载器 Java虚拟机使用每一个类的第一件事情就是将该类的字节码装载近来装载类字节码的功能是由类装载器完成的类装载器负责根据一个类的名称来定位和生成类的字节码数据后返回给Java虚拟机。最常见的类装载器是将要加载的类名转换成一个.class文件名然后从文件系统中找到该文件并读取其中的内容这种类装载器也不是直接将.class文件中的内容原封不动地返回给Java虚拟机它需要将.class文件中的内容转换成Java虚拟机使用的类字节码。不管类装载器采用什么方式只要能够在内存中制造出给Java虚拟机调用类字节码即可所以把类装载器描述为类字节码的制造器更容易让人理解。 public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {userDAO dao new userDAO();dao.update();} public class userDAO {public void update() throws IOException {InputStream instream userDAO.class.getClassLoader().getResourceAsStream(db.propertites); Properties pro new Properties(); //mappro.load(instream);String url pro.getProperty(url);String username pro.getProperty(username);System.out.println(url);System.out.println(username);}} 其中userDAO.class.getClassLoader 得到类装载器 因为他们都是在Classes文件夹下面所以可以访问到该文件 由于对数据库的操作方法有很多不能每个方法里面都写这种所以可以使用静态代码块的方式。 public class userDAO {private static Properties dbconfig new Properties();static{try {InputStream instream userDAO.class.getClassLoader().getResourceAsStream(db.propertites);dbconfig.load(instream);} catch (Exception e) {throw new ExceptionInInitializerError(e);}}public void update() throws IOException { System.out.println(dbconfig.getProperty(url)); }public void find() throws IOException { }public void delete() throws IOException { }} 使用类装载器读取文件的弊端 1.文件不能太大因为它是以装载类的方式一次性加入内存中 2.类装载器只会加载一次就是说不能显示文件的更新操作 3.使用绝对路径读取 如果需要读到实时数据就不能通过类装载器来读文件需要通过普通的文件路径的方式 还是要通过类装载的方式来得到文件的位置 public class DAO {public void update() throws IOException{String path DAO.class.getClassLoader().getResource(db.properties).getPath();FileInputStream in new FileInputStream(path);Properties pros new Properties();pros.load(in);String url pros.getProperty(url); }} 转载于:https://www.cnblogs.com/tech-bird/p/3843832.html