Вызов сервлета для записи данных в формате JSON на URL на сервере - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь вызвать сервлет, который записывает объект javaobject, взятый из базы данных в формате json, из другого сервлета.

Поток моего кода: Servlet1 check_login -> Servlet2 jsonCreate

При попытке сделать это я получаю сообщение об ошибке HTTP 404.

Вот мой код сервлета check_login.java

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

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String user_name=request.getParameter("user_name");
    String password=request.getParameter("password");

    try {

        String role=check_database(user_name,password);
        if(role.equals("")) {
            response.sendRedirect("index.html");
        }else if(role.equals("admin")) {

            List<Programs> Programs_Offered = new ArrayList<Programs>();
            RequestDispatcher rd = request.getRequestDispatcher("jsonCreate");
            rd.forward(request,response);
        }else if(role.equals("mac")) {
            response.sendRedirect("mac_welcome.jsp");
        }
    } catch (SQLException | ClassNotFoundException e) {
        e.printStackTrace();
    }
}

А вот код сервлета jsonCreate.java

@WebServlet("/jsonCreates.json")
public class jsonCreate extends HttpServlet {

public static List<Programs> list() throws SQLException, IOException {


    List<Programs> Programs_Offered = new ArrayList<Programs>();

    Connection conn=DataBase_Connection.getInstance().getConnection();
    Statement ps=conn.createStatement();
    ResultSet rs = ps.executeQuery(Queries.view_programs);


    while(rs.next()){
        Programs p=new Programs();
        p.setProgramName(rs.getString("ProgramName"));
        p.setDescription(rs.getString("Description"));
        p.setApplication_Eligibility(rs.getString("Applicant_Eligibility"));
        p.setDuration(rs.getInt("Duration"));
        p.setDegree_Certificate_Offered(rs.getString("Degree_Certificate_Offered"));
        Programs_Offered.add(p);    
    }
    return Programs_Offered;
    }

private static final long serialVersionUID = 1L;

public jsonCreate() {
    super();
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    List<Programs> categories=null;
    try {
        categories = jsonCreate.list();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    String categoriesJson = new Gson().toJson(categories);
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(categoriesJson);
    //response.sendRedirect("admin_welcome.jsp");
}

когда я задаю имя jsonCreates.json так же, как имя сервлета java (jsonCreate), оно работает нормально и открывает данные json на странице по адресу http://localhost:8081/servlet_demo/jsonCreate.

Затем снова, когдаЯ перенаправляю на новый JSP admin_welcome.jsp, он открывается без проблем, но я не нахожу никаких данных json, доступных по ссылке http://localhost:8081/servlet_demo/jsonCreate.

Я совершаю какую-то ошибку, и я несмог найти его.Может кто-нибудь сказать, чего в этом не хватает.

1 Ответ

0 голосов
/ 14 сентября 2018

Вы должны установить имя jsonCreates.json так же, как и имя сервлета java (jsonCreate)

   @WebServlet("/jsonCreate")

Причина, по которой вы не получаете данные json, заключается в том, что response.sendRedirect () не пересылает никакие данные, он просто перенаправляет (навигацию) на страницу.

Если вы хотите, чтобы ваши данные JSON были доступны при навигации по страницам, вам следует создать сеанс и установить переменную сеанса для хранения этих данных json.

JAVA

HttpSession session = request.getSession(false);
session.setAttribute("variable", "json value");
response.sendRedirect("/page");

JSP

<%
    out.println(session.getAttribute("variable"));
%>

ИЛИ

Вы можете использовать forward (), как показано ниже:

JAVA

request.setAttribute("variable", "JSON data");
RequestDispatcher dispatcher = servletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);

JSP

<%
    out.println(request.getAttribute("variable"));
%>
...