【问题标题】:Servlet JSP getparameter getattribute returning nullServlet JSP getparameter getattribute 返回 null
【发布时间】:2014-01-08 07:33:04
【问题描述】:

我在将 servlet 变量传递给 jsp 时遇到问题。

当然,我也已经为 servlet 设置了 web.xml

<servlet>
    <servlet-name>databaseServlet</servlet-name>
    <servlet-class>Servlet.databaseServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>databaseServlet</servlet-name>
    <url-pattern>/dbServlet</url-pattern>
</servlet-mapping>

结果是所有名称、所有者、物种和性别值都为空。有人可以帮我弄这个吗?谢谢

P.S:我也试过在servlet中使用request.getSession().setAttribute,也没用

P.P.S:所以如果我进行以下更改:

databaseServlet.java

package Servlet;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
import java.util.ArrayList;

@SuppressWarnings("serial")

public class databaseServlet extends HttpServlet {
private Connection conn;
private Statement statement;

String name;
String owner;
String species;
String sex;
String birth;
String death;

public void init(ServletConfig config) throws ServletException {
    try {
        Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection(
                "jdbc:mysql://localhost/STUDENTS",
                "root",
                "");
        statement = conn.createStatement();

        String sql = "SELECT name, owner, species, sex, birth, death FROM pet";
        ResultSet rs = statement.executeQuery(sql);

        //STEP 5: Extract data from result set
        while(rs.next()){
            //Retrieve by column name
            name  = rs.getString("name");
            owner = rs.getString("owner");
            species = rs.getString("species");
            sex = rs.getString("sex");
            birth = rs.getString("birth");
            death = rs.getString("death");
        }
        rs.close();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setAttribute("NAME", "Hello");
    System.out.println(name);
    request.setAttribute("OWNER",owner);
    request.setAttribute("SPECIES",species);
    request.setAttribute("SEX", sex);
    RequestDispatcher dispatcher=getServletConfig().getServletContext().getRequestDispatcher("/dbServlet.jsp");
    dispatcher.forward(request,  response);
}

}

这是我的新jsp:

<body>
Name="${databaseServlet.NAME}" 
Owner="${databaseServlet.OWNER}" 
Species="<%= request.getAttribute("SPECIES") %>"
Sex="<%= request.getSession().getAttribute("SEX") %>"

</body>

Name 和 Owner 都返回空字符串,而 Species 和 Sex 仍然返回 NULL

基本上我要做的是访问 MySQL 数据库以从表中检索变量,并使用 JSP 显示它

【问题讨论】:

  • 检查您的浏览器是否接受cookies
  • 在 servlet 中使用值设置属性的位置在哪里?
  • 我在我的 java servlet 中添加了更多细节,基本上所有 4 个变量都来自连接到 MySQL 数据库,但我只是不确定如何将这些变量的值实际显示到 JSP

标签: java jsp servlets getattribute getparameter


【解决方案1】:

尝试使用

RequestDispatcher dispatcher=getServletConfig().getServletContext().getRequestDispatcher("/dbServlet.jsp");

我想它应该可以工作。 并使用 request.getAttribute() 只是,它会返回 Object 类型,你必须强制转换它

【讨论】:

  • 我试过用这个,只用getAttribute,还是返回null
  • 您在将它们添加到请求之前检查过这些值吗??
【解决方案2】:

在doPost 方法中设置请求属性时,确保name、owner、species 和sex 的值有效。

使用 EL 语法,如

${NAME}
${OWNER}
${SPECIES}
${SEX}

不要在 JSP 中编写 scriptlet,因为 Scriptlet 不应该在 JSP 中使用超过十年。学习 JSP EL、JSTL,并将 servlet 用于 Java 代码。 How to avoid Java Code in JSP-Files?

【讨论】:

  • 我已经尝试使用你所说的EL语法,但你可以从我上面编辑的代码中看到它似乎仍然返回空字符串
  • @user3172137 :我回答了${NAME} 而不是${databaseServlet.NAME}。只需使用${NAME} 或${param.NAME}
【解决方案3】:

只要给你的属性一个范围,你就可以像这样改变你的代码:

protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.getSession().setAttribute("NAME", "Hello");
    System.out.println(name);
    request.getSession().setAttribute("OWNER",owner);
    request.getSession().setAttribute("SPECIES",species);
    request.getSession().setAttribute("SEX", sex);
    RequestDispatcher dispatcher=getServletConfig().getServletContext().getRequestDispatcher("/dbServlet.jsp");
    dispatcher.forward(request,  response);
}

当你处理属性时,让它像 sessionScope 一样:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<body>
<c:set var="myName" value="NAME" />
<c:set var="myOwner" value="OWNER" />
Name="${sessionScope[myName]}" 
Owner="${sessionScope[myOwner]}" 
       //etc...
</body>

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 2017-02-07
    • 2011-06-28
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多