【分享】Jfinal+CXF做WebService

项目技术:Jfinal + Spring CXF , undertow + Jsp 

undertow 参考此篇博客

【分享】Jfinal+Undertow支持jsp的方法

http://www.jfinal.com/share/1890?tdsourcetag=s_pctim_aiomsg

着重说明 【pom 中添加依赖 】 当前版本 为1.9 待 波总发布新版后直接使用即可

<!-- jsp支持 start -->
<dependency>
    <groupId>io.undertow.jastow</groupId>
    <artifactId>jastow</artifactId>
    <version>2.1.0.Final</version>
    <exclusions>
        <!-- 以下两个包跟jfinal-undertow依赖冲突 -->
        <exclusion>
            <groupId>io.undertow</groupId>
            <artifactId>undertow-servlet</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.jboss.logging</groupId>
            <artifactId>jboss-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.jboss.spec.javax.servlet.jsp</groupId>
    <artifactId>jboss-jsp-api_2.3_spec</artifactId>
    <version>2.0.0.Final</version>
</dependency>
<!-- jsp支持 end -->

Config 配置注意,不能set

public void configConstant(Constants constants) {

//        constants.setViewType(ViewType.JSP);

}

WebService 说明

启动,注意放开请求,参考文档

UndertowServer.create(AppConfig.class).configWeb(builder -> {

            //解决Jxf jar包冲突 编译顺序依赖问题 add by cm

            System.setProperty(StaxUtils.ALLOW_INSECURE_PARSER, "1");

            //配置 WebServiceServlet

            builder.addServlet("myServlet", "xxxxx.WebServiceServlet");

            builder.addServletMapping("myServlet", "/szhtfpptWebservice");

            builder.setServletLoadOnStartup("myServlet", 1);//配置启动加载

            //配置 filterconfigEngine

            builder.addFilter("jfinal", "com.jfinal.core.JFinalFilter");

            builder.addFilterInitParam("jfinal", "configClass", "xxxxx.AppConfig");

            builder.addFilterUrlMapping("jfinal", "/*", DispatcherType.REQUEST);

            //开启Jsp 支持

            DeploymentInfo deploymentInfo = builder.getDeploymentInfo();

            deploymentInfo.addServlet(JspServletBuilder.createServlet("Default Jsp Servlet", "*.jsp"));

            HashMap<String, TagLibraryInfo> tagLibraryInfo = new HashMap<String, TagLibraryInfo>();

            JspServletBuilder.setupDeployment(deploymentInfo, new HashMap<String, JspPropertyGroup>(), tagLibraryInfo, new HackInstanceManager());

            // 错误页面(undertow捕获处理,不走enjoy渲染)

        }).setHost("0.0.0.0").setDevMode(true).setPort(11080).start();


【放行请求

 public void configHandler(Handlers handlers) {

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> webservice 跳过地址过滤 放行请求 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

        handlers.add(new UrlSkipHandler(".*xxxx/webservices.*", true));

}


【WerServiceServlet 主方法】 可百度自行参考

public class WebServiceServlet extends CXFNonSpringServlet {

    @Override

    protected void loadBus(ServletConfig servletConfig) {

        super.loadBus(servletConfig);

        createFactoryBean();

    }


    /**

     * @Description: 发布WebService服务

     * @auther: cm

     * @date: 10:45 2019/9/17

     * @param: []

     * @return: void

     */

    protected void createFactoryBean() {

        Bus bus = this.getBus();

        BusFactory.setDefaultBus(bus);

        LogKit.info("-------------------- WebService 发布开始 --------------------");

        PropKit.append("conf/base.properties");

        String address = PropKit.get("localWebServiceAddress");

        //发布主方法

        Endpoint.publish(address, new EleInvoiceWebServiceImpl().me());

        LogKit.info("-------------------- WebService 地址" + address + " --------------------");

        LogKit.info("-------------------- WebService 发布结束 --------------------");

    }

}


公司老项目为SSM,使用时解决过冲突,且有本地私服代码,故不提供Jar包 Maven 配置了,自行百度就好


其他 WebService 配置同Spring ,与 JFinal写法无关

学习是一种成长,记录一哈~






评论区

小太阳cm

2019-11-13 10:14

@happyboy @JFinal @杜福忠 开发一个月,感谢大佬们得帮助

JFinal

2019-11-13 10:29

undertow 支持 JSP 最简单的方案,非常赞

此外,希望修改一下这个贴子,再加上 jsp 所需要的 maven 依赖,这个也很关键

JFinal

2019-11-13 10:30

自己解决问题,是成长的最佳方式

小太阳cm

2019-11-13 10:47

@JFinal 好,我修改下,参照链接得博客也有,本着尊重原创者得态度就没写。。方便其他同学吧~