Jmeter Sampler (取样器插件开发) 制定自己的 Sampler

来源:互联网 发布:美宝莲淘宝官方旗舰店 编辑:程序博客网 时间:2024/05/03 05:54

Jmeter可以帮助我们做性能测试、接口测试,然而Jmeter支持常用的HTTP等协议,如果某个公司采用自由协议那么Jmeter要采用实现【JavaSamplerClient】接口,这种方式当然是比较好的,但是有些东西和Jmeter自身的参数化等等功能,不太好结合,有的还有BUG,当然这个最灵活的,当然也可以采取做一个协议插件,嵌入到Jmeter中,那么怎么做呢?

1. 首先第一个做一个测试的GUI,要实现AbstractSamplerGui 类做才能被Jmeter加载


<code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">DemoSampleGui</span> <span class="kd">extends</span> <span class="n">AbstractSamplerGui</span> <span class="kd">implements</span> <span class="n">ItemListener</span> <span class="o">{</span>    <span class="kd">private</span> <span class="n">DemoParamConfigGui</span> <span class="n">demoParamConfigGui</span><span class="o">;</span>    <span class="kd">public</span> <span class="n">DemoSampleGui</span><span class="o">()</span> <span class="o">{</span>    <span class="c1">//构造方法初始化</span>          <span class="n">init</span><span class="o">();</span>      <span class="o">}</span>  <span class="cm">/**     * @Descrition初始化    * */</span>    <span class="kd">private</span> <span class="kt">void</span> <span class="n">init</span><span class="o">()</span> <span class="o">{</span>        <span class="n">setLayout</span><span class="o">(</span><span class="k">new</span> <span class="n">BorderLayout</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span> <span class="mi">5</span><span class="o">));</span>        <span class="n">setBorder</span><span class="o">(</span><span class="n">makeBorder</span><span class="o">());</span>        <span class="n">add</span><span class="o">(</span><span class="n">makeTitlePanel</span><span class="o">(),</span> <span class="n">BorderLayout</span><span class="o">.</span><span class="na">NORTH</span><span class="o">);</span>            <span class="c1">//设置布局</span>        <span class="n">demoParamConfigGui</span> <span class="o">=</span> <span class="k">new</span> <span class="n">DemoParamConfigGui</span><span class="o">();</span>   <span class="c1">//这里是另外一个面板类,抽出去了,一会单独说</span>        <span class="n">add</span><span class="o">(</span><span class="n">demoParamConfigGui</span><span class="o">,</span> <span class="n">BorderLayout</span><span class="o">.</span><span class="na">CENTER</span><span class="o">);</span>    <span class="o">}</span>    <span class="cm">/**     * @Descrition清除页面数据信息    * */</span>     <span class="nd">@Override</span>                                 <span class="kd">public</span> <span class="kt">void</span> <span class="n">clearGui</span><span class="o">()</span> <span class="o">{</span>        <span class="kd">super</span><span class="o">.</span><span class="na">clearGui</span><span class="o">();</span>        <span class="n">demoParamConfigGui</span><span class="o">.</span><span class="na">clear</span><span class="o">();</span>    <span class="o">}</span> <span class="cm">/**     * @Descrition:配置组装元素信息    * */</span>     <span class="nd">@Override</span>                               <span class="kd">public</span> <span class="kt">void</span> <span class="n">configure</span><span class="o">(</span><span class="n">TestElement</span> <span class="n">element</span><span class="o">)</span> <span class="o">{</span>        <span class="kd">super</span><span class="o">.</span><span class="na">configure</span><span class="o">(</span><span class="n">element</span><span class="o">);</span>        <span class="kd">final</span> <span class="n">MySamplerSamplerBase</span> <span class="n">samplerBase</span> <span class="o">=</span> <span class="o">(</span><span class="n">MySamplerSamplerBase</span><span class="o">)</span> <span class="n">element</span><span class="o">;</span>        <span class="n">safParamConfigGui</span><span class="o">.</span><span class="na">configure</span><span class="o">(</span><span class="n">element</span><span class="o">);</span>    <span class="o">}</span>   <span class="cm">/**     * @Descrition:创建新的元素    * */</span>    <span class="nd">@Override</span>    <span class="kd">public</span> <span class="n">TestElement</span> <span class="n">createTestElement</span><span class="o">()</span> <span class="o">{</span>        <span class="n">MySamplerSamplerBase</span> <span class="n">sampler</span> <span class="o">=</span> <span class="k">new</span> <span class="n">MySamplerSamplerBase</span><span class="o">();</span>        <span class="n">modifyTestElement</span><span class="o">(</span><span class="n">sampler</span><span class="o">);</span>        <span class="k">return</span> <span class="n">sampler</span><span class="o">;</span>    <span class="o">}</span>    <span class="cm">/**     * @Descrition:清除旧的组件,从新创建    * */</span>    <span class="nd">@Override</span>    <span class="kd">public</span> <span class="kt">void</span> <span class="n">modifyTestElement</span><span class="o">(</span><span class="n">TestElement</span> <span class="n">sampler</span><span class="o">)</span> <span class="o">{</span>        <span class="n">sampler</span><span class="o">.</span><span class="na">clear</span><span class="o">();</span>        <span class="n">safParamConfigGui</span><span class="o">.</span><span class="na">modifyTestElement</span><span class="o">(</span><span class="n">sampler</span><span class="o">);</span>        <span class="k">this</span><span class="o">.</span><span class="na">configureTestElement</span><span class="o">(</span><span class="n">sampler</span><span class="o">);</span>    <span class="o">}</span>   <span class="cm">/**     * @Descrition:label信息,也就是创建HTTP请求、JAVA请求    * */</span>    <span class="nd">@Override</span>    <span class="kd">public</span> <span class="n">String</span> <span class="n">getLabelResource</span><span class="o">()</span> <span class="o">{</span>        <span class="k">return</span> <span class="s">"mySampler_title"</span><span class="o">;</span>     <span class="o">}</span><span class="o">}</span></code><p>Label那个由于Jmeter实现国际化,所以在配置文件里,通过mySampler_title去资源文件里面找的,如果我们想添加自己的需要修改CORE里面的配置文件,增加自己对应的UICODE编码</p><div class="fluidbox-wrap" style="z-index:990"><a target=_blank target="_blank" href="https://testerhome.com/photo/2016/95e4c91917f8601e96ecf49f8feddad7.png" class="zoom-image fluidbox"><img src="https://testerhome.com/photo/2016/95e4c91917f8601e96ecf49f8feddad7.png" alt="" style="" /></a></div><strong>2.DemoParamConfigGui 类,这个类主要是初始化面板信息,和修改信息用的,我简单列几行代码,下面给最终的截图,这里可以根据自己的要求更改</strong><pre name="code" class="highlight java"><code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">MySamplerParamConfigGui</span> <span class="kd">extends</span> <span class="n">JPanel</span><span class="o">{</span>    <span class="kd">public</span> <span class="n">JTextField</span> <span class="n">interfaceName</span><span class="o">;</span>    <span class="kd">public</span> <span class="n">JTextField</span> <span class="n">interfaceAddress</span><span class="o">;</span>             <span class="kd">public</span> <span class="n">JTextField</span> <span class="n">interfaceGroup</span><span class="o">;</span>    <span class="kd">public</span> <span class="n">JTextField</span> <span class="n">interfaceVersion</span><span class="o">;</span>    <span class="kd">public</span> <span class="n">JTextField</span> <span class="n">interfaceMethod</span><span class="o">;</span>      <span class="c1">//定义几个页面输入框,这个根据自身需要开发哈,我这个是简单的例子</span> <span class="cm">/**     * @Descrition:初始化面板    * */</span> <span class="kd">private</span> <span class="kt">void</span> <span class="n">init</span><span class="o">()</span> <span class="o">{</span>        <span class="n">setLayout</span><span class="o">(</span><span class="k">new</span> <span class="n">BorderLayout</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span> <span class="mi">5</span><span class="o">));</span>        <span class="k">if</span> <span class="o">(</span><span class="n">displayName</span><span class="o">)</span> <span class="o">{</span>            <span class="n">setBorder</span><span class="o">(</span><span class="n">makeBorder</span><span class="o">());</span>            <span class="n">add</span><span class="o">(</span><span class="n">makeTitlePanel</span><span class="o">(),</span> <span class="n">BorderLayout</span><span class="o">.</span><span class="na">NORTH</span><span class="o">);</span>        <span class="o">}</span>        <span class="c1">// MAIN PANEL</span>        <span class="n">VerticalPanel</span> <span class="n">mainPanel</span> <span class="o">=</span> <span class="k">new</span> <span class="n">VerticalPanel</span><span class="o">();</span>        <span class="n">JPanel</span> <span class="n">serverPanel</span> <span class="o">=</span> <span class="k">new</span> <span class="n">HorizontalPanel</span><span class="o">();</span>        <span class="n">serverPanel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">createInterfaceAddressPanel</span><span class="o">(),</span> <span class="n">BorderLayout</span><span class="o">.</span><span class="na">CENTER</span><span class="o">);</span>        <span class="n">mainPanel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">serverPanel</span><span class="o">);</span>        <span class="n">mainPanel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">createInterfaceNamePanel</span><span class="o">());</span>        <span class="n">mainPanel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">getInterfaceGroupPanel</span><span class="o">());</span>        <span class="n">mainPanel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">createInterfaceVersionPanel</span><span class="o">());</span>        <span class="n">mainPanel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">createInterfaceMethodPanel</span><span class="o">());</span>        <span class="n">mainPanel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">createJarFilePathPanel</span><span class="o">());</span>        <span class="n">add</span><span class="o">(</span><span class="n">mainPanel</span><span class="o">,</span> <span class="n">BorderLayout</span><span class="o">.</span><span class="na">CENTER</span><span class="o">);</span>    <span class="o">}</span> <span class="cm">/**     * @Descrition:创建文本框信息    * */</span><span class="kd">private</span> <span class="n">JPanel</span> <span class="nf">createInterfaceMethodPanel</span><span class="p">(</span><span class="o">)</span> <span class="o">{</span>                              <span class="c1">//初始化上面文本对象,这里我列举一个例子,剩下都一下就是信息和布局的区别</span>        <span class="n">interfaceMethod</span> <span class="o">=</span> <span class="k">new</span> <span class="n">JTextField</span><span class="o">(</span><span class="mi">15</span><span class="o">);</span>        <span class="n">JLabel</span> <span class="n">label</span> <span class="o">=</span> <span class="k">new</span> <span class="n">JLabel</span><span class="o">(</span><span class="s">"调用方法:"</span><span class="o">);</span> <span class="c1">// $NON-NLS-1$</span>        <span class="n">label</span><span class="o">.</span><span class="na">setLabelFor</span><span class="o">(</span><span class="n">interfaceMethod</span><span class="o">);</span>        <span class="n">JPanel</span> <span class="n">panel</span> <span class="o">=</span> <span class="k">new</span> <span class="n">JPanel</span><span class="o">(</span><span class="k">new</span> <span class="n">BorderLayout</span><span class="o">(</span><span class="mi">5</span><span class="o">,</span> <span class="mi">0</span><span class="o">));</span>        <span class="n">panel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">label</span><span class="o">,</span> <span class="n">BorderLayout</span><span class="o">.</span><span class="na">WEST</span><span class="o">);</span>        <span class="n">panel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">interfaceMethod</span><span class="o">,</span> <span class="n">BorderLayout</span><span class="o">.</span><span class="na">CENTER</span><span class="o">);</span>        <span class="k">return</span> <span class="n">panel</span><span class="o">;</span>    <span class="o">}</span></code>


