如何使用xml配置多个似你想要的${pageContext.request.contextPath}

我相信我们在项目中肯定遇到过这个${pageContext.request.contextPath},因为相对路径实在太麻烦了,而我当前项目是分布式的,有很多个模块,多个类似于这种路径,所有配置在xml里面方便与后期的修改,话不多说直接贴代码


实体类 OrderInfo

package com.pk.entity;

import org.springframework.stereotype.Component;

@Component
public class OrderInfo {

   
   private String staticPath;//静态地址
   private String orderPath;//订单order地址
   private String loginPath;//PC登录地址

  
   public String getOrderPath() {
      return orderPath;
   }
   public void setOrderPath(String orderPath) {
      this.orderPath = orderPath;
   }
   public String getStaticPath() {
      return staticPath;
   }
   public void setStaticPath(String staticPath) {
      this.staticPath = staticPath;
   }
   public String getLoginPath() {
      return loginPath;
   }
   public void setLoginPath(String loginPath) {
      this.loginPath = loginPath;
   }
   

   
   
}

order-local.xml   XML文件 

<?xml version="1.0" encoding="UTF-8"?>
<Order>
       
      <!-- 静态地址首页 -->
      <staticPath>http://www.pk.cn/static/</staticPath>
      <orderPath>http://www.pk.cn/trade/</orderPath>
      <loginPath>http://www.pk.cn/trade/order/login.jhtml</loginPath>

<!--    线上地址 -->
</Order>

Order_AutoConfig  (@postconstruct 注解执行servlet的构造函数的后面  init的前面 详情百度 )

package com.pk.utils;

import java.net.URL;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;

import com.pk.entity.OrderInfo;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;


/**
 * 系统初始自动获取配置信息
 * 
 * 
 */
@Component
public class Order_AutoConfig {
   /** logger */
   //private static final Logger logger = LoggerFactory.getLogger(Order_AutoConfig.class);
   public static final String CONFIG_FILE_NAME = "order-local.xml"; // 系统配置文件名称

   @Resource
   OrderInfo order;

   /**
    * 系统配置信息读取
    * 
    * 
    */
   @PostConstruct
   public void autoInIt() {

      Document document = null;
      try {
         URL configFilePath = Thread.currentThread().getContextClassLoader().getResource(CONFIG_FILE_NAME);
         SAXReader saxReader = new SAXReader();
         document = saxReader.read(configFilePath);
         Element root = document.getRootElement();
         
         String staticPath =  root.element("staticPath").getTextTrim();
         String orderPath =  root.element("orderPath").getTextTrim();
         String loginPath =  root.element("loginPath").getTextTrim();

         order.setOrderPath(orderPath);
         order.setStaticPath(staticPath);
         order.setLoginPath(loginPath);
      } catch (Exception e) {
         e.printStackTrace();
      }
   }

}

InitListener 实现 ServletContextAware 就可以拿到servletContext  把数据放进去你就可以在jsp页面使用了


package com.pk.listener;

import javax.annotation.Resource;
import javax.servlet.ServletContext;

import com.pk.entity.OrderInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.ServletContextAware;


/**
 * Listener - 初始化
 */
@Component("initListener")
public class InitListener implements ServletContextAware {

   /** logger */
   private static final Logger logger = LoggerFactory.getLogger(InitListener.class);

   /** servletContext */
   private ServletContext servletContext;

   @Resource
   OrderInfo orderInfo;

   public void setServletContext(ServletContext servletContext) {
      this.servletContext = servletContext;
      onApplicationInIt();
   }

   public void onApplicationInIt() {

      try {
         if (servletContext != null) {
            servletContext.setAttribute("OrderInfo", orderInfo);
         }

      } catch (Exception e) {
         logger.error("加载模块的系统变量失败{}",servletContext.getAttribute("OrderInfo"));
         e.getStackTrace();
      }

   }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值