2016-09-24 56 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

相关问题