Сервлет JSP getparameter getattribute возвращает значение null

У меня проблемы с передачей переменных сервлета в jsp.

Конечно, у меня уже есть набор 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: я также пытался использовать request.getSession().setAttribute в сервлете, тоже не сработало

P.P.S. Итак, если я внесу следующие изменения:

база данныхServlet.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>

и Имя, и Владелец возвращают пустую строку, в то время как Виды и Пол по-прежнему возвращают NULL

в основном то, что я пытаюсь сделать, это получить доступ к базе данных MySQL для извлечения переменных из таблицы и отобразить ее с помощью JSP


person Mantracker    schedule 08.01.2014    source источник
comment
проверьте, принимает ли ваш браузер файлы cookie или нет   -  person SpringLearner    schedule 08.01.2014
comment
где вы устанавливаете атрибуты со значениями внутри вашего сервлета?   -  person s_bei    schedule 08.01.2014
comment
Я добавил больше деталей в свой java-сервлет, в основном все 4 переменные связаны с подключением к базе данных MySQL, но я просто не уверен, как на самом деле отображать значения из этих переменных в JSP.   -  person Mantracker    schedule 08.01.2014


Ответы (3)


Попробуйте использовать


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

Я думаю, это должно сработать. И используйте только request.getAttribute(), он вернет тип объекта, вам нужно будет его бросить

person sudhir    schedule 08.01.2014
comment
Я пытался использовать это и, используя только getAttribute, по-прежнему возвращает значение null - person Mantracker; 08.01.2014
comment
Вы проверили значения, прежде чем добавлять их в запрос?? - person sudhir; 09.01.2014

Убедитесь, что у вас есть допустимые значения для name, owner, species и sex при установке атрибута запроса внутри метода doPost.

Используйте синтаксис EL, например

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

Не пишите скриптлеты в JSP, потому что скриптлеты не должны использоваться в JSP более десяти лет. Изучите JSP EL, JSTL и используйте сервлет для кода Java. Как избежать кода Java в JSP-файлах?

person Aniket Kulkarni    schedule 08.01.2014
comment
Я пытался использовать синтаксис EL, как вы сказали, но из моего отредактированного кода выше видно, что он по-прежнему возвращает пустые строки. - person Mantracker; 08.01.2014
comment
@ user3172137: я ответил ${NAME}, а не ${databaseServlet.NAME}. Просто используйте ${NAME} или ${param.NAME} - person Aniket Kulkarni; 09.01.2014

Просто дайте область действия своим атрибутам, и вы можете изменить свой код следующим образом:

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>

Я надеюсь, это поможет вам.

person Coder ACJHP    schedule 23.05.2017