日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Idea+Maven+Jersey2+Tomcat配置Web服务

發布時間:2024/2/28 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Idea+Maven+Jersey2+Tomcat配置Web服务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Idea+Maven+Jersey2+Tomcat配置Web服務

關于在Idea中使用Maven來管理配置Jersey2服務的文章有很多,本文主要總結自己踩過的一些坑,希望對大家有所幫助。


基本環境配置

  • 可以參考博客:
    https://www.cnblogs.com/huaxingtianxia/p/5581259.html。
    https://www.cnblogs.com/MarsCheng/p/7245292.html。
  • 需要注意的是包的導入,缺失一些包會導致服務無法正常運行。主要的包包括:
    服務器:jersey-server.jar 、jersey-container-servlet-core.jar、jersey-container-servlet.jar、javax.ws.rs-api-2.0.jar
    客戶端:jersey-client.jar
    common:jersey-common.jar
    hk2:jersey-hk2.jar
    json支持:在Jersey2.0中需要使用 Jackson1.9 才能支持json。
  • web.xml文件中配置jersey2中的繼承ResourceConfig子類的servlet。在url-pattern中設置/*即可,不用加上工程名稱。因為項目在部署到tomcat服務器上時,默認是加上項目名進行訪問的。(當時這個地方搞了好久)

    <servlet><servlet-name>JerseyServlet</servlet-name><servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class><init-param><param-name>javax.ws.rs.Application</param-name><param-value>app.MyRregister</param-value></init-param><load-on-startup>1</load-on-startup> </servlet> <servlet-mapping><servlet-name>JerseyServlet</servlet-name><url-pattern>/*</url-pattern> </servlet-mapping>
  • Idea配置運行的tomcat服務器:端口和將要發布到的tomcat端口保持一致,否則無法訪問。(另外一個坑)

  • Idea配置運行的tomcat服務器:Deployment中war exploded中的Application context加上 “/+項目名稱”,這樣可以你平常在idea運行tomcat測試的API和你將來發布到tomcat的api保持一致。(后來發現不設置好像加上項目名也可以訪問,建議加上,養成良好的習慣)

  • 在Idea啟動tomcat服務時,遇到類似如下問題時候:

    org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1739)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:482)at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:431)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468)at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309)at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401)at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)at sun.rmi.transport.Transport$1.run(Transport.java:200)at sun.rmi.transport.Transport$1.run(Transport.java:197)at java.security.AccessController.doPrivileged(Native Method)at sun.rmi.transport.Transport.serviceCall(Transport.java:196)at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)at java.security.AccessController.doPrivileged(Native Method)at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.NoClassDefFoundError: javax/ws/rs/ProcessingException

    一般由于jersey包沒有導導入完全,但是我發現maven里面都添加了。其實“project setting”->“Artifacts”->“* exploded”->“WEB-INF”->“lib”中發現沒有把“javax.ws.rs-api:2.1”這個包加到tomcat的運行環境中,導入啟動tomcat的過程出錯,因此需要手動點擊添加,隨后即可正常啟動tomcat服務器。(這個很坑爹,希望有大神可以更好的解決)

    eclipse里面如果報這個錯誤可以直接把“javax.ws.rs-api:2.1”這個包從pom報中刪除即可正常導入。


  • 總結

    最近配了兩天這個問題,發現還是自己需要多看看原理,這樣才能更好地配置環境之類的。

    總結

    以上是生活随笔為你收集整理的Idea+Maven+Jersey2+Tomcat配置Web服务的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。