我有嵌入式碼頭服務器我想創建RESTful GET服務,它返回XML/JSON格式作爲響應pojo。任何人都可以給我一個基本的例子,如何編寫碼頭的處理程序?給出的示例僅顯示文本類型輸出。嵌入jetty與json/xml響應
回答
我建議你使用Jersey java REST框架(http://jersey.java.net/)。該框架很容易學習。您可以像JAXB一樣使用Object to Xml轉換器來讓您的生活更輕鬆。
嗯。我有同樣的問題。 我通過一個實用jar文件解決了這個問題,該文件讀取一個屬性文件來爲Jersey Servlet,處理程序,靜態文件,分解的webapps等配置上下文,以便生成的應用程序jar自動配置上下文並從命令行運行。
基本上我有一個HandlerCollection,並連續添加servlet到它。
ServletHolder servletHolder = new ServletHolder(ServletContainer.class);
servletHolder.setInitParameter(
"com.sun.jersey.config.property.packages",
clazz.getPackage().getName()
);
ServletContextHandler context = new ServletContextHandler(
server,
"/some_path",
ServletContextHandler.SESSIONS
);
context.setClassLoader(Thread.currentThread().getContextClassLoader());
context.addServlet(servletHolder, "/");
context.setHandler(handler);
handlers.addHandler(context);
然後,我有一個例子新澤西州的servlet:
@Path("/user1")
public class JerseyResource1 {
public JerseyResource1() {
}
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public ExamplePojo getUser() {
log.debug("Inside ExampleJerseyResource1 getUser()");
ExamplePojo pojo = new ExamplePojo();
pojo.setNumber(100);
pojo.setWords("hello world 1");
return pojo;
}
}
第一個電話被擊中澤西一個PERF配置的東西,但它只是桃色。
JUnit測試看起來是這樣的:
@BeforeClass
public static void setUpClass() throws Exception {
Thread startupThread = new Thread() {
@Override
public void run() {
try {
System.out.println("Starting Jetty...");
JettyMain.main(new String[] {});
// CHECKSTYLE_OFF: Because it does throw Exception!
} catch (Exception ex) {
// CHECKSTYLE_ON
System.err.println("Error Starting Jetty: " + ex);
}
}
};
startupThread.start();
System.out.println("Waiting a few seconds to ensure Jetty is started");
Thread.sleep(2000);
System.out.println("Ok. Starting tests");
}
@AfterClass
public static void tearDownClass() throws Exception {
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource service = client.resource(
UriBuilder.fromUri(
"http://localhost:8080/admin/stop?secret=YourSecret"
).build());
service.get(String.class);
System.out.println("Sent stop command");
}
@Test
public void testJersey1() {
System.out.println("Jersey1 returns correct 200 and body");
ClientResponse response = getService(
"http://localhost:8080/jersey1/user1/"
).get(ClientResponse.class);
assertEquals("Response is 200", 200, response.getStatus());
assertEquals(
"Valid body",
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
+ "<examplePojo><number>100</number><words>hello world 1</words></examplePojo>",
response.getEntity(String.class)
);
System.out.println("--> WORKED!");
}
捲曲調用看起來是這樣的:
# Show static public files folder:
curl -v http://localhost:8080/public/x.html
curl -v http://localhost:8080/public/x.txt
# Use baseline handlers:
curl -v http://localhost:8080/handler1/?url=hello
curl -v http://localhost:8080/handler2/?url=hello
# Use raw servlets with specific contexts:
curl -v http://localhost:8080/servlet1?url=hello
curl -v http://localhost:8080/servlet2?url=hello
# Call a Jersey servlet using default Accept header (xml):
curl -v http://localhost:8080/jersey1/user1/
curl -v http://localhost:8080/jersey2/user2/
# Request Jersey servlet but want JSON:
curl -v --header "Accept:application/json" http://localhost:8080/jersey1/user1/
# Use an exploded webapp:
curl -v http://localhost:8080/www/x.html
# Stop the server:
curl -v http://localhost:8080/admin/stop?secret=MySecret
呃......下面是不是一個插件。認真。它可能會被該公司拒絕......
我有一個完整的解決方案,通過它將1個jar文件添加爲依賴項和幾個小文件(app.properties,classpath.sh,log4j.properties和run.sh)爲許多上下文,Handlers,Servlets,JerseyServlets,StaticFiles和ExplodedWebApps完全配置Jetty8實例。結果是一個自包含的可執行Jar,幾乎毫不費力地重新啓動,重新加載,停止等。另外一個好處是它可以作爲一個僞類加載器,避免瓶頸。 (一個副作用是,mvn clean test也可以對付它)
如果有人有興趣,ping我和我可以看看公司是否允許我打開它並在GitHub上獲取它。 或者甚至通過我自己的網站http://www.randomactsofsentience.com
僅供參考嵌入碼頭一般將其記錄下來......我創建了一個github上的項目,我謙恭地提出可以覆蓋大部分的是此起彼伏的嵌入式碼頭的問題。詳情請參閱https://github.com/ZenGirl/EmbeddedJettyRepository。
- 1. 使用嵌入式Jetty嵌入式Jetty向前servlet響應到JSP
- 2. 強制Jetty 7.0以響應與HTTP/1.0
- 3. 嵌入式Jetty入門
- 4. 嵌入式Jetty和圖標
- 5. 將Jetty嵌入JavaSE項目
- 6. 嵌入式jetty maven profile.xml
- 7. Jetty BadMessage嵌入式WebSocket Servlet
- 8. 嵌入式碼頭響應
- 9. 嵌入YouTube IFrame的響應
- 10. 使用模塊化XmlConfiguration嵌入Jetty 9.3
- 11. 嵌入Jetty的MySQL連接池
- 12. 嵌入式Jetty關機異常
- 13. 嵌入式Jetty + Spring MVC主要方法
- 14. 嵌入式Jetty測試Spring-Rest服務
- 15. 嵌入式Jetty IllegalStateException:已提交
- 16. 帶嵌入式Jetty的Tapestry webapp
- 17. 如何使用嵌入式Jetty和JSFUnit?
- 18. java.lang.IncompatibleClassChangeError與嵌入式Jetty和澤西島(無GAE)
- 19. 我在哪裏將Jetty.xml文件與Jetty嵌入在一起?
- 20. Jetty-等待響應數據與延續,ASYNCSTARTED異常
- 21. 使用jruby的jetty嵌入式應用程序
- 22. 響應水平div高度不匹配與youtube嵌入
- 23. Bootstrap響應嵌入奇怪的行爲
- 24. 全寬的Vimeo嵌入無響應
- 25. Mailchimpp嵌入式響應表單
- 26. 無法嵌入EJS時管道響應
- 27. Mongoid嵌入式收集響應:查找
- 28. 嵌入Facebook的帖子響應
- 29. 嵌套JSON響應
- 30. 用jetty在桌面應用程序中嵌入web應用程序
但它沒有任何嵌入式服務器的例子 – rinku