我如何跳过索引文件并直接显示json响应?

时间:2019-04-30 12:16:36

标签: java jsp jersey-2.0

我已使用Rest APIJava中开发了Jersey 2.6,服务器是Apache Tomcat,并在JSON中得到了响应。当我通过右键单击运行项目并单击run on server选项时,将显示一个html页面,即index.html

enter image description here

下面是我的web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- This web.xml file is not required when using Servlet 3.0 container,
     see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html -->
<web-app version="2.5" 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_2_5.xsd">
    <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.xyz.webservices</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/webapi/*</url-pattern>
    </servlet-mapping>
</web-app>

index.jsp文件的代码

<html>
<body>
    <h2>Jersey RESTful Web Application!</h2>
    <p><a href="webapi/getConfigFiles">Jersey resource</a>

</body>
</html>

这是我单击“ Jersey Resource”按钮后正在调用的资源文件

package com.xyz.webservices;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;

import org.json.JSONException;
import org.json.JSONObject;

import com.google.gson.Gson;

@Path("getConfigFiles")
public class Resource {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getConfigFiles() 
    {
        Response response = null;
        try {
        List<String> listConfig = new ArrayList<>();

        String ROOT_FILE_PATH="E:\\eSamridhi\\Data\\ConfigData";
        File f=new File(ROOT_FILE_PATH);
        File[] allSubFiles=f.listFiles();

        for (File file : allSubFiles) 
        {
            listConfig.add(file.getName().replace(".xlsx", ""));
        }

        JSONObject object = new JSONObject();
        object.put("ConfigFiles", listConfig);  
        System.out.println(object);
        response = Response.status(Status.OK).entity(object.toString()).build();

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

        return response;



    }
}

这是我点击按钮

后的回复

enter image description here

所以我的问题是不是在访问JSON之后直接显示索引文件直接显示响应URL。如何重定向或直接删除中间的步骤,这样我就可以直接获取响应是初学者,因此无法获得。 任何帮助将不胜感激。 因为在此之后,我正在开发前端,我需要通过调用上述API直接显示数据。

谢谢您的考虑...

1 个答案:

答案 0 :(得分:1)

您可以通过多种不同方式来执行此操作。例如,您可以在html页面上使用javascript,以在页面加载时单击按钮。另一个更好的方法是创建一个新的servlet,并将web.xml中的welcome-file-list映射到该servlet。例如,使用url映射/ Test创建一个名为“ Test”的servlet。

web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- This web.xml file is not required when using Servlet 3.0 container,
         see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html -->
    <web-app version="2.5" 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_2_5.xsd">

  <welcome-file-list>
    <welcome-file>Test</welcome-file>
  </welcome-file-list>


        <servlet>
            <servlet-name>Jersey Web Application</servlet-name>
            <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
            <init-param>
                <param-name>jersey.config.server.provider.packages</param-name>
                <param-value>com.xyz.webservices</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>Jersey Web Application</servlet-name>
            <url-pattern>/webapi/*</url-pattern>
        </servlet-mapping>
    </web-app>

现在,当您第一次加载应用程序时,将在Servlet Test中调用doGet方法。在这里,我们可以调用您的Resource类

@WebServlet("/Test")
public class Test extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public Test() {
        super();
    }

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

      //here you should be able to call this method
      Resource r = new Resource();
      r.getConfigFiles();  


     }

}