Deploy 1.x Jersey WebServices on Tomcat

泪奔,调了两天终于调成了。先说说遇到的问题

Jersey 1.x 和 2.x项目内的config不同,且jersey 2.x 把 com.sun.jersey的路径改成了org.glassfish.jersey,这是最大的坑。笔者一开始没注意,开着1.x的教程用了2.x的包,即使后来发现了这个问题,但由于1.x陷的太深而改不回来了。

同学们会说,那改用1.x的包不就好啦。事实并非那么简单,jersey1.1和1.9的配置也不同,且官方现在只提供1.9的下载,下载下来有N多jar包,好吧,按照教程做,结果tomcat蹦了。仔细查看教程的tomcat版本是6.0,我用的是8.0.

这真是落泪了,变量一路增加,让我真是日了狗的心情都有了,两天调下来真是泪奔,还好最后发现了一篇靠谱的文章,现在来具体说说方法

环境

1. asm-3.1.jar

2. gson-2.3.1.jar

3. jersey-bundle-1.17.1.jar

4. mysql-connector-java-5.1.38-bin.jar

5. Tomcat 8.0

其实真正deploy ws时用到的只有3

项目结构

2. DAO&DTO

package com.qad.yab.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class CVCJDBC {
	private Connection conn;

	public Connection getConn() throws ClassNotFoundException, SQLException {
		if (null != conn) {
			return conn;
		} else {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test1", "cvc", "");
			System.out.println("connect success");
			return conn;
		}
	}
}

  

package com.qad.yab.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

import com.qad.yab.dto.User;

public class CVCUserDAO {
	private Connection conn;
	public ArrayList<User> getUsers() throws Exception {
		conn = new CVCJDBC().getConn();
		String sql = "select * from user;";
		PreparedStatement stmt = conn.prepareStatement(sql);
		ResultSet result = stmt.executeQuery();
		ArrayList<User> datas = new ArrayList<User>();
		while (result.next()) {

			User data = new User();
			data.setId(result.getInt("id"));
			data.setLoginID(result.getString("LoginID"));
			data.setName(result.getString("name"));
			data.setEmail(result.getString("email"));
			datas.add(data);
		}
		stmt.close();
		return datas;
	}
}

  

package com.qad.yab.dto;

public class User {
	private int     id;
    private String  loginID;
    private String  name;
    private String  email;
    private boolean active;

    /**
     * Default constructor to create new user
     */
    public User() {
        super();
    }

    /**
     * Create new user with user name
     *
     * @param name
     *            the login ID
     */
    public User(String loginID) {
        super();
        this.loginID = loginID;
    }

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @param id
     *            the id to set
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * @return the loginID
     */
    public String getLoginID() {
        return loginID;
    }

    /**
     * @param loginID
     *            the loginID to set
     */
    public void setLoginID(String loginID) {
        this.loginID = loginID;
    }

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @param name
     *            the name to set
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @return the email
     */
    public String getEmail() {
        return email;
    }

    /**
     * @param email
     *            the email to set
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * @return the active
     */
    public boolean isActive() {
        return active;
    }

    /**
     * @param active
     *            the active to set
     */
    public void setActive(boolean active) {
        this.active = active;
    }
}

  4. WebService

package com.qad.yab.ws;

import java.util.ArrayList;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

import com.google.gson.Gson;
import com.qad.yab.dao.CVCUserDAO;
import com.qad.yab.dto.User;

@Path("/webService")
public class UserService {

