【发布时间】:2017-08-15 03:01:11
【问题描述】:
我有以下项目:一个用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。
感谢您的帮助!
【问题讨论】:
-
你熟悉什么框架,或者有一些技巧?没有原始 jsp 就很难 ajaxify 项目
-
无。但是我可以知道你是否能够准确地指出我可以使用什么框架以及为什么:-)
-
我用Wicket几年了,不过这跟JSP相差甚远,说实话跟JSP没什么关系。很少有兼容JSP的,或者在他的表现层使用JSP
-
1.) 您能否确认 GET 请求工作正常?您提供什么作为到达 GET 端点的路径? 2.) 你究竟是如何测试 POST 的?这是否需要更改状态,即如果有人要使用新名称 POST 到端点,则 GET 应该提供更改后的值?
标签: java jsp servlets http-post