首页 > 解决方案 > 将信息从 servlet 传递到 jsp 文件时出错

问题描述

我正在尝试将数据从 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>

这是按预期工作的。

标签: javajspservlets

解决方案


推荐阅读