Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在jsp-MVC中显示数据库中的数据_Java_Oracle_Model View Controller_Jsp_Tomcat - Fatal编程技术网

Java 在jsp-MVC中显示数据库中的数据

Java 在jsp-MVC中显示数据库中的数据,java,oracle,model-view-controller,jsp,tomcat,Java,Oracle,Model View Controller,Jsp,Tomcat,我正试图提出一个符合mvc架构的代码,并在jsp页面中显示数据库的内容。。java文件中的数据连接和处理以及jsp页面中仅包含数据的显示。 我正在使用tomcat服务器。我的WEB-INF/lib文件夹中有ojdbc6.jar和jstl-1.2.jar (更新)将我的web.xml更改为指向索引后,我得到了java.lang.StackOverflowerError错误 代码有什么遗漏/错误吗?如果我不符合MVC设计,请告诉我。 任何想法都将不胜感激。 多谢各位 下面是我试图运行的代码 DBCo

我正试图提出一个符合mvc架构的代码,并在jsp页面中显示数据库的内容。。java文件中的数据连接和处理以及jsp页面中仅包含数据的显示。
我正在使用tomcat服务器。我的WEB-INF/lib文件夹中有ojdbc6.jar和jstl-1.2.jar

(更新)将我的web.xml更改为指向索引后,我得到了java.lang.StackOverflowerError错误

代码有什么遗漏/错误吗?如果我不符合MVC设计,请告诉我。 任何想法都将不胜感激。 多谢各位

下面是我试图运行的代码

DBConn.java

    public class DBConn extends HttpServlet{
      @Override
      public void doGet(HttpServletRequest request, 
                        HttpServletResponse response) 
                           throws IOException, ServletException {
        Connection connection = null;
        Statement stmt=null;
        ResultSet rs=null;
        List<Employee> dataList = new ArrayList<Employee>();
        try {
            // Load the JDBC driver
            String driverName = "oracle.jdbc.driver.OracleDriver";
            Class.forName(driverName);

            // Create a connection to the database
            String serverName = "localhost";
            String portNumber = "1521";
            String sid = "xe";
            String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;
            String username = "hr";
            String password = "hr";
            connection = DriverManager.getConnection(url, username, password);

            stmt = connection.createStatement();
            rs = stmt.executeQuery("select employee_id, first_name from employees");
            while (rs.next()) {
                dataList.add(new Employee(rs.getInt("employee_id"),
                                          rs.getString("first_name")));
            }
        } catch (ClassNotFoundException e) {
            // Could not find the database driver
            e.printStackTrace();
        } catch (SQLException e) {
            // Could not connect to the database
            e.printStackTrace();
        } finally{
            if(rs!=null){
                try{ 
                  rs.close();
                }catch(Exception ex) { /* */ ex.printStackTrace();}
            }
            if(stmt!=null){
                try{ 
                  stmt.close();
                }catch(Exception ex) { /* */ ex.printStackTrace();}
            }
            if(connection !=null){
                try{ 
                  connection.close();
                }catch(Exception ex) { /* */ ex.printStackTrace();}
            }
         }

         request.setAttribute("data", dataList);
         String strViewPage = "index.jsp";
         RequestDispatcher dispatcher = request.getRequestDispatcher(strViewPage);
          if (dispatcher != null) {
             dispatcher.forward(request, response);
          }
       }
    }
public class Employee {

    private Integer id;
    private String name;
    //public constructors and
    //setter/getter

    public Employee(Integer id, String name) {
        this.id = id;
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}
index.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Hello World!</h1>
        <table border="1" width="303">
            <tr>
                <td width="119"><b>Emp ID</b></td>
                <td width="168"><b>First Name</b></td>
            <tr
        <form action="post">
            <c:forEach var="employee" items="${data}">
                <br/> ${employee.id}  ${employee.name}
            </c:forEach>
        </form>
        </tr>    
    </table>
</body>
</html>

JSP页面
你好,世界!
Emp ID
名字

在配置servlet和servlet映射时,您可能还需要配置jsp中servlet映射中提到的url模式

JSP

<form action="post" action="/dbconn">
...

</form>

...
web.xml

<servlet>
    <servlet-name>DBConn</servlet-name>
    <servlet-class>DB.DBConn</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>DBConn</servlet-name>
    <url-pattern>/index</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>dbconn</servlet-name>
<servlet-class>com.xx.xx.DBConn</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dbconn</servlet-name>
<url-pattern>/dbconn</url-pattern>
</servlet-mapping>

dbconn
com.xx.xx.DBConn
dbconn
/dbconn

也可以考虑使用数据访问对象模式。(如果您只是试图理解Servlet,请忽略)

使用
调度程序。include(request,response)
方法。

您是否尝试在Servlet中打印数据列表的大小,以确保您从数据库获取数据。@Nambari感谢您的回复。我试图这么做,但似乎所有的System.out.println(“Count data:+dataList.size());我输入的代码没有出现。现在我开始怀疑我的设置是否有问题:(是的,我会先确保Servlet被调用,然后再抓挠太多。@Nambari抱歉,这里是新手。这是web.xml中的设置吗?我会从web.xml开始,找出哪个url和哪个Servlet被映射。你能详细说明我如何分解代码来遵循这个数据访问对象模式吗?谷歌搜索一下,你就会找到r正确的方法。首先,try没有注意到您的action=“post”并且您已经覆盖了
doGet
方法。删除
action=post
属性或将其更改为get。您仍然需要在jsp
中添加action标记以匹配您的url模式。
<servlet>
<servlet-name>dbconn</servlet-name>
<servlet-class>com.xx.xx.DBConn</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dbconn</servlet-name>
<url-pattern>/dbconn</url-pattern>
</servlet-mapping>