- 在看DRP项目的时候一边看视频一边写代码,其中,涉及到了很多实用的知识点,这些可能是作为一个开发人员或设计人员必须熟悉掌握的东西,无论水平如何还是需要了解了解,因此,拿出来总结一下或多或少加深理解和熟练程度,也是作为积累和收获。
- 在Java里面各种设置都变得非常灵活这在很多的配置文件里面就可以看出来,但是配置文件里面信息多了也给解析XML文件带来了麻烦,所以,在Java中有很多专门用于解析文件的组件,只要你对DOM模型有些基础便可以轻松的完成解析工作。
- 下面将主要说一下文件的配置和解析,常用的工具。
- Dom4j读取XML文件
- dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的,如今你可以看到越来越多的Java软件都在使用dom4j来读写XML。
- 它的网站中这样定义:Dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP.
- 解析配置文件
- 配置文件信息,sys-config.xml
<?xml version="1.0" encoding="UTF-8"?> <config> <!-- 标签 --> <db-info> <!-- JDBC数据库参数 --> <driver-name>oracle.jdbc.OracleDriver</driver-name> <url>jdbc:oracle:thin:@localhost:1521:ORCL</url> <user-name>drp1</user-name> <password>drp1</password> </db-info> </config>
- 解析代码
/** * 使用dom4j从配置文件里读取数据 */ private xmlConfigReader(){ //SAXReader类的read()方法可以读入输入信息,建立一个SAXReader对象 SAXReader reader=new SAXReader(); //通过当前线程类的加载器,来获得引用资源文件的相对路径,读入缓冲输入流 InputStream in=Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml"); try{ //从输入流中读取信息 Document doc=reader.read(in); //取得jdbc相关配置信息 Element driverNameEle=(Element)doc.selectObject("/config/db-info/driver-name"); Element urlNameEle=(Element)doc.selectObject("/config/db-info/url"); Element userNameEle=(Element)doc.selectObject("/config/db-info/user-name"); Element passwordEle=(Element)doc.selectObject("/config/db-info/password"); //设置jdbc相关配置信息 jdbcConfig.setDriverName(driverNameEle.getStringValue()); jdbcConfig.setUrlName(urlNameEle.getStringValue()); jdbcConfig.setUserName(userNameEle.getStringValue()); jdbcConfig.setpassword(passwordEle.getStringValue()); }catch(DocumentException e){ e.printStackTrace(); } }
a.关于
Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml");详细解释请点击这里:http://stackoverflow.com/questions/676250/different-ways-of-loading-a-file-as-an-inputstream,虽然是英文当解释的很好。
- 当然这只是一个非常简单的读取文件,想要解析更复杂的文件,可以自己查看dom4j-api文档,它提供了非常多的API供使用,可以完成你所有的解析任务,想要了解更多可以自己查API。
- 配置文件信息,sys-config.xml
- 文件上传
- 文件上传是一个Web项目中不可缺少的一项基本功能,几乎所有系统都会用到这个上传服务,提供上传的很多组件已经由第三方写好,都是一些成品构建,不需要我们自己开发,我们这里利用完成Apache Commons fileupload上传。
- 上传示例
- 代码如下:
//文件的上传路径 private File uploadPath; //临时保存路径 private File tempPath; public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { DiskFileItemFactory factory = new DiskFileItemFactory(); // maximum size that will be stored in memory factory.setSizeThreshold(4096); // the location for saving data that is larger than getSizeThreshold() factory.setRepository(tempPath); ServletFileUpload upload = new ServletFileUpload(factory); // maximum size before a FileUploadException will be thrown upload.setSizeMax(1000000 * 20); try { List fileItems = upload.parseRequest(req); for (Iterator iter = fileItems.iterator(); iter.hasNext();) { FileItem item = (FileItem) iter.next(); //是否为input="type"输入域 if (!item.isFormField()) { String fileName = item.getName(); long size = item.getSize(); if ((fileName == null || fileName.equals("")) && size == 0) { continue; } //截取字符串 如:C:WINDOWSDebugPASSWD.LOG fileName = fileName.substring(fileName.lastIndexOf("\") + 1, fileName.length()); //item.write(new File(uploadPath + itemNo + ".gif")); item.write(new File(uploadPath, fileName)); //调用网数据库里面写东西的代码 } } } catch (Exception e) { e.printStackTrace(); } } public void init() throws ServletException { uploadPath = new File(getServletContext().getRealPath("upload")); System.out.println("uploadPath=====" + uploadPath); //如果目录不存在 if (!uploadPath.exists()) { //创建目录 uploadPath.mkdir(); } //临时目录 tempPath = new File(getServletContext().getRealPath("temp")); if (!tempPath.exists()) { tempPath.mkdir(); } //显示调用父类的初始化方法 super.init(); }
- 配置文件的配置,如Web.XML,下面分别是各种需求的配置
- Servlet以及初始化参数
-
<!--设置物料查询Servlet--> <servlet> <servlet-name>SearchItemServlet</servlet-name> <servlet-class>com.bjpowernode.drp.basedata.web.SearchItemServlet</servlet-class> <init-param> <param-name>page-size</param-name> <param-value>3</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>SearchItemServlet</servlet-name> <url-pattern>/servlet/item/SearchItemServlet</url-pattern> </servlet-mapping>
-
- Filter过滤器
<servlet> <servlet-name>FileUploadServlet</servlet-name> <servlet-class>com.bjpowernode.drp.basedata.web.FileUploadServlet</servlet-class> <load-on-startup>10</load-on-startup> </servlet> <servlet-mapping> <servlet-name>FileUploadServlet</servlet-name> <url-pattern>/servlet/item/FileUploadServlet</url-pattern> </servlet-mapping>
- Exception异常类
<error-page> <exception-type>com.bjpowernode.drp.util.ApplicationException</exception-type> <location>/error.jsp</location> </error-page>
-
Error page
-
<error-page> <error-code>404</error-code> <location>/http_error.jsp</location> </error-page>
-
- Servlet以及初始化参数
- 另外,还有很多需要了解以及需要深入研究的东西,这些只是开发项目中最基本的简单设置,随着项目的复杂各种配置也会变得复杂,还需要设计人员有一个清晰的架构。