0

サーブレット変数を 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>

その結果、名前、所有者、種、性別の値がすべて null になります。誰かがこれで私を助けることができますか? ありがとう

PS: サーブレットで request.getSession().setAttribute も使用しようとしましたが、どちらも機能しませんでした

PPS: したがって、次の変更を行うと:

データベースサーブレット.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 を使用して表示することです

4

3 に答える 3

0

メソッド内でリクエスト属性を設定するときはname、 、ownerspeciesおよびに有効な値があることを確認してください。sexdoPost

次のようなEL構文を使用します

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

スクリプトレットは JSPで 10 年以上使用されるべきではないため、 JSP でスクリプトレットを作成しないでください。JSP ELJSTLを学び、Java コードにサーブレットを使用します。JSPファイルでJavaコードを回避するには?

于 2014-01-08T07:37:21.993 に答える
0

属性にスコープを与えるだけで、次のようにコードを変更できます。

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>

これがお役に立てば幸いです。

于 2017-05-23T00:35:24.100 に答える
0

使ってみて


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

うまくいくはずです。request.getAttribute() のみを使用すると、オブジェクト型が返されるため、キャストする必要があります

于 2014-01-08T07:46:18.740 に答える