新建maven web项目(环境:Windows 10,eclipse Mars.2 Release (4.5.2),jdk1.8.0_131(64-Bit),apache-maven-3.5.0,apache-tomcat-8.0.36)
需要先在新建的Maven工程的src/main下新建取名java的文件夹,然后在此文件夹下新建包。
注:新建包及类均是在src下进行,而不是在Java Resources下。
配置maven pom.xml
<!-- 配置jersey所需dependency -->
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.17</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.17</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.17</version>
</dependency>
配置web.xml
<!-- 配置servlet -->
<servlet>
<servlet-name>jersey-rest</servlet-name>
<!-- servlet-class建议使用org.glassfish -->
<servlet-class>
org.glassfish.jersey.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.test</param-value>
</init-param>
<!-- 1、load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。
2、它的值必须是一个整数,表示servlet应该被载入的顺序
3、当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;
4、当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。
5、正数的值越小,该servlet的优先级越高,应用启动时就越先加载。
6、当值相同时,容器就会自己选择顺序来加载。
所以,<load-on-startup>x</load-on-startup>,中x的取值1,2,3,4,5代表的是优先级,而非启动延迟时间 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-rest</servlet-name>
<!-- 基本使用/rest/*,去掉"/rest"会报错 -->
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
新建JSP页面,创建Form表单
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello Jersey</title>
</head>
<body>
<!-- 创建表单,设置action跳转的资源路径,指定表单提交为get -->
<form action="/JerseyUser/rest/demo/user" method="get">
id:<input type="text" id="id" name="id"/><br>
name:<input type="text" id="name" name="name"/><br>
<input type="submit" value="submit"/>
</form>
</body>
</html>
创建User实体类
package com.test.entity;
public class User{
/*创建User Bean并添加getter,setter方法,有无序列化都可*/
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private String name;
}
创建rest接口,访问URL资源
package com.test.usertest;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import com.test.entity.User;
@Path("demo")
public class HelloJersey {
/*返回一个简单的hello Jersey字符串*/
/*通过指定路径,访问请求的资源*/
@GET
/*指定返回给浏览器的Mime类型*/
@Produces(MediaType.TEXT_PLAIN)
public String sayHello(){
return "hello Jersey";
}
/*返回一个用JSON封装的User对象*/
@GET
/*Get请求的路径*/
@Path("/user")
/*指定接收的Mime类型*/
@Consumes("application/x-www-form-urlencoded")
/*指定返回给浏览器的Mime类型为JSON*/
@Produces(MediaType.APPLICATION_JSON)
public User toUser(
/*获取URL参数*/
@QueryParam("id") int id,
@QueryParam("name") String name
){
User user = new User();
if(id==1&&name.equals("zaza")){
user.setId(id);
user.setName(name);
return user;
}else{
user.setId(0);
user.setName(null);
return user;
}
}
}
另外,访问Form通过POST方法的资源
@POST
@Consumes("application/x-www-form-urlencoded")
@Produces(MediaType.APPLICATION_JSON)
public User zaza(
@FormParam("id") int id,
@FormParam("name") String name){
//具体实现这里就不给出了
}
到这里代码部分基本上写完了,下面是本人在项目中时遇到的一些问题及解决方案
新建maven工程时,webapp下会在index.jsp中报错
解决办法:删掉默认的index.jsp,自己新建一个index.jsp
此时,可能会遇到index.jsp报错,如图:
解决办法:右键项目,Build Path–>Configure Build Path,在Libraries下单击Add Library–>Server Runtime选择对应的Tomcat,然后Apply–>OK
以上就是项目的全部内容,因为这是本人第一次写Blog,有误之处请指出