1:使用场景:Mock公安网证件信息校验

2:Jetty嵌入式Server启动方式:由于Jetty9.x(需jdk7.x以上)以后Server启动方式有略微差异,所以分开说明:

2.1 Jetty9.x嵌入式Http-Server启动:

 public void doRun() {
     Server server = new Server();
     ServerConnector connector = new ServerConnector(server);
     connector.setPort();
     connector.setIdleTimeout();
     server.setConnectors(new Connector[]{connector});
     server.setHandler(JettyServerHandlerFactory.getHandle());

     try {
         server.start();
         server.join();
         logger.info("jetty server start!");
     } catch (Exception e) {
         e.printStackTrace();
     }
 }

2.2 Jetty9.x嵌入式Https-Server启动:

public void doRunHttps(int port,String path){
    Server server = new Server();

    HttpConfiguration https_config = new HttpConfiguration();
    https_config.setSecureScheme("https");
    https_config.setSecurePort(port);
    https_config.setOutputBufferSize(32768);
    https_config.addCustomizer(new SecureRequestCustomizer());

    SslContextFactory sslContextFactory = new SslContextFactory();
    sslContextFactory.setKeyStorePath(path);
    sslContextFactory.setKeyStorePassword("OBF:18jj18jj18jj18jj18jj18jj");//111111:18jj18jj18jj18jj18jj18jj
    sslContextFactory.setKeyManagerPassword("OBF:18jj18jj18jj18jj18jj18jj");//123456:19iy19j019j219j419j619j8

    ServerConnector httpsConnector = new ServerConnector(server,
            new SslConnectionFactory(sslContextFactory,"http/1.1"),
            new HttpConnectionFactory(https_config));
    httpsConnector.setPort(8443);
    httpsConnector.setIdleTimeout(500000);
    server.addConnector(httpsConnector);

    server.setHandler(JettyServerHandlerFactory.getWebHandle());

    try {
        server.start();
        server.join();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

  

2.3 Jetty8.x嵌入式Https-Server启动:

public void doRunHttps(int port,String path){
        // create a jetty server and setup the SSL context
        Server server = new Server();
        SslContextFactory sslContextFactory = new SslContextFactory(path);
        sslContextFactory.setKeyStorePassword("111111");
        sslContextFactory.setTrustStore(path);
        sslContextFactory.setTrustStorePassword("111111");
        sslContextFactory.setNeedClientAuth(false);

        // create a https connector
        SslSocketConnector connector = new SslSocketConnector(sslContextFactory);
        connector.setPort(port);

        // register the connector
        server.setConnectors(new Connector[] { connector });
        server.setHandler(JettyServerHandlerFactory.getWebHandle());

        try {
            server.start();
            server.join();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

  

3:Xfir+Spring+Maven配置启动

3.1 Maven配置文件说明

<!--jetty配置-->
		<dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <version>${jetty-version}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-servlet</artifactId>
            <version>${jetty-version}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-webapp</artifactId>
            <version>${jetty-version}</version>
        </dependency>
        <!--gzip:jetty https 压缩传输-->
        <dependency>
            <groupId>net.sourceforge.pjl-comp-filter</groupId>
            <artifactId>pjl-comp-filter</artifactId>
            <version>1.7</version>
        </dependency>
        <!--xfire 依赖-->
        <dependency>
            <groupId>org.codehaus.xfire</groupId>
            <artifactId>xfire-all</artifactId>
            <version>1.2.6</version>
            <exclusions>
                <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

  

3.2 spring配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
          http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
        <!-- 引入XFire预配置信息 -->
        <import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
        <!--定义访问的url-->
        <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
            <property name="urlMap">
                <map>
                    <entry key="/nciic.ws">
                        <ref bean="serviceInfoService" />
                    </entry>

                </map>
            </property>
        </bean>

        <!-- 使用XFire导出器 -->
        <bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true">
            <!-- 引用xfire.xml中定义的工厂 -->
            <property name="serviceFactory" ref="xfire.serviceFactory" />
            <!-- 引用xfire.xml中的xfire实例 -->
            <property name="xfire" ref="xfire" />
        </bean>
        <bean id="serviceInfoService" parent="baseWebService">
            <!-- 业务服务bean -->
            <property name="serviceBean" ref="serviceInfo" />
            <!-- 业务服务bean的窄接口类 -->
            <property name="serviceClass" value="com.wangyin.xfire.ServiceInfo" />
        </bean>

        <bean id="serviceInfo" class="com.wangyin.xfire.impl.ServiceInfoImpl"></bean>

</beans>

  

3.3:对应的java类:

public interface ServiceInfo {

    // 核查方法
    public String nciicCheck(String inLicense, String inConditions);

    // 取得条件文件模板
    public String nciicGetCondition(String inLicense) throws Exception;
}

@Component("serviceInfo")
public class ServiceInfoImpl implements ServiceInfo {
    private final static Logger logger = LoggerFactory.getLogger(ServiceInfoImpl.class);

    @Override
    public String nciicCheck(String inLicense, String inConditions) {
        logger.info("do nciic check...");
        //TODO
        return "";
    }

    @Override
    public String nciicGetCondition(String inLicense) throws Exception {
        return "";
    }
}

  

4:补充jetty相关配置和说明:

4.1:KeyStore 获取说明:

第一步,命令行下使用jdk的keytool工具生成keystore
keytool -keystore keystore -alias jetty -genkey -keyalg RSA

第二步,生成证书
keytool -export -alias jetty -file jetty.crt -keystore keystore

第三步,生成OBA文件,这里的yoursslpassword是第一步填写的密码
java -cp jetty-all-9.0.5.v20130815.jar org.eclipse.jetty.util.security.Password yoursslpassword

4.2:JettyServer工厂类

public class JettyServerHandlerFactory {
    public static Handler getHandle() {
        IPAccessHandler ipAccessHandler = getFireWallHandler();
        ipAccessHandler.setHandler(getServletHandler());

        HandlerCollection handlers = new HandlerCollection();
        handlers.setHandlers(new Handler[]{ipAccessHandler,
                new DefaultHandler()});
        return handlers;
    }

    public static Handler getWebHandle(){
        WebAppContext webApp = new WebAppContext();
        webApp.setContextPath("/mockcd");
        webApp.setResourceBase("WebRoot");

        webApp.setInitParameter("org.eclipse.jetty.servlet.Default.dirAllowed", "true");
        webApp.setInitParameter("org.eclipse.jetty.servlet.Default.useFileMappedBuffer", "true");

        HandlerCollection handlers = new HandlerCollection();
        handlers.setHandlers(new Handler[]{webApp,getHandle(),
                new DefaultHandler()});

        return handlers;
    }

    private static IPAccessHandler getFireWallHandler() {
        IPAccessHandler ipHandler = new IPAccessHandler();
        return ipHandler;
    }

    private static Handler getServletHandler() {
        ServletContextHandler root = new ServletContextHandler(
                ServletContextHandler.SESSIONS);
        root.setSessionHandler(new SessionHandler());
        root.setContextPath("/");
        root.setResourceBase("META-INF/xfire/services.xml");
        ServletHolder holder = new ServletHolder(new XFireConfigurableServlet());
        root.addServlet(holder, "/servlet/XFireServlet");
        root.addServlet(holder, "/services/*");
        root.addFilter(CompressingFilter.class,"/*",null);
        return root;
    }
}

  

Jetty+Xfire 嵌入式webService应用实践的更多相关文章

  1. paip.myeclipse7 java webservice 最佳实践o228

    paip.myeclipse7  java webservice 最佳实践o228 java的ws实现方案:jax-ws>>xfire ws的测试工具  webservice测试调用工具W ...

  2. Java使用Jetty实现嵌入式Web服务器及Servlet容器

     Jetty是一个Java实现的开源的servlet容器,它既可以像Tomcat一样作为一个完整的Web服务器和Servlet容器,同时也可以嵌入在Java应用程序中,在Java程序中调用Jetty. ...

  3. Xfire实现webservice时,对象传递规则及解析简析

    Xfire实现webservice,传递对象解析的话,要分两种情况处理:1.基本类型对象:2.复杂对象 其实,在客户端直接传递数组,如String[] int[]等这些无法通过配置具体类型来通知xfi ...

  4. XFire创建WebService实例应用

    [转自] http://clq9761.iteye.com/blog/1261963 XFire创建WebService实例应用 XFire使得在JavaEE应用中发布Web服务变得轻而易举.和其他W ...

  5. Java调用WebService方法总结(6)--XFire调用WebService

    XFire是codeHaus组织提供的一个WebService开源框架,目前已被Apache的CXF所取代,已很少有人用了,这里简单记录下其调用WebService使用方法.官网现已不提供下载,可以到 ...

  6. 从xfire谈WebService接口化编程

    前段时间有博友在看我的博文<WebService入门案例>后,发邮件问我关于WebService 接口在java中的开发,以及在实际生产环境中的应用.想想自己入职也有一段时间了,似乎也该总 ...

  7. MyEclipse下一个XFire发展Webservice示例

    最近的研究JAVA发展Webservice.网络发现几个热门选择AXIS.XFire.CFX(XFire下一代),打开前几天对这篇文章比较三种选择,他们已经有了一些概念. 样本,以确定自己的实践 在開 ...

  8. MyEclipse下XFire开发Webservice实例

    XFire Java SOAP框架概述 (摘自:http://tech.it168.com/j/e/2006-10-28/200610281432707.shtml )     MyEclipse W ...

  9. Jetty 9嵌入式开发

    官方网址:http://www.eclipse.org/jetty/ 下载地址:http://download.eclipse.org/jetty/stable-9/dist/ 文档网址:http:/ ...

随机推荐

  1. android安卓Sqlite数据库实现用户登录注册

    看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下!建立一个类 并继承SQLiteOpenHelper public ...

  2. 不透明度opacity进阶

    一.opacity属性 1.opacity 习惯上说“透明度”,其实应该叫“不透明度”.opacity 意思:不透明,而背景色的默认值:transparent意思才是“透明的”.所以opacity用来 ...

  3. 浅谈Vue.js

    作为一名Vue.js的忠实用户,我想有必要写点文章来歌颂这一门美好的语言了,我给它的总体评价是“简单却不失优雅,小巧而不乏大匠”,下面将围绕这句话给大家介绍Vue.js,希望能够激发你对Vue.js的 ...

  4. Unity中关于作用力方式ForceMode的功能注解

    功能注解:ForceMode为枚举类型,用来控制力的作用方式,有4个枚举成员,在以下举例中均设刚体质量为m=2.0f,力向量为f=(10.0f,0.0f,0.0f). (1)ForceMode.For ...

  5. codevs 1228 苹果树 树链剖分讲解

    题目:codevs 1228 苹果树 链接:http://codevs.cn/problem/1228/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...

  6. dll导入导出宏定义,出现“不允许 dllimport 函数 的定义”的问题分析

    建立dll项目后,在头文件中,定义API宏 #ifndef API_S_H #define API_S_H ...... #ifndef DLL_S_20160424 #define API _dec ...

  7. [原]CentOS7.2最小安装环境部署Asp.NET Core笔记

    转载请注明原作者(think8848)和出处(http://think8848.cnblogs.com) 写在前面的话 不知不觉在cnblogs上注册已经10多年了,看我的园龄就直接暴露了我实际年龄, ...

  8. 支持同步滚动的RichTextbox控件

    using System.Windows.Forms; public class SynchronizedScrollRichTextBox : System.Windows.Forms.RichTe ...

  9. C# Webbrowser 常用方法及多线程调用

    设置控件的值 /// <summary> /// 根据ID,NAME双重判断并设置值 /// </summary> /// <param name="tagNa ...

  10. 研究Extension和Category的一个例子

    Category: 1. 无法添加实例变量 2.将类的实现分散到多个不同文件或多个不同框架中. Extension: 1. 可以添加实例变量 注: 如果Category的头文件中也使用Extensio ...