我正在尝试将数据从 InformationServlet servlet 发送到它重定向到的 information.jsp 文件。 InformationServlet 如下:
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "Information", value = "/Information")
public class InformationServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
RequestDispatcher dispatcher = request.getRequestDispatcher("administration.jsp");
dispatcher.forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String email = request.getParameter("email");
request.setAttribute("myemail",email);
request.getRequestDispatcher("information.jsp").forward(request, response); // forward the email to the .jsp
}
}
而 information.jsp 是:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.sql.SQLException"%>
<%-- Database information --%>
<%
String id = request.getParameter("userid");
String driver = "com.mysql.cj.jdbc.Driver";
String connectionUrl = "jdbc:mysql://localhost:3306/";
String database = "employees";
String userid = "root";
String password = "password";
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
%>
<html>
<head>
<title>information</title>
</head>
<body>
<% String member_email = (String)request.getAttribute("myemail");
try{
connection = DriverManager.getConnection(connectionUrl+database, userid, password);
statement = connection.prepareStatement("Select surname, name, email, phone, CV from member left join resume on memberEmail = email where email = ?");
statement.setString(1, member_email);
resultSet = statement.executeQuery();
resultSet.next();
%>
<div id="table">
<a action="Information" method="post" class="table-row">
<span class="table-cell" name="surname"> <%=resultSet.getString("surname") %> </span>
<span class="table-cell" name="firstname"> <%=resultSet.getString("name") %> </span>
<span class="table-cell" name="email"> <%=resultSet.getString("email") %> </span>
<span class="table-cell" name="phone"> <%=resultSet.getString("phone") %> </span>
<span class="table-cell" name="cv"> <%=resultSet.getString("cv") %> </span>
</div>
<%
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
%>
</body>
</html>
基本上,.jsp 文件根据从 servlet 传递的“myemail”参数从数据库“employees”中检索一些信息。我在网上搜索了很多,我发现这是在两种文件类型之间建立通信的正确方法,但“information.jsp”文件的脚本中的 member_email 变量不知何故为空。这是我第一次尝试构建 Web 应用程序,所以 servlets/jsps 的使用对我来说是相当新的,所以可能我有一个明显的错误。 此外,如果需要,“InformationServlet”侦听的“administration.jsp”如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%-- Database information --%>
<%
String id = request.getParameter("userid");
String driver = "com.mysql.cj.jdbc.Driver";
String connectionUrl = "jdbc:mysql://localhost:3306/";
String database = "employees";
String userid = "root";
String password = "password";
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
%>
<html>
<head>
<title>Administration Page</title>
<link rel="stylesheet" href="css_files/initial.css">
</head>
<body>
<h1>Administration Page</h1>
<%
try{
connection = DriverManager.getConnection(connectionUrl+database, userid, password);
statement=connection.createStatement();
String sql ="select surname, name, email from member";
resultSet = statement.executeQuery(sql);
//each row will be filled with looping throw the table in the database
while(resultSet.next()){
%>
<div id="table">
<form method="post" action="information.jsp" class="table-row">
<span class="table-cell" name="surname"> <%=resultSet.getString("surname") %> </span>
<span class="table-cell" name="firstname"> <%=resultSet.getString("name") %> </span>
<span class="table-cell" name="email"> <%=resultSet.getString("email") %> </span>
<button type="submit">Navigate to user information</button>
</form>
</div>
<%
}
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
%>
</body>
</html>
按预期工作。