2014-01-29 3 views
6

Команда, которая работает на стороне клиента в моем проекте, попросила меня написать образец тестовой страницы и дать им рабочий URL-адрес, чтобы они могли ударить и вернуться 200. У них есть попросил меня также предоставить образец тела запроса. Вот тело запроса, которое я им дам.Создайте простую страницу, которая возвращает ответ JSON

{ 
"MyApp": { 
    "mAppHeader": { 
     "appId": "", 
     "personId": "", 
     "serviceName": "", 
     "clientIP": "", 
     "requestTimeStamp": "",  
     "encoding": "", 
     "inputDataFormat": "", 
     "outputDataFormat": "", 
     "environment": "" 
    }, 
    "requestPayload": { 
     "header": { 
      "element": "" 
     }, 
     "body": { 
      "request": { 
       "MyTestApp": { 
        "data": { 
         "AuthenticationRequestData": { 
          "appId": "", 
          "appPwd": "" 
         } 
        } 
       } 
      } 
     } 
    } 
    } 
} 

Чтобы разработать образец страницы, я понятия не имею, с чего начать. Прощайте, пожалуйста, на ваших downvotes (в случае, если вопрос кажется неуместным), поскольку у меня нет опыта работы с сервлетами JSP.

Вот что я имею на данный момент. Его простой Логин страница -

<%@ page language="java" 
    contentType="text/html; charset=windows-1256" 
    pageEncoding="windows-1256" 
%> 

<!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=windows-1256"> 
     <title>Login Page</title> 
    </head> 

    <body> 
     <form action="TestClient"> 

      AppId  
      <input type="text" name="appID"/><br>  

      AppPassword 
      <input type="text" name="appPwd"/> 

      <input type="submit" value="submit">    

     </form> 
    </body> 
</html> 

И это мой сервлет класс -

package com.test; 

import java.io.IOException; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

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

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public TestClient() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     response.setContentType("text/json"); 
     App app = new App(); 
     app.setAppID(request.getParameter("appID")); 
     app.setAppPassword(request.getParameter("appPwd"));  
    } 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    } 

} 

My App является простой класс Java, который имеет APPID и appPassword с добытчиками и сеттеров, так что я не собираюсь чтобы опубликовать это здесь.

Мой вопрос: я делаю это правильно или 100% неправильно? Пожалуйста, дайте мне ваш совет.

+0

Если вы можете мне точку ссылки, где я могу получить лучшее представление о том, что должно быть сделано, что это нормально слишком. Или, если вы можете дать мне пример, все в порядке. Я просто разъясняю свой подход здесь. Я не чувствую себя очень уверенно, что я сделал это правильно, поэтому мне нужен совет. – rickygrimes

+0

Если они запрашивают ответ 200 с данными JSON, они, вероятно, планируют использовать запрос AJAX. Это означает, что, вероятно, ожидается, что пользователь уже войдет в систему, может быть, что-то, что вы хотите проверить с ними. –

+0

У меня нет ответов для вас, поскольку я столкнулся с подобной проблемой (хотя это для личного изучения); Я могу сказать вам одно, что я недавно узнал: сервлеты не имеют гражданства (поэтому, если вы собираетесь проверить эти _appID_ и _appPwd_, вы не сможете отличить от двух разных пользователей приложений). Думаю, вам лучше передать чек и поколение json другому фасоли. – watery

ответ

1

В методе doGet использовать Gson jarLibrary генерировать ответ JSON

, как показано ниже

Gson gson = new Gson(); 
HashMap map = new HashMap(); 

map.put("MyApp",object); 

String jsonString = gson.toJson(map); 
PrintWriter writer = response.getWriter(); 
writer.print(jsonString); 
0

Вы можете использовать JSON библиотеки GSON Google, для анализа и формирования JSON string.It облегчает вашу жизнь , Посмотрите на следующую ссылку для справки. http://viralpatel.net/blogs/creating-parsing-json-data-with-java-servlet-struts-jsp-json/

Вы также можете обратиться к следующей ссылке http://nareshkumarh.wordpress.com/2012/10/11/jquery-ajax-json-servlet-example/

0

Вы говорите, что вы хотите передать некоторые параметры от клиента к серверу, но показать как сообщение JSON, а затем ваш код сервлета выглядит так, как будто параметры передаются с запросом.

Если вы намерены передать JSON в тело запроса, сервер не будет автоматически анализировать это для вас, поэтому ваши вызовы request.getParameter("appID") и request.getParameter("appPwd") не будут работать.

Вместо этого вам нужно разобрать тело, как это (на основании примера сообщения выше):

JsonObject jsonRequest = Json.createReader(request.getInputStream()).readObject(); 

JsonObject authenticationRequestData = jsonRequest 
    .getJsonObject("MyApp") 
    .getJsonObject("requestPayload") 
    .getJsonObject("body") 
    .getJsonObject("request") 
    .getJsonObject("MyTestApp") 
    .getJsonObject("data") 
    .getJsonObject("AuthenticationRequestData"); 

App app = new App(); 
app.setAppID(authenticationRequestData.getJsonString("appID")); 
app.setAppPassword(authenticationRequestData.getJsonString("appPwd"));  

После того, как ваш сервлет имеет объект, который вы хотите использовать, чтобы создать ответ, вы можете просто генерировать JSON и записывать его с помощью HttpServletResponse.getWriter() так:

SomeObject someObject = app.doSomething(); 

JsonObject jsonObject = Json.createObjectBuilder() 
.add("someValue", someObject.getSomeValue()) 
.add("someOtherValue", someObject.getSomeOtherValue()) 
.build(); 

response.setContentType("application/json"); 
Json.createJsonWriter(response.getWriter()).writeObject(jsonObject); 
2

Вы можете создать объект Java, который отформатирован в том же формате, а затем просто использовать встроенные методы

@WebServlet(urlPatterns = {"/BasicWebServices"}) 
public class BasicWebServices extends HttpServlet{ 

    private static final long serialVersionUID = 1L; 
    private static GsonBuilder gson_builder = new GsonBuilder().serializeNulls().setDateFormat("MM/dd/yyyy"); 
    public BasicWebServices(){ 
     super(); 
    } 
    @Override 
    public void destroy(){ 
      super.destroy(); 
    } 
    @Override 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ 
     doPost(request, response); 
    } 
    @Override 
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ 
     try{ 
      Gson gson = BasicWebServices.gson_builder.create(); 
      MyObject myObject = new MyObject(); 
      response.getWriter().write(gson.toJson(myObject)); 
     } 
     catch(Exception e){ 
      response.getWriter().write("ERROR"); 
     } 
    } 
} 

Тогда вам просто нужно сделать MyObject той же настройкой, что и ваши восстановленные значения. Либо создайте объект, который настроен одинаково, или если вы можете использовать тот же класс java, что и тот, который его отправляет, если это возможно.

Для Вашего ты должен был бы иметь класс MyApp и затем объекты mAppHeader и requestPayload

public class mAppHeader(){ 
    String appId = ""; 
    String personId = ""; 
    String serviceName = ""; 
    String clientIP = ""; 
    String requestTimeStamp = "";  
    String encoding = ""; 
    String inputDataFormat = ""; 
    String outputDataFormat = ""; 
    String environment = ""; 
} 
Смежные вопросы