2016-09-24 97 views
0

enter image description here這是Client.jsp,它將這兩個參數作爲輸入發送到預期的路徑。我正在嘗試創建一個簡單的寧靜Web服務示例,從而創建了兩個項目

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<!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=ISO-8859-1"> 
<title>Form</title> 
</head> 
<body> 
<form action="http://localhost:8080/WebAPI/backend/user/service/getFormParams" method="post"> 
name:<input type="text" name="username"/> 
mail:<input type="text" name="email"/> 
<input type="submit" value="get"/> 
</form> 
</body> 
</html> 

web.xml中有,

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
<display-name>WebAPI</display-name> 
    <welcome-file-list> 
<welcome-file>index.html</welcome-file> 
</welcome-file-list> 

<servlet> 
<servlet-name>Jersey</servlet-name> 
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
</servlet> 

<servlet-mapping> 
<servlet-name>Jersey</servlet-name> 
<url-pattern>/backend/*</url-pattern> 
</servlet-mapping> 
</web-app> 

控制器有,

package com.api.controller; 

import java.io.IOException; 
import java.util.Iterator; 
import java.util.Set; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.ws.rs.*; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.MultivaluedMap; 

import org.codehaus.jettison.json.JSONException; 
import org.codehaus.jettison.json.JSONObject; 

import com.api.bo.ApiBO; 
import com.api.vo.ApiVO; 
@WebServlet("/ApiController") 
@Path("user/service") 

public class ApiController extends HttpServlet { 
private static final long serialVersionUID = 1L; 



@POST 
@Path("/getFormParams") 
@Produces(MediaType.APPLICATION_JSON) 
public void doPost(HttpServletRequest request, HttpServletResponse response,MultivaluedMap<String, String>formParams,JSONObject obj) throws ServletException, IOException, JSONException { 

System.out.println("into do post method"); 
ApiVO apivo=new ApiVO(); 

String username = null; 
String email = null; 

Iterator<String> it = formParams.keySet().iterator();  
while(it.hasNext()){ 
     username=it.next(); 
     email=it.next(); 
    } 

    apivo.setUserName(username); 
    apivo.setEmail(email); 

    System.out.println(apivo.getUserName()); 

    ApiBO apibo=new ApiBO(); 

    JSONObject TESTAPI=apibo.printDetails(apivo); 

    System.out.println(TESTAPI); 


    } 
} 

BO了,

package com.api.bo; 

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

import org.codehaus.jettison.json.JSONException; 
import org.codehaus.jettison.json.JSONObject; 

import com.api.vo.ApiVO; 

public class ApiBO { 

@Produces(MediaType.APPLICATION_JSON) 
public JSONObject printDetails(ApiVO apivo) throws JSONException { 

    JSONObject obj=new JSONObject(); 

    obj.put("UserName", apivo.getUserName()); 
    obj.put("Email", apivo.getEmail()); 


    return obj; 
} 

} 

但是,當我嘗試運行的JSP服務器並輸入它顯示的字段,

錯誤:HTTP狀態:500 消息Servlet.init()用於servlet的球衣扔例外

請有人幫我這個錯誤。

+0

你是什麼意思的兩個項目?而你所要做的並不是學習如何編程RESTful的方法。爲什麼你需要一個servlet? – ujulu

+0

我想將eclipse中的一個項目的數據傳遞給另一個項目,以便我可以接受值並對它們進行進一步的操作。 – vamshi

+0

您還沒有回答我的問題:您爲什麼需要servlet?如果我刪除了servlet註釋並定義了一個REST資源,那麼它對您來說可以嗎? – ujulu

回答

0

檢查依賴項是否添加了構建路徑,如果不是將依賴項添加到部署程序集或只是清理並構建項目。

該項目只需右擊

部署大會

添加

這將打開另一個窗口,在選擇

Java構建路徑條目

單擊下一步

0

Servlet.init()e主要由於Jar文件版本不匹配而導致出現錯誤。

檢查您的構建路徑,始終確保沒有從服務器庫

+0

你可以請建議我wat我應該添加所有的罐子。 – vamshi

+0

爲此,請顯示完整的錯誤堆棧跟蹤 – mhasan

+0

我添加了錯誤的圖像,當我試圖執行代碼時出現... PFA – vamshi

0

添加這些不匹配任何廣口瓶,我會盡量給你一個簡單的工作示例,這樣你剛上手。在支持Servlet 3.0的容器上部署RESTful服務有多種選擇。我會給你一個。

  1. 的web.xml

    <web-app xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
        version="3.0"> 
    
        <servlet> 
         <servlet-name>javax.ws.rs.core.Application</servlet-name> 
        </servlet> 
    
        <servlet-mapping> 
         <servlet-name>javax.ws.rs.core.Application</servlet-name> 
         <url-pattern>/backend/*</url-pattern> 
        </servlet-mapping> 
    
    </web-app> 
    

    正如你看到的servlet-class未指定,這將導致容器會自動添加相應的servlet類爲javax.ws.rs.core.Application servlet名稱。

  2. ApiController.java

    @Path("user/service") 
    public class ApiController { 
    
        @POST 
        @Path("/getFormParams") 
        @Produces(MediaType.APPLICATION_JSON) 
        public void doPost(MultivaluedMap<String, String> formParams) { 
    
         String username = formParams.getFirst("username"); 
         String email = formParams.getFirst("email"); 
    
         System.out.println("username: " + username); 
         System.out.println("email: " + email); 
        } 
    
    } 
    

的用戶名和電子郵件應在服務器控制檯上(如果你開始你的服務器是)來顯示。

JSP頁面沒有改變。

注意:您的@Produces註釋將不能正常工作。因此,在繼續深入研究之前,您最好先閱讀基礎知識,然後您會發現here是RESTful服務(例如)的基礎。

+0

謝謝你..我會試一試 – vamshi

+0

不客氣。 – ujulu

相關問題