Idea+Maven+Jersey2+Tomcat配置Web服务
来源:互联网 发布:linux查看oracle版本 编辑:程序博客网 时间:2024/06/02 06:18
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服务器。(这个很坑爹,希望有大神可以更好的解决)
总结
最近配了两天这个问题,发现还是自己需要多看看原理,这样才能更好地配置环境之类的。
阅读全文
0 0
- Idea+Maven+Jersey2+Tomcat配置Web服务
- Jersey2 + Maven + Tomcat + IntelliJ IDEA 搭建RESTful服务
- IDEA配置web项目、部署Tomcat、配置maven
- Intellij IDEA-IDEA中配置Maven Tomcat
- maven web项目idea配置
- Intellij idea新建maven web项目并与tomcat服务集成
- IDEA + Tomcat + Maven + Web工程打包部署
- idea+maven+Tomcat新建部署web项目
- 社区版idea 基于maven配置tomcat
- IDEA的配置JDK,Tomcat,Maven
- IDEA的配置JDK,Tomcat,Maven
- idea新建项目时配置maven、tomcat
- idea 配置Tomcat(非Maven项目)
- Idea maven远程调试(pom配置tomcat)
- 在idea+maven环境下配置和安装tomcat,并且创建一个web工程
- Intellij IDEA创建的Web项目配置Tomcat并启动Maven项目
- Intellij IDEA创建的Web项目配置Tomcat并启动Maven项目
- 新版idea 运行maven web项目 配置
- 结构体互为成员
- Android使用fitsSystemWindows属性实现–状态栏【status_bar】各版本适配方案
- 小程序 语音识别(三)
- laravel和vuejs第一个最简单的示例hello Vuejs
- [LeetCode]264. Ugly Number II
- Idea+Maven+Jersey2+Tomcat配置Web服务
- java使用TCP协议
- 类的设计
- 【hadoop】hadoop启动后jps无法查看守护进程
- Two sum 两数之和
- Day015
- Mysql建表与索引使用规范整理
- iOS开发网络篇 一一 复杂的JSON解析-数据显示
- 送书福利| Python 完全自学手册