我有以下项目:用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。
谢谢你的帮助!
答案 0 :(得分:0)
我将在这里采取一种信念,并假设您希望保留firstName
POST
的价值观
这将要求您调整代码,但如果这是一个教室项目,我也不想提供实现。
从您提供的代码段开始:看起来您正在努力实现以下目标:
因此,您应该使用您在ServletClass上定义的任何内容访问该页面。
了解HttpSession后,您应该获得所需的效果