项目技术: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写法无关
学习是一种成长,记录一哈~