1. 程式人生 > >廣東11選5平臺出租框架應用實踐

廣東11選5平臺出租框架應用實踐

provided injector alibaba ssis event @override static protect n)

廣東11選5平臺出租 Q1446595067 在於記錄研究某個項目時遇到的restful架構技術jersey框架,這裏以自己寫的一個簡單例子作為切入jersey的參考。本次使用的架構是jersey+guice,jersey作為rest服務框架,guice作為di框架。使用內嵌jetty作為應用容器,舍棄web.xml配置。

進入正題:

一、maven依賴:

以下所列的依賴並非最小集。

  <dependencies>

<dependency>

  <groupId>org.eclipse.jetty</groupId>

  <artifactId>jetty-server</artifactId>

  <version>8.1.19.v20160209</version>

</dependency>

<dependency>

  <groupId>org.eclipse.jetty</groupId>

  <artifactId>jetty-security</artifactId>

  <version>8.1.19.v20160209</version>

</dependency>

<dependency>

  <groupId>org.eclipse.jetty</groupId>

  <artifactId>jetty-servlet</artifactId>

  <version>8.1.19.v20160209</version>

</dependency>

<dependency>

  <groupId>org.eclipse.jetty</groupId>

  <artifactId>jetty-webapp</artifactId>

  <version>8.1.19.v20160209</version>

</dependency>

    <dependency>

        <groupId>javax.servlet</groupId>

        <artifactId>javax.servlet-api</artifactId>

        <version>3.1.0</version>

        <scope>provided</scope>

    </dependency>

<dependency>

  <groupId>org.codehaus.jackson</groupId>

  <artifactId>jackson-core-asl</artifactId>

  <version>1.9.9</version>

</dependency>

<dependency>

  <groupId>org.codehaus.jackson</groupId>

  <artifactId>jackson-jaxrs</artifactId>

  <version>1.9.9</version>

</dependency>

<dependency>

  <groupId>org.codehaus.jackson</groupId>

  <artifactId>jackson-xc</artifactId>

  <version>1.9.9</version>

</dependency>

<dependency>

  <groupId>org.codehaus.jackson</groupId>

  <artifactId>jackson-mapper-asl</artifactId>

  <version>1.9.13</version>

</dependency>

    <dependency>

        <groupId>org.glassfish.jersey.containers</groupId>

        <artifactId>jersey-container-servlet</artifactId>

        <version>2.19</version>

    </dependency>

    <dependency>

    <groupId>org.glassfish.jersey.core</groupId>

    <artifactId>jersey-client</artifactId>

    <version>2.19</version>

</dependency>

<dependency>

    <groupId>org.glassfish.jersey.containers</groupId>

    <artifactId>jersey-container-jetty-servlet</artifactId>

    <version>2.19</version>

</dependency>

    <dependency>

        <groupId>com.squarespace.jersey2-guice</groupId>

        <artifactId>jersey2-guice</artifactId>

        <version>0.10</version>

    </dependency>

<dependency>

  <groupId>com.google.inject.extensions</groupId>

  <artifactId>guice-servlet</artifactId>

  <version>4.0</version>

</dependency>

<dependency>

  <groupId>com.google.inject</groupId>

  <artifactId>guice</artifactId>

  <version>4.0</version>

</dependency>

<dependency>

  <groupId>com.google.inject.extensions</groupId>

  <artifactId>guice-assistedinject</artifactId>

  <version>4.0</version>

</dependency>

<dependency>

  <groupId>com.google.inject.extensions</groupId>

  <artifactId>guice-persist</artifactId>

  <version>4.0</version>

</dependency>

  <dependency>

  <groupId>com.alibaba</groupId>

  <artifactId>fastjson</artifactId>

  <version>1.2.21</version>

  </dependency>

<dependency>

    <groupId>commons-logging</groupId>

    <artifactId>commons-logging</artifactId>

    <version>1.2</version>

</dependency>

        <dependency>

        <groupId>org.slf4j</groupId>

        <artifactId>slf4j-api</artifactId>

        <version>1.7.2</version>

      </dependency>

      <dependency>

        <groupId>org.slf4j</groupId>

        <artifactId>slf4j-log4j12</artifactId>

        <version>1.7.2</version>

      </dependency>

  </dependencies>

二、內嵌jetty容器及配置

import java.util.Collections;

import java.util.List;

import org.eclipse.jetty.server.Server;

import org.eclipse.jetty.server.nio.SelectChannelConnector;

import org.eclipse.jetty.servlet.ServletHolder;

