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服务的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: mysql数据库备份心得
- 下一篇: 文章转载-见贤思齐焉,见不贤而内自省也
