POST http请求后,在浏览器中动态更新jsp页面

时间:2017-08-15 03:01:11

标签: java jsp servlets http-post

我有以下项目:用java编写的后端;我的Main类在日志文件上创建一个监听器,在修改日志时检索一些信息,并创建一个名为“Candidate”的对象,并通过POST方法将其一些属性发送到Servlet。一切正常,直到这里,我从Servlet得到200响应代码。

然后,我在index.jsp文件中创建了一个前端(带引导使其看起来很好),该文件由静态部分(背景,消息,徽标等)和动态部分组成,我想要每次修改日志文件时都会更新。 index.jsp的简化版本可以在下面找到,其中 firstName 是应该通过post请求到达的数据的示例:

<%@ 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">
<!-- If IE use the latest rendering engine -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">

<!-- Set the page to the width of the device and set the zoon level -->
<meta name="viewport" content="width = device-width, initial-scale = 1">

<title>User Page</title>

<style>
 @import url('bootstrap/css/bootstrap.css');      
</style>
<script type=”text/javascript” src=”bootstrap/js/bootstrap.min.js”></script>
</head>
<body style="background-image:url(images/xxxx.jpg); background-size:cover; " >


<% String firstName = (String) request.getParameter("firstName"); %>

<div class="container">
<div class="page-header">
<h1 style="color:white">Hello 

<%if(firstName != null){%>

    <%=firstName %>
<%}%>
Welcome to this new page.</h1>

</div>
<img src="images/xx.png" style="width:35%;height:35%; padding-left: 10%; padding-top:10%"/>
</div>
</body>
</html>

我的最终目标是用户只看到index.jsp页面,该页面每次修改日志时都会使用“新候选人”中的数据更新其内容。

要运行我的应用程序,我有几个运行实例。我运行Main类,最重要的是,我在服务器上运行index.jsp和MyServlet。这是运行它的正确方法吗?

因为当我这样做,然后我修改日志时,主类控制台打印所有内容,显示已发送POST请求(我已尝试将请求发送到Servlet或直接发送到jsp文件)但我的index.jsp没有收到任何请求(或者至少它没有在eclipse中打开的浏览器中显示它),即使在刷新页面之后也是如此。

然而,当我手动修改浏览器中的url以使用?firstName=XXXX添加url查询参数并刷新时,工作是什么呢,然后该消息包含在index.jsp页面中。如何确保通过我的后端发送的POST请求动态修改我的index.jsp页面?

最后注意:当修改日志文件时,控制台会打印System.out.println,并在doGet方法中显示相应的第一个名称,这就是我假设一切正常的方式。

这是Servlet代码:

package com.xyz.xxxxx;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

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

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //response.setIntHeader("Refresh", 5);

        response.setContentType("text/html");
        PrintWriter writer = response.getWriter();
        String firstName = request.getParameter("firstName");
        System.out.println("testing get: first name : " + firstName);   

        // forward request to jsp page 
        request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request,response);

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

        doGet(request,response);
    }


}

和文件组织为here

谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

我将在这里采取一种信念,并假设您希望保留firstName

POST的价值观

这将要求您调整代码,但如果这是一个教室项目,我也不想提供实现。

从您提供的代码段开始:看起来您正在努力实现以下目标:

  1. GET - &gt;使用帖子提供的名称显示index.html
  2. POST - &gt;更改给定会话的名称。
  3. 因此,您应该使用您在ServletClass上定义的任何内容访问该页面。

    了解HttpSession后,您应该获得所需的效果