3.Sampler相关的类

<code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">MySamplerSamplerBase</span> <span class="kd">extends</span> <span class="n">AbstractSampler</span>        <span class="kd">implements</span> <span class="n">TestStateListener</span><span class="o">,</span> <span class="n">TestIterationListener</span><span class="o">,</span> <span class="n">ThreadListener</span><span class="o">,</span> <span class="n">Interruptible</span> <span class="o">{</span><span class="c1">////////////////////// Code ///////////////////////////</span>    <span class="kd">public</span> <span class="n">MySamplerSamplerBase</span><span class="o">()</span> <span class="o">{</span>        <span class="n">setArguments</span><span class="o">(</span><span class="k">new</span> <span class="n">Arguments</span><span class="o">());</span>    <span class="o">}</span>    <span class="kd">public</span> <span class="kt">void</span> <span class="n">setInterfaceName</span><span class="o">(</span><span class="n">String</span> <span class="n">newInterfaceName</span><span class="o">)</span> <span class="o">{</span>        <span class="k">this</span><span class="o">.</span><span class="na">setProperty</span><span class="o">(</span><span class="n">InterfaceName</span><span class="o">,</span> <span class="n">newInterfaceName</span><span class="o">);</span>    <span class="o">}</span>    <span class="kd">public</span> <span class="n">String</span> <span class="n">getInterfaceAddress</span><span class="o">()</span> <span class="o">{</span>        <span class="k">return</span> <span class="n">getPropertyAsString</span><span class="o">(</span><span class="n">InterfaceAddress</span><span class="o">);</span>    <span class="o">}</span>    <span class="kd">public</span> <span class="n">String</span> <span class="n">getInterfaceName</span><span class="o">()</span> <span class="o">{</span>        <span class="k">return</span> <span class="n">getPropertyAsString</span><span class="o">(</span><span class="n">InterfaceName</span><span class="o">);</span>    <span class="o">}</span>    <span class="kd">public</span> <span class="kt">void</span> <span class="n">setInterfaceGroup</span><span class="o">(</span><span class="n">String</span> <span class="n">newInterfaceGroup</span><span class="o">)</span> <span class="o">{</span>        <span class="k">this</span><span class="o">.</span><span class="na">setProperty</span><span class="o">(</span><span class="n">InterfaceGroup</span><span class="o">,</span> <span class="n">newInterfaceGroup</span><span class="o">,</span> <span class="s">""</span><span class="o">);</span>     <span class="o">}</span>    <span class="kd">public</span> <span class="n">String</span> <span class="n">getInterfaceGroup</span><span class="o">()</span> <span class="o">{</span>        <span class="k">return</span> <span class="n">getPropertyAsString</span><span class="o">(</span><span class="n">InterfaceGroup</span><span class="o">,</span> <span class="s">""</span><span class="o">);</span>     <span class="o">}</span>    <span class="kd">public</span> <span class="n">String</span> <span class="n">getInterfaceVersion</span><span class="o">()</span> <span class="o">{</span>        <span class="k">return</span> <span class="n">getPropertyAsString</span><span class="o">(</span><span class="n">InterfaceVersion</span><span class="o">);</span>    <span class="o">}</span>    <span class="kd">public</span> <span class="n">String</span> <span class="n">getInterfaceMethod</span><span class="o">()</span> <span class="o">{</span>        <span class="k">return</span> <span class="n">getPropertyAsString</span><span class="o">(</span><span class="n">InterfaceMethod</span><span class="o">);</span>    <span class="o">}</span>                                                                                              <span class="c1">//这些都是从界面获取数据</span> <span class="cm">/**     * @Descrition:设置参数    * */</span>    <span class="kd">public</span> <span class="kt">void</span> <span class="n">setArguments</span><span class="o">(</span><span class="n">Arguments</span> <span class="n">value</span><span class="o">)</span> <span class="o">{</span>                        <span class="c1">//设置和获取参数</span>        <span class="n">setProperty</span><span class="o">(</span><span class="k">new</span> <span class="n">TestElementProperty</span><span class="o">(</span><span class="n">ARGUMENTS</span><span class="o">,</span> <span class="n">value</span><span class="o">));</span>     <span class="o">}</span> <span class="cm">/**     * @Descrition:获取参数    * */</span>    <span class="kd">public</span> <span class="n">Arguments</span> <span class="n">getArguments</span><span class="o">()</span> <span class="o">{</span>        <span class="k">return</span> <span class="o">(</span><span class="n">Arguments</span><span class="o">)</span> <span class="n">getProperty</span><span class="o">(</span><span class="n">ARGUMENTS</span><span class="o">).</span><span class="na">getObjectValue</span><span class="o">();</span>    <span class="o">}</span><span class="cm">/**     * @Descrition:执行sampler这个非常重要了,是执行sampler的地方    * */</span>     <span class="nd">@Override</span>    <span class="kd">public</span> <span class="n">SampleResult</span> <span class="n">sample</span><span class="o">(</span><span class="n">Entry</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>        <span class="k">return</span> <span class="n">sample</span><span class="o">();</span>    <span class="o">}</span>  <span class="kd">private</span> <span class="kd">transient</span> <span class="n">MySamplerAbstractImpl</span> <span class="n">impl</span><span class="o">;</span>   <span class="c1">//sampler执行类的抽象类,</span>  <span class="cm">/**     * @Descrition:执行sampler    * */</span>   <span class="kd">public</span> <span class="n">SampleResult</span> <span class="n">sample</span><span class="o">()</span> <span class="o">{</span>        <span class="n">SampleResult</span> <span class="n">res</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>        <span class="k">try</span> <span class="o">{</span>            <span class="k">if</span> <span class="o">(</span><span class="n">impl</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>                                                   <span class="c1">//这里面可以做工厂模式,处理不同的协议sampler</span>                <span class="n">impl</span> <span class="o">=</span> <span class="k">new</span> <span class="n">MySamplerTestSampler</span><span class="o">(</span><span class="k">this</span><span class="o">);</span>                <span class="n">List</span>  <span class="n">argumentList</span><span class="o">=</span><span class="n">getArgumentList</span><span class="o">();</span>        <span class="c1">//获取参数数据,默认的HTTP请求就是在这里组装带参数的URL,传入不同的client的</span>                <span class="n">res</span> <span class="o">=</span> <span class="n">impl</span><span class="o">.</span><span class="na">sample</span><span class="o">(</span><span class="n">argumentList</span><span class="o">);</span>                <span class="n">res</span><span class="o">.</span><span class="na">setSampleLabel</span><span class="o">(</span><span class="n">getName</span><span class="o">());</span>            <span class="o">}</span>            <span class="k">return</span> <span class="n">res</span><span class="o">;</span>        <span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">Exception</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>            <span class="k">return</span> <span class="n">errorResult</span><span class="o">(</span><span class="n">e</span><span class="o">,</span> <span class="k">new</span> <span class="n">SampleResult</span><span class="o">());</span>        <span class="o">}</span>    <span class="o">}</span>  <span class="cm">/**   * @Descrition: 这里面组装表格传过来的数据,传LIST过去 ,这里可以任意自己处理数据格式          * */</span>    <span class="kd">public</span> <span class="n">List</span> <span class="n">getArgumentList</span><span class="o">()</span> <span class="o">{</span>        <span class="n">List</span><span class="o"><</span><span class="n">MySamplerArgument</span><span class="o">></span> <span class="n">list</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ArrayList</span><span class="o">();</span>        <span class="n">PropertyIterator</span> <span class="n">iter</span> <span class="o">=</span> <span class="n">getArguments</span><span class="o">().</span><span class="na">iterator</span><span class="o">();</span>        <span class="k">while</span> <span class="o">(</span><span class="n">iter</span><span class="o">.</span><span class="na">hasNext</span><span class="o">())</span> <span class="o">{</span>            <span class="n">MySamplerArgument</span> <span class="n">item</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>            <span class="n">Object</span> <span class="n">objectValue</span> <span class="o">=</span> <span class="n">iter</span><span class="o">.</span><span class="na">next</span><span class="o">().</span><span class="na">getObjectValue</span><span class="o">();</span>            <span class="k">try</span> <span class="o">{</span>                <span class="n">item</span> <span class="o">=</span> <span class="o">(</span><span class="n">MySamplerArgument</span><span class="o">)</span> <span class="n">objectValue</span><span class="o">;</span>                <span class="n">list</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">item</span><span class="o">);</span>            <span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">ClassCastException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>                <span class="n">log</span><span class="o">.</span><span class="na">warn</span><span class="o">(</span><span class="s">"Unexpected argument type: "</span> <span class="o">+</span> <span class="n">objectValue</span><span class="o">.</span><span class="na">getClass</span><span class="o">().</span><span class="na">getName</span><span class="o">());</span>                <span class="n">item</span> <span class="o">=</span> <span class="k">new</span> <span class="n">MySamplerArgument</span><span class="o">((</span><span class="n">Argument</span><span class="o">)</span> <span class="n">objectValue</span><span class="o">);</span>            <span class="o">}</span>        <span class="o">}</span>        <span class="k">return</span> <span class="n">list</span><span class="o">;</span>    <span class="o">}</span><span class="o">}</span></code>