import org.eclipse.jetty.util.resource.Resource;

import org.eclipse.jetty.util.thread.QueuedThreadPool;

import org.eclipse.jetty.webapp.WebAppContext;

import org.glassfish.jersey.servlet.ServletContainer;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import com.google.inject.Module;

import com.google.inject.servlet.GuiceFilter;

import com.newland.jerseyTest.moudle.MyModule;

import com.squarespace.jersey2.guice.JerseyGuiceServletContextListener;

public class JerseyTestServer {

private static Logger LOG = LoggerFactory.getLogger(JerseyTestServer.class);

private Server server = null;

public void run() throws Exception{

LOG.debug("starting......................");

server = new Server();

WebAppContext app = new WebAppContext();

app.setContextPath("/");

app.setBaseResource(Resource.newClassPathResource(""));

JerseyGuiceServletContextListener jgscl = new JerseyGuiceServletContextListener() {

@Override

protected List<? extends Module> modules() {

return Collections.singletonList(new MyModule());

}

};

app.addEventListener(jgscl);//配置監聽器

app.addFilter(GuiceFilter.class, "/*", null);//配置過濾器

ServletHolder sh = new ServletHolder(ServletContainer.class);

sh.setInitParameter("jersey.config.server.provider.packages", "com.newland.jerseyTest.controller");//resource資源包路徑

sh.setInitOrder(1);

app.addServlet(sh, "/my/v1/*");//配置servlet,servlet的前綴

server.setHandler(app);//啟用web配置

server.setThreadPool(new QueuedThreadPool(25));

SelectChannelConnector conn = new SelectChannelConnector();

conn.setPort(8088);//服務端口

conn.setMaxIdleTime(600000);

server.addConnector(conn);

server.setSendServerVersion(false);

server.setStopAtShutdown(true);

app.start();

server.start();//服務啟動

}

public void stop(){

try {

server.stop();

} catch (Exception e) {

LOG.error("stop failed.", e);

}

}

public static void main(String[] args) {

JerseyTestServer server = null;

try{

server = new JerseyTestServer();

if(server != null){

server.run();

}

} catch(Exception e){

LOG.error("Start failed.", e);

if(server != null)server.stop();

}

}

}

三、自定義module
guice創建injector(guice註入工具)需要一個module參數,該module是告訴guice如何在註入時註入哪個類的實例。

import com.google.inject.AbstractModule;

import com.google.inject.servlet.ServletModule;

import com.newland.jerseyTest.service.MyService;

import com.newland.jerseyTest.service.impl.MyServiceImpl;

public class MyModule extends AbstractModule {

@Override

protected void configure() {

install(new ServletModule(){

protected void configureServlets(){

bind(MyService.class).to(MyServiceImpl.class);//在需要註入MyService對象時,guice會據此註入MyServiceImpl實例

}

});

}

}

四、reset接口

這裏可以體現reset風格的特點,參數可以在請求的uri中傳遞。我這裏的接口只是用來接收請求和返回響應,業務處理交個service層處理,類似spring的controller或struts的action層。

import java.util.HashMap;

import java.util.Map;

import javax.ws.rs.GET;

import javax.ws.rs.Path;

import javax.ws.rs.PathParam;

import javax.ws.rs.Produces;

import javax.ws.rs.core.Context;

import javax.ws.rs.core.HttpHeaders;

import javax.ws.rs.core.MediaType;

import javax.ws.rs.core.Response;

import javax.ws.rs.core.UriInfo;

import com.alibaba.fastjson.JSON;

import com.google.inject.Inject;

import com.newland.jerseyTest.service.MyService;

@Path("/test")

public class MyController{

@Inject

private MyService myService;

@GET

@Path("{userName}")

@Produces(MediaType.APPLICATION_JSON)

public Response giveAnswer(@Context HttpHeaders headers, @Context UriInfo uri, 

@PathParam("userName") String userName){

String ret = myService.returnSomething(userName);

Map<String, String> answer = new HashMap<String, String>();

answer.put("message", ret);

return Response.status(200).entity(JSON.toJSONString(answer)).build();

}

}

五、業務處理

業務處理接口

public interface MyService {

public String returnSomething(String userName);

}

業務處理實現

import com.newland.jerseyTest.service.MyService;

public class MyServiceImpl implements MyService {

@Override

public String returnSomething(String userName) {

return "Hello " + userName + " !!!";

}

}

六、測試

ok,一個使用jersey實現的rest服務就完成了。

廣東11選5平臺出租框架應用實踐