2016-09-29 1 views
1

Ich erstellt einen Java Restful Service mit JSON und ich bekomme etwas Wert von diesem Service, dann möchte ich diese Werte auf einer JSP-Seite ausfüllen.Füllen von Werten von Java Restful Service in JSP Seite

Meine "test.jsp" Seite

<%@ 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>test</title> 
</head> 
<body> 
    <form action="loginServlet" method="post"> 
     <table> 
      <tr> 
       <td>First Name :</td> 
       <td><input type="text" value="" name="txtFirstname" value='<%=request.getParameter("firstinput")%>' /></td> 
      </tr> 
      <tr> 
       <td>Email :</td> 
       <td><input type="text" name="txtEmail" value='<%=request.getParameter("firstinput")%>' /></td> 
      </tr> 
      <tr align="center"> 
       <td colspan="2"><input type="submit" value="Submit" /></td> 
      </tr> 
     </table> 
    </form> 
</body> 
</html> 

Mein service.java Code ist unten

package test.xyz.abc; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.TimeZone; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.POST; 
import javax.ws.rs.Path; 
import org.json.JSONObject; 

@Path("/") 
public class Service { 
    DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    SimpleDateFormat returnDateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm"); 

    @POST 
    @Consumes("application/x-www-form-urlencoded") 
    @Path("/auth") 
    public void Auth(String json) { 
     Date dt = new Date(); 
     formatter.setTimeZone(TimeZone.getTimeZone("IST")); 
     String currentTime = formatter.format(dt); 
     JSONObject returnJson = new JSONObject(); 

     try { 
      JSONObject innerJsonObj = new JSONObject(json); 
      String email = innerJsonObj.getString("email"); 
      String fname = innerJsonObj.getString("fname"); 

      //How to put email and fname values into "test.jsp" page 
     } catch (Exception e) { 
     } 
    } 
} 

"web.xml" Code

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
    id="WebApp_ID" version="3.1"> 
    <display-name>test</display-name> 
    <welcome-file-list> 
     <welcome-file>test</welcome-file> 
    </welcome-file-list> 
    <servlet> 
     <servlet-name>test</servlet-name> 
     <servlet-class>com.sun.jersey.server.impl.container.servlet.ServletAdaptor</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>test</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

Ich bin mit Eclipse Mars1 und Java.

+1

Sie müssten den Dienst beim Rendern Ihrer JSP aufrufen, um die Werte dort einzutragen. Dies allein sollte Sie fragen lassen, ob dies ein praktikabler Ansatz ist. Sie könnten besser mit JavaScript (vielleicht ein Framework basierend auf JS) oder mit einem anderen Dienst (könnte der RESTful Service und die JSP beide aufrufen). – Thomas

+0

Sie wollen den Webservice während der Generierung der JSP verwenden? Dann warum Verwenden Sie einen Webservice, wenn Sie ihn vom Server aufrufen? Rufen Sie die Methode direkt (nicht hübsch) auf oder verschieben Sie die Logik in eine Controlerklasse und leiten Sie den Service dorthin um. Geben Sie eine Instanz in JSTL in der JSP – AxelH

+0

@AxelH zurück um einen Dienst zu erstellen, der für Post-JSON-Daten verwendet wird, und ich diese Daten abrufen und auf meiner JSP-Seite anzeigen muss. – user3441151

Antwort

0

Sie sprechen von einer JSP-Seite, was bedeutet, dass Sie sich noch auf dem Server befinden. Sie brauchen also nicht den Webservice (eine Tür, um auf den Server zuzugreifen) zu benutzen.

Erstellen Sie einen Controller, der eine Instanz (mit E-Mail und Name) erstellt. Sie können diese Methode in das Servlet aufrufen, um es als Attribut in der JSP zu übertragen.

In der Servlet-Klasse, erhalten Sie das Ergebnis ein Push es direkt (muss eine BEAN sein).

class Servlet { 
    Controler c; //Create a instance of the implementation of Controler 

    doGet(...) { //push attribute of c.auth() } 
} 

Dann müssen Sie nur die JSP aktualisieren, um mit dem Attribut zu arbeiten, das Sie senden, um die Seite zu füllen.

Wenn Sie später AJAX verwenden möchten, rufen Sie mit dem WebService die Methode controler auf. Konvertieren Sie die Instanz in ein JSON, um das Ergebnis zu senden.

class Service{ 
    Controler c; //Create a instance of the implementation of Controler 

    //NEED TO RETURN A STRING 
    public String Auth(){ 
     return c.auth() 
          .toJson() //Return a JSON with the data of the instance 
          .toString(); //parsing the JSON in a String 
    } 
} 

EDIT

Da Sie diesen Wert nur dynamicly vom Client ot wollen. Sie müssen Javascript verwenden, um Ajax Ihren Webservice aufzurufen. Dadurch wird der von Ihnen erstellte JSON erneut angezeigt. Natürlich müssen Sie Ihren Dienst korrigieren, um etwas zurückzugeben, Ihre Auth gibt nichts zurück.

SO analysieren Sie den JSON, den Sie erstellen, in String (toString() arbeiten).

Und aus dem Javascript-Teil müssen Sie den JSON aus dem String erstellen, glücklicherweise ist dies auch wirklich einfach. Mit JQuery müssen Sie nur angeben, dass Sie auf einen JSON warten, die Daten werden ein Javascrip-Objekt sein. Wenn nicht, müssen Sie die Zeichenfolge selbst analysieren, sehen Sie die folgenden, um zu sehen, wie man einige Daten aus einer URL zu erhalten (in JSON):

Jquery/Ajax - Parse JSON Response

Mit diesem können Sie es tun.