【问题标题】:Populate values from Java Restful Service into JSP Page将 Java Restful Service 中的值填充到 JSP 页面中
【发布时间】:2017-02-07 09:32:26
【问题描述】:

我使用 JSON 创建了一个 Java Restful 服务,我从该服务中获得了一些价值,然后我想在一个 JSP 页面上填充这些价值。

我的“test.jsp”页面

<%@ 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>

我的 service.java 代码如下

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”代码

<?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>

我正在使用 Eclipse Mars1 和 Java。

【问题讨论】:

  • 您需要在渲染 JSP 时调用该服务以获取其中的值。仅此一项就应该让您怀疑这是否是一种可行的方法。使用 JavaScript(可能是基于 JS 的框架)或使用不同的服务(可能是 RESTful 服务和 JSP 都调用的东西)可能会更好。
  • 您想在生成 JSP 期间使用 web 服务吗?那么,如果您从服务器调用它,为什么还要使用 Web 服务呢?直接调用该方法(不漂亮)或将逻辑移动到控制器类中并将服务重定向到其中。在 JSP 中返回一个在 JSTL 中工作的实例
  • @AxelH 我必须创建一个用于发布 JSON 数据的服务,并且我必须获取这些数据并显示在我的 JSP 页面上。
  • 进入 JSP 或进入客户端接收的页面(在 HTML 中)?
  • @AxelH 是的。进入客户端接收的页面(.JSP)

标签: jsp java


【解决方案1】:

您说的是 JSP 页面,这意味着您仍在服务器上。所以你不需要使用webservice(访问服务器的门)。

创建一个将创建实例的控制器(带有电子邮件和名称)。您可以将此方法调用到 servlet 中,以将其作为属性推送到 JSP 中。

interface Controler {
    public Auth auth(); return an instance of Auth(String email, String fname)
}

在Servlet类中,获取结果直接push它(需要是一个BEAN)。

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

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

然后您只需要更新 JSP 以使用您发送的属性来填充页面。

稍后,如果您想要一些 AJAX,请使用 WebService 调用控制器方法。将实例转换为 JSON 以发送结果。

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
    }
}

编辑

因为您只想从客户端动态获取此值。您将需要使用 Javascript 在 Ajax 中调用您的 Web 服务。这将检索您创建的 JSON。当然,您需要更正您的服务才能返回某些内容,您的身份验证不会返回任何内容。

所以将您创建的 JSON 解析为字符串(toString() 工作)。

在 Javascript 部分,您需要从字符串创建 JSON,幸运的是,这也非常简单。使用 JQuery,您只需要指定您等待一个 json,数据将是一个 javascrip 对象。如果没有,你需要自己解析String,看下面看看如何从一个url(in JSON)中获取一些数据:

Jquery/Ajax - Parse JSON Response

有了这个,你就可以做到了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多