统一接口开发架构,统一接口架构实现封装

在一段时间的代码开发过程中和对同事开发的观察,发现在进行以json数据为返回的数据接口时,经常需要针对于具体的功能编写具体的接口,在实现过程中做了很多的重复工作,所以本人就萌发了做一套统一接口开发的架构。

在架构的整体搭建及开发过程中,参考了spring的设计思路,并且在开发过程中也使用了spring框架的实例化工厂,所以本框架在使用过程中需要用到spring相关内容。

下面针对代码做具体介绍:



配置文件加载监听器

package cn.ac.sict.core.listener;


import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;


import cn.ac.sict.core.util.CacheUtil;
import cn.ac.sict.core.util.XmlUtil;


/**
 * 监听器用于在系统启动时加载配置文件信息
 */
public class InterfaceConfigListener implements ServletContextListener{


@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub

}


@Override
public void contextInitialized(ServletContextEvent event) {
/**
* 加载配置的接口信息
*/
String fileName = event.getServletContext().getInitParameter("interfaceConfigLocation");
XmlUtil xmlUtil = new XmlUtil(fileName);
/**
* 将配置文件加载数据放入内存中
*/
CacheUtil.interfaces = xmlUtil.getProperties();
}

}


统一逻辑分发入口servlet

package cn.ac.sict.core.servlet;


import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import cn.ac.sict.context.support.InstanceService;
import cn.ac.sict.core.util.MapUtil;
import cn.ac.sict.core.util.RequestDataUtil;
import net.sf.json.JSONObject;


/**
 * 统一接口servlet,用于进行逻辑分发处理
 * @author liyang
 *
 */
public class EntranceForwardServlet extends HttpServlet {
/**

*/
private static final long serialVersionUID = 1L;


/**
* 用于处理所有GET类型接口请求
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/**
*  获取接口传入所有参数
*/
Map<String, String> argument = RequestDataUtil.requestToMap(req);
/**
* 进行乱码检测,将汉字乱码转换成汉字
*/
MapUtil.messyCodeCheck(argument);
/**
* 处理接口访问参数
*/
this.processMethod(req, resp, argument);
}


/**
* 用于处理所有POST类型接口请求
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/**
*  获取接口传入所有参数
*/
Map<String, String> argument = RequestDataUtil.requestToMap(req);
/**
* 处理接口访问参数
*/
this.processMethod(req, resp, argument);
}


/**
* 处理接口访问参数
* @param req req对象
* @param resp resp对象
* @param argument 请求参数
* @throws IOException 需要抛出的io异常
*/
private void processMethod(HttpServletRequest req, HttpServletResponse resp, Map<String, String> argument) throws IOException {
/**
* 通过工具类处理对象数据并进行反向映射及返回数据
*/
InstanceService service = new InstanceService(argument, req);
/**
* 返回数据对象
*/
Object ret_obj = service.invoke();
/**
* 将数据装换为json格式
*/
JSONObject jsonObject = JSONObject.fromObject(ret_obj);
/**
* 发送json数据
*/
resp.setCharacterEncoding("UTF-8");
resp.setContentType("application/json; charset=utf-8");
PrintWriter out = resp.getWriter();
out.print(jsonObject.toString());


out.flush();
out.close();
}


}


相关配置方式:

Web.xml配置

初始化配置文件监听器

 <listener>

    <listener-class>cn.ac.sict.core.listener.InterfaceConfigListener</listener-class>

 </listener>

配置相关配置文件路径为classpath

 <context-param>

    <param-name>interfaceConfigLocation</param-name>

    <param-value>

    interface.xml

    </param-value>

  </context-param>

初始化封装的接口统一入口servlet

<servlet>

    <servlet-name>EntranceForward</servlet-name>

    <servlet-class>cn.ac.sict.core.servlet.EntranceForwardServlet</servlet-class>

 </servlet>

 <servlet-mapping>

    <servlet-name>EntranceForward</servlet-name>

    <url-pattern>/entranceForward</url-pattern>

  </servlet-mapping>


Interface.xml配置

 

<services>

Code为service层版本号,class为对应的类别名

     <servicecode="版本"class="类别名">

Code为method版本号,标签中内容为方法名

          <methodcode="版本">方法名</method>

     </service>

</services>


框架中使用了json对象的序列化,所以在使用时需引入:



框架中使用了dom对象解析,所以在使用时需引入:


在框架入口类使用了servlet,所以在使用时需引入:



所有jar展示图:



以上只是本人的初步想法,欢迎批评指正!


  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
嵌入式软件开发实现串口通信软件架构的解耦可以通过以下几个步骤来实现: 1. 抽象串口接口:定义一个独立于具体串口硬件的抽象接口,例如SerialPortInterface,其中包含常用的串口操作方法,如发送数据、接收数据、设置波特率等。 2. 实现串口适配器:针对不同的具体串口硬件,实现对应的串口适配器类,例如SerialPortAdapterA、SerialPortAdapterB等。这些适配器类继承自SerialPortInterface,并实现其中定义的方法。 3. 设计串口管理模块:创建一个串口管理模块,负责管理所有的串口通信。该模块可以包含如下功能: - 动态检测可用串口:通过遍历系统中的串口设备,自动识别并初始化可用的串口适配器。 - 提供统一接口封装串口适配器的具体操作,提供统一接口给上层模块使用。 - 提供事件机制:定义事件回调机制,当串口接收到数据时,通过事件通知上层模块进行处理。 4. 定义消息传输协议:设计一个消息传输协议,定义数据包的格式和规则。可以使用固定长度、起始标识和校验等方式来确保数据的完整性和正确性。 5. 实现业务逻辑模块:在上层模块中,根据具体的业务需求,编写相应的业务逻辑代码。通过串口管理模块提供的接口来进行数据的发送和接收,而不需要关心具体的串口硬件和通信细节。 通过以上步骤,可以实现串口通信软件架构的解耦,将串口硬件的操作与业务逻辑模块进行解耦,提高了代码的可维护性和可扩展性。同时,也方便了对不同串口硬件的适配和切换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值