взаимодействие между php и сервлетными приложениями


Я создаю веб-сервлет, доступ к которому в настоящее время осуществляется с помощью php, используя : $полезная нагрузка = файл_гет_контенты('http://localhost:8080/HelloWorldServlet/index?name=Joe&age=24');

Это вызывает веб-приложение HelloWorldServlet, запущенное на моем сервере tomcat , с шаблоном URL для /index. Для сервлета вызывается функция doGet(). Метод doGet() записывает данные в json в качестве ответа.. Мой вопрос в том, как мне отправить json обратно на php, просто чтобы отобразить его? Кроме того, php приложение запущено на порту 8888.

Вот код для doGet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //GsonBuilder builder = new ();
        GsonBuilder builder = new GsonBuilder();
        Gson gson = builder.create();

        response.setContentType("application/json; charset=UTF-8");
        String key = request.getParameter("name");
        String value = request.getParameter("age");
        String jsonString =  gson.toJson(new Tuple(key, value)).toString();
        request.setAttribute("data", jsonString);
        //response.sendRedirect("localhost:8888/MYPHPAPPLICATION/testcall.php");
        try {

              getServletConfig().getServletContext().getRequestDispatcher(
                "/display.jsp").forward(request,response);

            } catch (ServletException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            } catch (IOException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            }

    }

Кроме того, я создал фильтр для изменения запроса, когда он пытался перенаправить его на страницу php. Но это сработало не так, как ожидалось.

 public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest) req;
        String requestURI = request.getRequestURI();

        if (requestURI.contains("display.jsp"))
        {
            String toReplace = "localhost:8888/MYPHPAPPLICATION/testcall.php";
            req.getRequestDispatcher(toReplace).forward(req, res);
        } else 
            chain.doFilter(req, res);

    }

Это мой 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_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>HelloWorldServlet</display-name>

  <servlet>
    <description></description>
    <servlet-name>HelloWorldServlet2</servlet-name>
    <servlet-class>com.srccodes.example.HelloWorld</servlet-class>
    <load-on-startup>1</load-on-startup>

  </servlet>

  <servlet-mapping>
        <servlet-name>HelloWorldServlet2</servlet-name>
        <url-pattern>/index</url-pattern>
    </servlet-mapping>



  <filter>
    <filter-name>urlRewriteFilter</filter-name>
    <filter-class>com.srccodes.example.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>urlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>


</web-app>
Author: BalusC, 2015-05-05

1 answers

Просто напишите это в тело ответа и немедленно вернитесь.

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    // ...
    String jsonString = gson.toJson(new Tuple(key, value)).toString();

    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(jsonString);
}

Для этого вам не нужен JSP. Он в первую очередь предназначен для использования в качестве шаблона для вывода HTML.

 3
Author: BalusC, 2015-05-06 08:44:29