天天看點

RESTEasy搭建

1.所需要引入的依賴

一種是自己導包,一種是用內建的包

第一種,需要配置web.xml

<dependency>
  <groupId>org.jboss.resteasy</groupId>
  <artifactId>resteasy-jaxrs</artifactId>
  <version>2.2.1.GA</version>
</dependency>
<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.16.10</version>
</dependency>
<dependency>
  <groupId>org.jboss.resteasy</groupId>
  <artifactId>jaxrs-api</artifactId>
  <version>2.1.0.GA</version>
  <scope>compile</scope>
</dependency>
           

第二種,可以不用配置web.xml

<dependencies>
    <dependency>
      <groupId>com.paypal.springboot</groupId>
      <artifactId>resteasy-spring-boot-starter</artifactId>
      <version>2.3.0-RELEASE</version>
    </dependency>
</dependencies>
           

2.web.xml配置,資源注冊資源有三種方式

手動注冊,手動指定,自動掃描

開始時,自動掃描一直無法啟動,網上查到是jdk和tomcat版本問題,用的jdk1.8和tomcat7,換成tomcat8之後,完美運作。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>

  <display-name>Archetype Created Web Application</display-name>
   <!--方法3: 使用自動Scan的模式,必須啟動ResteasyBootstrap監聽 -->
  <context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>true</param-value>
  </context-param>
  <!--方法3: 自動掃描結束-->
  <!--方法2: 手動注冊開始-->
  <!--<context-param>-->
     <!--<param-name>resteasy.resources</param-name>-->
     <!--<param-value>com.RestApplication</param-value>-->
  <!--</context-param>-->
  <!--方法2: 手動注冊結束-->

  <!-- 對應<servlet-mapping>的url,必須設定prefix做初始過濾,通路例子:http://localhost:8080/wang/service/userservice/users -->
  <context-param>
    <param-name>resteasy.servlet.mapping.prefix</param-name>
    <param-value>/resteasy</param-value>
  </context-param>

  <!-- 啟動服務監聽器,初始化resteasy核心元件 -->
  <listener>
    <listener-class>
      org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
    </listener-class>
  </listener>

  <!-- url服務請求的分發控制器 -->
  <servlet>
    <servlet-name>resteasy-servlet</servlet-name>
    <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
    <!--方法1  手動指定Application  start-->
    <!--<init-param>-->
      <!--<param-name>javax.ws.rs.Application</param-name>-->
      <!--<param-value>com.RestApplication</param-value>-->
    <!--</init-param>-->
    <!--方法1  手動指定Application  end-->
  </servlet>
  <servlet-mapping>
    <servlet-name>resteasy-servlet</servlet-name>
    <url-pattern>/resteasy/*</url-pattern>
  </servlet-mapping>

</web-app>
        
           

3.配置application

package com;

import javax.ws.rs.ApplicationPath;
//import java.util.HashSet;
//import java.util.Set;

@ApplicationPath("/resteasy")//手動指定時不需要配置
public class RestApplication extends javax.ws.rs.core.Application{
//    -------------- 手動指定需要自己添加資源----------------
//    private Set<Object> singletons = new HashSet<Object>();
//    /*在這裡增加資源類*/
//    public RestApplication () {
//        singletons.add(new service());
//    }
//    @Override
//    public Set<Object> getSingletons() {
//        return singletons;
//    }
//     -------------- 手動指定需要自己添加資源----------------
}
           
package com;
import org.jboss.resteasy.annotations.Form;

import javax.ws.rs.*;

@Path("/ser")
public class service {


    @GET
    @Path("/hello")
    @Produces("application/json")
    public String getHello(){
        return "hello,this is a get request";
    }

    @GET
    @Path("/{id}")
    @Produces("application/json")
    public String pathParam(@PathParam("id") String id){
        return "pathParam is  " + id;
    }


    @GET
    @Path("/query")
    @Produces("application/json")
    public String queryParam(@QueryParam("name") String name){
        return "queryParam is " + name;
    }

    @GET
    @Path("/test/{id}")
    @Produces("application/json")
    public String test(@QueryParam("name") String name,@PathParam("id") String id){
        return "queryParam is " + name + ";PathParam is " + id;
    }

    @GET
    @Path("/login")
    public String test(){
        return "login.jsp";
    }

    @POST
    @Path("/post")
    @Produces("application/json")
    public String post(@Form Emp emp){

        return emp.getName();
    }

    @PUT
    @Path("/put")
    @Produces("application/json")
    public String put(@Form Emp emp){

        return emp.getName();
    }

    @DELETE
    @Path("/remove/{id}")
    @Produces("application/json")
    public String remove(@PathParam("id") String id){

        return id+"";
    }

}
           
package com;

import javax.ws.rs.FormParam;

public class Emp {

    @FormParam("name")
    String name;
    @FormParam("age")
    int age;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Emp(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Emp() {
    }

    @Override
    public String toString() {
        return "Emp{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
           

4.前台頁面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>歡迎登入</title>
</head>
<%--<script type="text/javascript" src="jquery/jquery.js"></script>--%>
<script src="jquery/jquery-1.10.2.js"></script>
<body>
    welcome to you!
    <button onclick="hello()">hello</button>
    <button onclick="get()">hello</button>
    <button onclick="post()">hello</button>
    <button onclick="put()">hello</button>
    <button onclick="remove()">hello</button>
    <span id="span"></span>
</body>
<script>
    function hello(){
        var xmlhttp;
        if (window.XMLHttpRequest)
        {
            //  IE7+, Firefox, Chrome, Opera, Safari 浏覽器執行代碼
            xmlhttp=new XMLHttpRequest();
        }
        else
        {
            // IE6, IE5 浏覽器執行代碼
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange=function()
        {
            if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                document.getElementById("span").innerHTML=xmlhttp.responseText;
            }
        }
        xmlhttp.open("GET","/resteasy/ser/hello",true);
        xmlhttp.send();
    }

    function get(){
        $.get("/resteasy/ser/hello",function(data){
            debugger
            alert(data);
        },'text');
    }
    function post(){
        $.post("/resteasy/ser/post",{name:'tom',age:12},function(result){
            $("span").html(result);
        },'text');
    }
    function put(){
        $.ajax({
            url:"/resteasy/ser/put",
            type:"PUT",
            // contentType:"application/json",//設定請求參數類型為json字元串
            data:{name:'tom',age:12},//将json對象轉換成json字元串發送
            dataType:"text",
            success:function(result){
                alert(result);
            },

        });
    }

    function remove(){
        $.ajax({
            url:"/resteasy/ser/remove/12",
            type:"DELETE",
            // contentType:"application/json",//設定請求參數類型為json字元串
            dataType:"text",
            success:function(result){
                alert(result);
            },

        });
    }

</script>
</html>
           

以上是第一種自己導入依賴,下面介紹第二種

<dependency>
      <groupId>com.paypal.springboot</groupId>
      <artifactId>resteasy-spring-boot-starter</artifactId>
      <version>2.3.0-RELEASE</version>
</dependency>
           
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
</web-app>
        
           
package com;

import org.springframework.stereotype.Component;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@Component
@ApplicationPath("/v1")
public class ApplicationPathImpl extends Application {

}
           
package com;

import org.springframework.stereotype.Component;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;

@Component
@Path("/province")
public class ExternalFacadeImpl{

    /**
     * http://localhost:8080/v1/province/city/1
     * @param id
     * @return
     */
    @Path("/city/{id}")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public String getCity(@PathParam("id") Long id) {
        return id+"";
    }
}

           
RESTEasy搭建

可以正常通路

繼續閱讀