*4.具体sampler执行类,具体的协议请求发起客户端要你自己定义了,集成到Jar包里就行,所有的类编写完成打JAR包扔到Jmeter/lib/ext下
*


<code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">MySamplerTestSampler</span> <span class="kd">extends</span> <span class="n">MySamplerAbstractImpl</span> <span class="o">{</span><span class="nd">@Override</span>    <span class="kd">protected</span> <span class="n">SampleResult</span> <span class="n">sample</span><span class="o">(</span><span class="n">List</span> <span class="n">list</span><span class="o">)</span> <span class="o">{</span>  <span class="c1">//因为我定时的是list类型 所以这里面是list</span>        <span class="n">SampleResult</span> <span class="n">res</span> <span class="o">=</span> <span class="k">new</span> <span class="n">SampleResult</span><span class="o">();</span>      <span class="n">SampleResult</span> <span class="n">res</span> <span class="o">=</span> <span class="k">new</span> <span class="n">SampleResult</span><span class="o">();</span>        <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"list:"</span><span class="o">+</span><span class="n">list</span><span class="o">.</span><span class="na">toString</span><span class="o">());</span>        <span class="k">try</span> <span class="o">{</span>            <span class="n">String</span> <span class="n">interfaceAddress</span> <span class="o">=</span> <span class="n">getInterfaceAddress</span><span class="o">();</span>            <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"interfaceAddress:"</span><span class="o">+</span><span class="n">interfaceAddress</span><span class="o">);</span>            <span class="n">String</span> <span class="n">interfaceName</span> <span class="o">=</span> <span class="n">getInterfaceName</span><span class="o">();</span>            <span class="n">res</span><span class="o">.</span><span class="na">setSamplerData</span><span class="o">(</span><span class="s">"interfaceAddress:"</span><span class="o">+</span><span class="n">interfaceAddress</span><span class="o">+</span><span class="s">"interfaceName:"</span><span class="o">+</span><span class="n">interfaceName</span><span class="o">);</span>            <span class="n">res</span><span class="o">.</span><span class="na">sampleStart</span><span class="o">();</span>            <span class="n">res</span><span class="o">.</span><span class="na">setResponseData</span><span class="o">(</span><span class="s">"list参数:"</span><span class="o">+</span><span class="n">list</span><span class="o">.</span><span class="na">toString</span><span class="o">(),</span><span class="s">"UTF-8"</span><span class="o">);</span>        <span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">RuntimeException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>            <span class="n">res</span><span class="o">.</span><span class="na">setResponseCode</span><span class="o">(</span><span class="s">"500"</span><span class="o">);</span>            <span class="n">res</span><span class="o">.</span><span class="na">setSuccessful</span><span class="o">(</span><span class="kc">false</span><span class="o">);</span>            <span class="n">res</span><span class="o">.</span><span class="na">setResponseMessage</span><span class="o">(</span><span class="n">e</span><span class="o">.</span><span class="na">toString</span><span class="o">());</span>            <span class="n">e</span><span class="o">.</span><span class="na">printStackTrace</span><span class="o">();</span>            <span class="k">return</span> <span class="n">res</span><span class="o">;</span>        <span class="o">}</span>  <span class="k">catch</span> <span class="o">(</span><span class="n">Exception</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>            <span class="n">res</span><span class="o">.</span><span class="na">setResponseCode</span><span class="o">(</span><span class="s">"500"</span><span class="o">);</span>            <span class="n">res</span><span class="o">.</span><span class="na">setSuccessful</span><span class="o">(</span><span class="kc">false</span><span class="o">);</span>            <span class="n">res</span><span class="o">.</span><span class="na">setResponseMessage</span><span class="o">(</span><span class="n">e</span><span class="o">.</span><span class="na">toString</span><span class="o">());</span>            <span class="n">e</span><span class="o">.</span><span class="na">printStackTrace</span><span class="o">();</span>            <span class="k">return</span> <span class="n">res</span><span class="o">;</span>        <span class="o">}</span> <span class="k">finally</span> <span class="o">{</span>            <span class="n">res</span><span class="o">.</span><span class="na">sampleEnd</span><span class="o">();</span>        <span class="o">}</span>        <span class="k">return</span> <span class="n">res</span><span class="o">;</span>  <span class="o">}</span><span class="o">}</span></code>

5.演示






                                             
0 0