湛江网站建设招聘,国内网站要备案,温州网页制作设计营销,网站网站建设的原则有哪些一、Java 开发效率之困
在当今数字化时代#xff0c;Java 作为一门广泛应用的编程语言#xff0c;在各类软件开发项目中占据着举足轻重的地位。无论是大型企业级应用、互联网平台#xff0c;还是移动应用后端#xff0c;都能看到 Java 的身影。然而#xff0c;Java 开发者…一、Java 开发效率之困
在当今数字化时代Java 作为一门广泛应用的编程语言在各类软件开发项目中占据着举足轻重的地位。无论是大型企业级应用、互联网平台还是移动应用后端都能看到 Java 的身影。然而Java 开发者们在享受其强大功能与稳定性的同时也常常面临开发效率方面的挑战。
在实际开发过程中我们经常会遇到一些看似基础却又繁琐的任务。以字符串处理为例判断一个字符串是否为空或仅包含空格在 Java 标准库中我们需要编写如下代码
String str ;if (str null || str.trim().length() 0) {// 处理空字符串情况}
这段代码虽然不难理解但每次都要编写这样的判断逻辑无疑增加了开发的工作量。再如日期操作计算两个日期之间的天数差使用 Java 标准库需要涉及到复杂的Calendar类操作代码如下 import java.util.Calendar;Calendar calendar1 Calendar.getInstance();calendar1.set(2023, 10, 1);Calendar calendar2 Calendar.getInstance();calendar2.set(2023, 10, 10);long timeDiff Math.abs(calendar2.getTimeInMillis() - calendar1.getTimeInMillis());int daysDiff (int) (timeDiff / (1000 * 60 * 60 * 24));
这段代码不仅冗长而且容易出错。这些问题的存在不仅降低了开发效率还增加了代码出错的风险。为了解决这些问题开发者们往往需要寻找更高效的解决方案。而 Apache Commons Lang 工具库正是这样一个能帮助我们提升 Java 开发效率的利器。
二、Apache Commons Lang 初相识
Apache Commons Lang 是 Apache Commons 项目家族中的重要成员这个项目专注于为 Java 开发者提供一系列实用的工具类旨在增强 Java 核心类库的功能。它就像是一个精心打造的工具百宝箱里面装满了各种能让开发工作变得更加轻松高效的工具。
该工具库的诞生源于 Java 开发者在日常编码中反复遇到的一些繁琐问题。例如在处理字符串、日期、数组等常见数据类型时Java 标准库提供的功能有时显得不够便捷开发者往往需要编写大量重复的样板代码。Apache Commons Lang 的出现很好地解决了这些问题。它通过提供一系列功能强大且易用的工具类让开发者能够用更简洁的代码完成复杂的任务从而大大减少了样板代码的编写量提升了开发效率。
在业界Apache Commons Lang 得到了极为广泛的应用。众多知名的开源项目和企业级应用都依赖于它来简化开发过程。许多大型互联网公司在其核心业务系统中大量使用 Apache Commons Lang以提高系统的开发效率和稳定性。它已经成为 Java 开发领域中不可或缺的一部分为无数开发者节省了大量的时间和精力。
三、引入 Lang 库开启高效之旅
在使用 Apache Commons Lang 库之前我们需要先将其引入到项目中。在 Java 项目中引入依赖通常通过构建工具来完成常见的构建工具如 Maven 和 Gradle下面将分别介绍如何使用这两种工具引入 Apache Commons Lang 库。
Maven 引入方式
如果你的项目使用 Maven 进行构建那么在项目的pom.xml文件中添加如下依赖 dependenciesdependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion3.12.0/version/dependency/dependencies
在上述代码中groupId指定了库的组织 IDorg.apache.commons表示这是 Apache Commons 项目下的库。artifactId指定了库的名称这里是commons-lang3表示我们引入的是 Apache Commons Lang 库的第 3 版。version指定了库的版本号3.12.0是当前的一个较新版本你可以根据实际需求替换为其他版本。
添加完依赖后保存pom.xml文件Maven 会自动下载指定版本的 Apache Commons Lang 库及其依赖项。如果在项目中使用了 Maven 的mvn clean install或mvn clean compile等命令Maven 会在构建过程中自动处理依赖关系确保库被正确引入到项目中。
Gradle 引入方式
若项目使用 Gradle 进行构建在项目的build.gradle文件中添加如下依赖 dependencies {implementation org.apache.commons:commons-lang3:3.12.0}
在这段代码中implementation表示依赖的范围它确保该依赖在编译和运行时都可用。org.apache.commons:commons-lang3:3.12.0指定了依赖的坐标与 Maven 中的groupId、artifactId和version相对应。
同样保存build.gradle文件后Gradle 会在项目构建时自动下载并引入指定版本的 Apache Commons Lang 库。如果在 Gradle 中使用了gradle build等构建命令Gradle 会根据配置的依赖关系进行处理。
通过以上两种方式我们就可以将 Apache Commons Lang 库引入到 Java 项目中为后续使用其强大的功能奠定基础。
四、核心功能大揭秘
一字符串处理得心应手
在 Java 开发中字符串处理是极为常见的操作而StringUtils类则是 Apache Commons Lang 库中处理字符串的得力助手。它提供了一系列丰富且实用的方法大大简化了字符串处理的过程。
判断字符串是否为空是一个常见需求。使用StringUtils类的isEmpty方法我们可以轻松实现这一判断。例如 import org.apache.commons.lang3.StringUtils;public class StringUtilsDemo {public static void main(String[] args) {String str1 null;String str2 ;String str3 ;String str4 Hello;System.out.println(StringUtils.isEmpty(str1)); // 输出: trueSystem.out.println(StringUtils.isEmpty(str2)); // 输出: trueSystem.out.println(StringUtils.isEmpty(str3)); // 输出: falseSystem.out.println(StringUtils.isEmpty(str4)); // 输出: false}}
在上述代码中StringUtils.isEmpty方法能够准确判断字符串是否为空包括null值和空字符串并且对仅包含空格的字符串也能正确处理。
去除字符串两端的空白字符也是经常会用到的操作。利用StringUtils类的trim方法能轻松实现这一功能示例代码如下 import org.apache.commons.lang3.StringUtils;public class StringUtilsTrimDemo {public static void main(String[] args) {String str Hello World ;String trimmedStr StringUtils.trim(str);System.out.println(trimmedStr); // 输出: Hello World}}
这里StringUtils.trim方法将字符串str两端的空白字符去除得到了干净的字符串Hello World。
若要反转字符串StringUtils类的reverse方法能派上用场。如下代码展示了如何使用该方法 import org.apache.commons.lang3.StringUtils;public class StringUtilsReverseDemo {public static void main(String[] args) {String str Hello;String reversedStr StringUtils.reverse(str);System.out.println(reversedStr); // 输出:olleH}}
通过StringUtils.reverse方法字符串Hello被成功反转成olleH。
判断一个字符串是否全部由数字组成在数据校验等场景中非常重要。StringUtils类的isNumeric方法可以帮助我们实现这一判断示例如下 import org.apache.commons.lang3.StringUtils;public class StringUtilsIsNumericDemo {public static void main(String[] args) {String str1 12345;String str2 123a45;System.out.println(StringUtils.isNumeric(str1)); // 输出: trueSystem.out.println(StringUtils.isNumeric(str2)); // 输出: false}}
在这段代码中StringUtils.isNumeric方法准确判断出str1全部由数字组成而str2包含非数字字符。
二数字操作精准高效
在涉及数字处理的场景中NumberUtils类提供了诸多实用功能让数字操作变得更加简单高效。
判断一个字符串是否可以转换为数字是常见的需求。使用NumberUtils类的isCreatable方法可以轻松实现这一判断。例如 import org.apache.commons.lang3.math.NumberUtils;public class NumberUtilsIsCreatableDemo {public static void main(String[] args) {String str1 123;String str2 abc;System.out.println(NumberUtils.isCreatable(str1)); // 输出: trueSystem.out.println(NumberUtils.isCreatable(str2)); // 输出: false}}
上述代码中NumberUtils.isCreatable方法能够准确判断出字符串str1可以转换为数字而str2无法转换。
将字符串转换为数字类型在数据处理中经常会用到。NumberUtils类提供了多种方法来满足这一需求如toInt、toLong、toDouble等。以下代码展示了如何将字符串转换为整数 import org.apache.commons.lang3.math.NumberUtils;public class NumberUtilsToIntDemo {public static void main(String[] args) {String str 123;int num NumberUtils.toInt(str);System.out.println(num); // 输出: 123}}
这里NumberUtils.toInt方法将字符串str成功转换为整数类型。
在处理多个数字时求这些数字中的最大值和最小值是常见的操作。NumberUtils类的max和min方法可以方便地实现这一功能。例如 import org.apache.commons.lang3.math.NumberUtils;public class NumberUtilsMaxMinDemo {public static void main(String[] args) {int num1 10;int num2 20;int num3 15;int maxNum NumberUtils.max(num1, num2, num3);int minNum NumberUtils.min(num1, num2, num3);System.out.println(最大值: maxNum); // 输出: 最大值: 20System.out.println(最小值: minNum); // 输出: 最小值: 10}}
在这段代码中NumberUtils.max方法找出了num1、num2、num3中的最大值NumberUtils.min方法找出了最小值。
三对象处理轻松应对
ObjectUtils类为对象处理提供了一系列便捷的方法在日常开发中非常实用。
判断一个对象是否为空是避免空指针异常的重要步骤。使用ObjectUtils类的isEmpty方法可以简洁地判断对象是否为空。例如 import org.apache.commons.lang3.ObjectUtils;public class ObjectUtilsIsEmptyDemo {public static void main(String[] args) {Object obj1 null;Object obj2 new Object();System.out.println(ObjectUtils.isEmpty(obj1)); // 输出: trueSystem.out.println(ObjectUtils.isEmpty(obj2)); // 输出: false}}
在上述代码中ObjectUtils.isEmpty方法准确判断出obj1为空对象而obj2不为空。
在某些情况下我们需要获取一个非空的对象如果原对象为空则返回一个默认值。ObjectUtils类的defaultIfNull方法可以满足这一需求。例如 import org.apache.commons.lang3.ObjectUtils;public class ObjectUtilsDefaultIfNullDemo {public static void main(String[] args) {Object obj1 null;Object defaultValue new Object();Object result ObjectUtils.defaultIfNull(obj1, defaultValue);System.out.println(result! null); // 输出: true}}
这里ObjectUtils.defaultIfNull方法在obj1为空时返回了默认值defaultValue。
比较两个对象是否相等也是常见的操作。ObjectUtils类的equals方法可以帮助我们实现这一比较并且它对null值进行了安全处理。例如 import org.apache.commons.lang3.ObjectUtils;public class ObjectUtilsEqualsDemo {public static void main(String[] args) {Object obj1 Hello;Object obj2 Hello;Object obj3 null;System.out.println(ObjectUtils.equals(obj1, obj2)); // 输出: trueSystem.out.println(ObjectUtils.equals(obj1, obj3)); // 输出: false}}
在这段代码中ObjectUtils.equals方法正确判断出obj1和obj2相等而obj1和obj3不相等。
四数组操作灵活多样
在处理数组时ArrayUtils类提供了丰富的方法使数组操作变得更加灵活和高效。
判断一个数组是否为空是常见的操作。使用ArrayUtils类的isEmpty方法可以方便地判断数组是否为空。例如 import org.apache.commons.lang3.ArrayUtils;public class ArrayUtilsIsEmptyDemo {public static void main(String[] args) {String[] arr1 null;String[] arr2 {};String[] arr3 {Hello, World};System.out.println(ArrayUtils.isEmpty(arr1)); // 输出: trueSystem.out.println(ArrayUtils.isEmpty(arr2)); // 输出: trueSystem.out.println(ArrayUtils.isEmpty(arr3)); // 输出: false}}
上述代码中ArrayUtils.isEmpty方法能够准确判断出arr1和arr2为空数组而arr3不为空。
反转数组的顺序在某些算法和数据处理场景中非常有用。ArrayUtils类的reverse方法可以轻松实现数组的反转。例如 import org.apache.commons.lang3.ArrayUtils;public class ArrayUtilsReverseDemo {public static void main(String[] args) {int[] arr {1, 2, 3, 4, 5};int[] reversedArr ArrayUtils.reverse(arr);for (int num : reversedArr) {System.out.print(num ); // 输出: 5 4 3 2 1}}}
这里ArrayUtils.reverse方法将数组arr的顺序成功反转。
向数组中添加元素是数组操作的常见需求。ArrayUtils类的add方法可以在数组的指定位置添加一个元素。例如 import org.apache.commons.lang3.ArrayUtils;public class ArrayUtilsAddDemo {public static void main(String[] args) {String[] arr {Hello, World};String[] newArr ArrayUtils.add(arr, 1, Java);for (String str : newArr) {System.out.print(str ); // 输出: Hello Java World}}}
在这段代码中ArrayUtils.add方法在数组arr的索引 1 处添加了元素Java生成了新的数组newArr。
五日期处理简单便捷
在处理日期相关的业务逻辑时DateUtils类提供了一系列实用的方法大大简化了日期操作的复杂度。
对日期进行加减操作是常见的需求。例如计算某个日期加上或减去一定天数后的日期。使用DateUtils类的addDays和subtractDays方法可以轻松实现这一功能。以下代码展示了如何计算当前日期加上 5 天后的日期 import org.apache.commons.lang3.time.DateUtils;import java.util.Date;public class DateUtilsAddDaysDemo {public static void main(String[] args) throws Exception {Date currentDate new Date();Date newDate DateUtils.addDays(currentDate, 5);System.out.println(newDate);}}
在上述代码中DateUtils.addDays方法将当前日期currentDate加上 5 天得到了新的日期newDate。
比较两个日期的先后顺序在日期相关的业务逻辑中非常重要。DateUtils类的compare方法可以方便地比较两个日期的大小。例如 import org.apache.commons.lang3.time.DateUtils;import java.util.Date;public class DateUtilsCompareDemo {public static void main(String[] args) throws Exception {Date date1 new Date();Date date2 DateUtils.addDays(date1, 3);int result DateUtils.compare(date1, date2);if (result 0) {System.out.println(date1早于date2);} else if (result 0) {System.out.println(date1晚于date2);} else {System.out.println(date1等于date2);}}}
这里DateUtils.compare方法比较了date1和date2的大小并根据比较结果输出相应的信息。
将日期格式化为指定的字符串形式也是常见的操作。DateUtils类结合SimpleDateFormat类可以实现日期的格式化。例如将日期格式化为yyyy - MM - dd的形式示例代码如下 import org.apache.commons.lang3.time.DateUtils;import java.text.SimpleDateFormat;import java.util.Date;public class DateUtilsFormatDemo {public static void main(String[] args) throws Exception {Date date new Date();SimpleDateFormat sdf new SimpleDateFormat(yyyy - MM - dd);String formattedDate sdf.format(date);System.out.println(formattedDate);}}
在这段代码中通过SimpleDateFormat类将日期date格式化为yyyy - MM - dd形式的字符串formattedDate。
五、实际案例看效果
为了更直观地感受 Apache Commons Lang 工具库对 Java 开发效率的提升我们来看一个电商系统开发的实际案例。
在电商系统中用户注册登录功能是基础且重要的部分。在验证用户输入的用户名和密码时需要进行字符串的非空校验。使用 Apache Commons Lang 的StringUtils类代码如下 import org.apache.commons.lang3.StringUtils;public class UserRegistration {public static boolean validateUsername(String username) {return!StringUtils.isEmpty(username);}public static boolean validatePassword(String password) {return!StringUtils.isEmpty(password) password.length() 6;}}
上述代码中validateUsername方法使用StringUtils.isEmpty方法快速判断用户名是否为空validatePassword方法不仅判断密码是否为空还检查了密码长度是否至少为 6 位。这种方式相比使用 Java 标准库代码更加简洁明了。
订单数据处理是电商系统的核心环节之一。在计算订单总金额时可能涉及到多个价格的数字计算。利用NumberUtils类示例代码如下 import org.apache.commons.lang3.math.NumberUtils;public class OrderCalculation {public static double calculateTotalPrice(String[] prices) {double total 0;for (String price : prices) {if (NumberUtils.isCreatable(price)) {total NumberUtils.toDouble(price);}}return total;}}
在这段代码中calculateTotalPrice方法首先使用NumberUtils.isCreatable方法判断字符串是否可以转换为数字然后使用NumberUtils.toDouble方法将字符串转换为双精度浮点数进行累加实现了订单总金额的计算。
在商品信息管理模块需要对商品对象进行各种操作。例如判断商品对象是否为空使用ObjectUtils类的代码如下 import org.apache.commons.lang3.ObjectUtils;public class ProductManagement {public static boolean isProductValid(Product product) {return!ObjectUtils.isEmpty(product);}}class Product {// 商品类的属性和方法}
这里isProductValid方法通过ObjectUtils.isEmpty方法判断商品对象是否为空确保商品信息的有效性。
在展示订单列表时需要对订单数组进行处理。比如对订单按照时间进行排序后可能需要反转订单数组的顺序以最新的订单排在前面。使用ArrayUtils类的代码如下 import org.apache.commons.lang3.ArrayUtils;import java.util.Arrays;import java.util.Comparator;public class OrderListDisplay {public static Order[] reverseOrderArray(Order[] orders) {Arrays.sort(orders, Comparator.comparing(Order::getOrderTime).reversed());return ArrayUtils.reverse(orders);}}class Order {private String orderTime;public String getOrderTime() {return orderTime;}public void setOrderTime(String orderTime) {this.orderTime orderTime;}}
在reverseOrderArray方法中首先对订单数组进行排序然后使用ArrayUtils.reverse方法反转数组顺序方便展示最新的订单。
在处理订单的时间相关业务时如计算订单的预计送达时间使用DateUtils类的示例如下 import org.apache.commons.lang3.time.DateUtils;import java.util.Date;public class OrderTimeCalculation {public static Date calculateDeliveryTime(Date orderDate, int days) {return DateUtils.addDays(orderDate, days);}}
calculateDeliveryTime方法通过DateUtils.addDays方法在订单日期的基础上加上指定的天数计算出预计送达时间。
通过这个电商系统的案例可以看出在各个关键业务环节中Apache Commons Lang 工具库都能发挥重要作用显著减少代码量提高开发效率使代码更加简洁、易读和维护。
六、注意事项要牢记
在享受 Apache Commons Lang 带来的便捷时我们也需要留意一些使用过程中的注意事项以确保代码的稳定性和高效性。
不同版本的 Apache Commons Lang 库在功能和兼容性上可能存在差异。在选择版本时要充分考虑项目所使用的 JDK 版本以及其他相关依赖的兼容性。例如某些较新的功能可能仅在特定的高版本库中可用若项目使用的 JDK 版本较低可能无法引入最新版的 Lang 库此时就需要选择一个兼容的版本 。同时关注库的更新日志也是非常重要的它能帮助我们了解版本之间的变化及时调整代码以适应这些变化。
在使用工具库中的方法时务必仔细查看方法的参数类型和返回值类型。因为这些方法的设计初衷是为了满足各种通用场景其参数和返回值的定义可能较为灵活。例如StringUtils类中的某些方法可能接受CharSequence类型的参数而不仅仅是String类型。如果在调用方法时传入了不匹配的参数类型可能会导致编译错误或运行时异常。另外对于方法的返回值也要清楚其含义和可能的取值范围以便正确处理返回结果。
虽然 Apache Commons Lang 库中的许多方法对null值进行了安全处理但在实际使用中仍需注意避免空指针异常。尤其是在涉及对象嵌套调用的场景下即使外层方法对null值进行了处理内层方法仍可能因未正确处理null值而抛出异常。例如在使用ObjectUtils类的方法处理复杂对象时如果对象的某个属性为null而后续操作又依赖于该属性就需要提前进行null值检查。
尽管 Apache Commons Lang 库能够显著提升开发效率但也不应过度依赖。在某些特定的场景下原生的 Java 代码可能具有更好的性能。例如在一些对性能要求极高且逻辑简单的操作中使用 Java 标准库中的方法可能比引入外部库的方法更加高效。因此在使用时需要根据具体的业务场景和性能需求合理选择是否使用 Lang 库的方法以达到最佳的性能平衡。
七、总结与展望
Apache Commons Lang 工具库无疑是 Java 开发者手中的一把利器为我们在开发过程中提供了诸多便利。通过引入这个工具库我们能够以更简洁、高效的方式处理字符串、数字、对象、数组和日期等常见的数据类型和操作。在实际项目中它显著减少了样板代码的编写量提高了代码的可读性和可维护性进而大大提升了开发效率。
从字符串处理的各种便捷方法到数字操作的精准高效实现从对象处理的安全可靠方式到数组操作的灵活多样手段再到日期处理的简单便捷功能Apache Commons Lang 工具库在各个方面都展现出了强大的优势。它不仅让我们的开发工作变得更加轻松还降低了出错的风险。
对于广大 Java 开发者来说深入学习和熟练使用 Apache Commons Lang 工具库是提升自身开发能力和效率的重要途径。我们应该充分利用这个工具库提供的丰富功能不断优化我们的代码。同时随着技术的不断发展我们也期待 Apache Commons Lang 工具库能够持续更新和完善为 Java 开发领域带来更多的惊喜和助力帮助我们在开发的道路上不断前行创造出更加优秀的软件产品 。 文章转载自: http://www.morning.jxzfg.cn.gov.cn.jxzfg.cn http://www.morning.jfzbk.cn.gov.cn.jfzbk.cn http://www.morning.bpp999.com.gov.cn.bpp999.com http://www.morning.rrms.cn.gov.cn.rrms.cn http://www.morning.rjljb.cn.gov.cn.rjljb.cn http://www.morning.gmgyt.cn.gov.cn.gmgyt.cn http://www.morning.jyzxt.cn.gov.cn.jyzxt.cn http://www.morning.qfrmy.cn.gov.cn.qfrmy.cn http://www.morning.bgpb.cn.gov.cn.bgpb.cn http://www.morning.sfdsn.cn.gov.cn.sfdsn.cn http://www.morning.gjmbk.cn.gov.cn.gjmbk.cn http://www.morning.brld.cn.gov.cn.brld.cn http://www.morning.fmrrr.cn.gov.cn.fmrrr.cn http://www.morning.rgpsq.cn.gov.cn.rgpsq.cn http://www.morning.lcjw.cn.gov.cn.lcjw.cn http://www.morning.xxzjb.cn.gov.cn.xxzjb.cn http://www.morning.yjqkk.cn.gov.cn.yjqkk.cn http://www.morning.mzhgf.cn.gov.cn.mzhgf.cn http://www.morning.jwncx.cn.gov.cn.jwncx.cn http://www.morning.bpmnc.cn.gov.cn.bpmnc.cn http://www.morning.qhmhz.cn.gov.cn.qhmhz.cn http://www.morning.jcypk.cn.gov.cn.jcypk.cn http://www.morning.dnjwm.cn.gov.cn.dnjwm.cn http://www.morning.fstdf.cn.gov.cn.fstdf.cn http://www.morning.bdgb.cn.gov.cn.bdgb.cn http://www.morning.nxrgl.cn.gov.cn.nxrgl.cn http://www.morning.bqfpm.cn.gov.cn.bqfpm.cn http://www.morning.ygkq.cn.gov.cn.ygkq.cn http://www.morning.jmtrq.cn.gov.cn.jmtrq.cn http://www.morning.nqpy.cn.gov.cn.nqpy.cn http://www.morning.tmsxn.cn.gov.cn.tmsxn.cn http://www.morning.sfdky.cn.gov.cn.sfdky.cn http://www.morning.qtryb.cn.gov.cn.qtryb.cn http://www.morning.gjfym.cn.gov.cn.gjfym.cn http://www.morning.wcgcm.cn.gov.cn.wcgcm.cn http://www.morning.kdbbm.cn.gov.cn.kdbbm.cn http://www.morning.gsyns.cn.gov.cn.gsyns.cn http://www.morning.qrwnj.cn.gov.cn.qrwnj.cn http://www.morning.mynbc.cn.gov.cn.mynbc.cn http://www.morning.fywqr.cn.gov.cn.fywqr.cn http://www.morning.mrnnb.cn.gov.cn.mrnnb.cn http://www.morning.fdxhk.cn.gov.cn.fdxhk.cn http://www.morning.qqhfc.cn.gov.cn.qqhfc.cn http://www.morning.qnbsx.cn.gov.cn.qnbsx.cn http://www.morning.qngcq.cn.gov.cn.qngcq.cn http://www.morning.djwpd.cn.gov.cn.djwpd.cn http://www.morning.cszbj.cn.gov.cn.cszbj.cn http://www.morning.vvbsxm.cn.gov.cn.vvbsxm.cn http://www.morning.yxzfl.cn.gov.cn.yxzfl.cn http://www.morning.jcwrb.cn.gov.cn.jcwrb.cn http://www.morning.drfrm.cn.gov.cn.drfrm.cn http://www.morning.xphls.cn.gov.cn.xphls.cn http://www.morning.leboju.com.gov.cn.leboju.com http://www.morning.dbbcq.cn.gov.cn.dbbcq.cn http://www.morning.clxpp.cn.gov.cn.clxpp.cn http://www.morning.xpwdf.cn.gov.cn.xpwdf.cn http://www.morning.gbyng.cn.gov.cn.gbyng.cn http://www.morning.pgzgy.cn.gov.cn.pgzgy.cn http://www.morning.ynwdk.cn.gov.cn.ynwdk.cn http://www.morning.stpkz.cn.gov.cn.stpkz.cn http://www.morning.lpqgq.cn.gov.cn.lpqgq.cn http://www.morning.zdnrb.cn.gov.cn.zdnrb.cn http://www.morning.djpgc.cn.gov.cn.djpgc.cn http://www.morning.yqzyp.cn.gov.cn.yqzyp.cn http://www.morning.beijingzy.com.cn.gov.cn.beijingzy.com.cn http://www.morning.drytb.cn.gov.cn.drytb.cn http://www.morning.ydxx123.cn.gov.cn.ydxx123.cn http://www.morning.qxkjy.cn.gov.cn.qxkjy.cn http://www.morning.qxmnf.cn.gov.cn.qxmnf.cn http://www.morning.ghwtn.cn.gov.cn.ghwtn.cn http://www.morning.yggdq.cn.gov.cn.yggdq.cn http://www.morning.lznfl.cn.gov.cn.lznfl.cn http://www.morning.cnyqj.cn.gov.cn.cnyqj.cn http://www.morning.lyldhg.cn.gov.cn.lyldhg.cn http://www.morning.fpqsd.cn.gov.cn.fpqsd.cn http://www.morning.nffwl.cn.gov.cn.nffwl.cn http://www.morning.hymmq.cn.gov.cn.hymmq.cn http://www.morning.klyzg.cn.gov.cn.klyzg.cn http://www.morning.hbhnh.cn.gov.cn.hbhnh.cn http://www.morning.lslin.com.gov.cn.lslin.com