	@GET
	@Path("/cvcuser")
	@Produces("application/json")
	public String user() throws Exception {
		String users = null;
		CVCUserDAO dao = new CVCUserDAO();
		ArrayList<User> datas = dao.getUsers();
		Gson gson = new Gson();
		users = gson.toJson(datas);

		return users;
	}
}

  5. web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	id="WebApp_ID" version="3.1">
	<display-name>YAB-CVC-WS</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
	<servlet>
		<servlet-name>ServletService</servlet-name>
		<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer  </servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>ServletService</servlet-name>
		<url-pattern>/REST/*</url-pattern>
	</servlet-mapping>

</web-app>

  特别需要提醒的是servlet class,使用不同版本的jar包所用的class是不同的T_T,深受其害的飘过

http://localhost:8080/YAB-CVC-WS/REST/webService/cvcuser

YAB-CVC-WS:项目名

REST:URL-PATTERN

webService: 在WS类中有定义

cvcuser: 在WS类中有定义

附解我大坑的文章

http://www.dineshonjava.com/2013/06/restful-web-services-with-jersey-jax-rs.html#.VxCy7Pl96Ul

时间: 2024-12-29 06:09:23

Deploy 1.x Jersey WebServices on Tomcat的相关文章

基于jersey和Apache Tomcat构建Restful Web服务(一)

基于jersey和Apache Tomcat构建Restful Web服务(一) 现如今,RESTful架构已然成为了最流行的一种互联网软件架构,它结构清晰.符合标准.易于理解.扩展方便,所以得到越来越多网站的采用.那么问题来了,它是什么呢? 起源 REST(Representational state transfer)在 2000 年由 Roy Fielding 在博士论文中提出,他是 HTTP 规范 1.0 和 1.1 版的首席作者之一. REST 中最重要的概念是资源(resources

基于jersey和Apache Tomcat构建Restful Web服务(二)

基于jersey和Apache Tomcat构建Restful Web服务(二) 上篇博客介绍了REST以及Jersey并使用其搭建了一个简单的“Hello World”,那么本次呢,再来点有趣的东西,当然也是很简单了,仅仅是在路径中包含参数而已了.接下来开始动手实践吧. 在路径中包含参数 接下来就在上次的基础上进行改动即可,或者是再添加一个方法,随意了,这个方法主要就是在路径中加入输入的参数,并且根据参数的不同,它的返回值也不同,返回值为“Hello”+你输入的参数.这里用到了“PathPar

Deploy WebServices on Tomcat

JAX-WS Dependencies By default, Tomcat does not comes with any JAX-WS dependencies, So, you have to include it manually. 1. Go here http://jax-ws.java.net/.2. Download JAX-WS RI distribution.3. Unzip it and copy following JAX-WS dependencies to WEB-I

使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务

RESTful Web 服务简单介绍 REST 在 2000 年由 Roy Fielding 在博士论文中提出,他是 HTTP 规范 1.0 和 1.1 版的首席作者之中的一个. REST 中最重要的概念是资源(resources),使用全球 ID(通常使用 URI)标识. client应用程序使用 HTTP 方法(GET/ POST/ PUT/ DELETE)操作资源或资源集.RESTful Web 服务是使用 HTTP 和 REST 原理实现的 Web 服务.通常,RESTful Web 服

How to create a Maven web app and deploy to Tomcat - fast

原文地址: http://www.blogjava.net/sealyu/archive/2010/01/08/308706.html Procedure Prerequisites and Assumptions Step One - Prepare the Tomcat Manager application Step Two - Create a New Web App Using Maven Step Three - Define Your Tomcat Server in Maven

jersey + tomcat 实现restful风格

本文参考 http://www.cnblogs.com/bluesfeng/archive/2010/10/28/1863816.html 环境: idea 15.0.2 jersey 1.3 tomcat 7.0 maven 3.3.3 1.idea 基于maven 构建webapp 略过 2.项目构建完成之后pom.xml 文件加入项目所需包: <dependency> <groupId>junit</groupId> <artifactId>junit

Tomcat 部署war包大小超出限制的大小(严重: HTMLManager: FAIL - Deploy Upload Failed, Exception)

陈科肇 ============== 查看tomcat安装目录下的logs目录下的manager.2015-02-09.log文件可发现: 严重: HTMLManager: FAIL - Deploy Upload Failed, Exception: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size

tomcat 7 WARNING: A context path must either be an empty string or start with a &#39;/&#39; and do not end with a &#39;/&#39;. The path [/] does not meet these criteria and has been changed to []

tomcat 7 WARNING: A context path must either be an empty string or start with a '/' and do not end with a '/'. The path [/] does not meet these criteria and has been changed to [] 解决方法: 将server.xml中的<Context docBase="../deploy" path="/&q

IntelliJ IDEA2017 + Tomcat 设置热部署

1.点击idea中tomcat设置 2.点击deployment查看Deploy at the server startup 中tomcat每次所运行的包是 xxxx:war 还是其他,如果是xxxx:war包,请更换 3.点击旁边绿色加号,选择 xxxx:war exploded ,然后将 xxxx:war 点击红色删除掉 4.然后在server中 将 "On Update action"."On frame deactivation" 都选择 update cl