【问题标题】:How to properly display Mysql tables using servlets and java?如何使用 servlet 和 java 正确显示 Mysql 表?
【发布时间】:2013-09-08 21:48:18
【问题描述】:

我是这里的新手。我有一个需要连接mysql、servlet和java的作业(因为我想将java代码和html代码分开。以前,我将代码组合起来更容易,但被拒绝了) 所以,基本上,我在 mySql 中写了这个,

create table login2 (username varchar (30), password varchar(30), designation varchar(10));
insert into login2 values('lala','123','A');

然后我使用 eclipse 在 servlet 中创建 loginDisp.java。这是我的命令

 package Servlet;

import java.io.*;
import java.util.*;
import javax.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class loginDisp extends HttpServlet {
  public void service(HttpServletRequest request,
  HttpServletResponse response)
  throws IOException, ServletException{
    //  String username=request.getParameter("Username");
     // String password=request.getParameter("Password");

  response.setContentType("text/html");
  PrintWriter out = response.getWriter();
  out.println("<html>");
  out.println("<head><title>Servlet JDBC</title></head>");
  out.println("<body>");
  out.println("<h1>Servlet JDBC</h1>");
  out.println("</body></html>");  
  // connecting to database
  Connection con = null;  
  Statement stmt = null;
  ResultSet rs = null;
  try {
  Class.forName("com.mysql.jdbc.Driver");
  con =DriverManager.getConnection 
  ("url/tablename","uname","pssword");
  stmt = con.createStatement();
  rs = stmt.executeQuery("SELECT * FROM login2");
  // displaying records
  while(rs.next()){
  out.print(rs.getObject(1).toString());
  out.print("\t\t\t");
  out.print(rs.getObject(2).toString());
  out.print("<br>");
  }

  } catch (SQLException e) {
 throw new ServletException("Servlet Could not display records.", e);
  } catch (ClassNotFoundException e) {
  throw new ServletException("JDBC Driver not found.", e);
  } finally {
  try {
  if(rs != null) {
  rs.close();
  rs = null;
  }
  if(stmt != null) {
  stmt.close();
  stmt = null;
  }
  if(con != null) {
  con.close();
  con = null;
  }
  } catch (SQLException e) {}
  }
  out.close();
  }
  }

当我执行时,它显示得很好。因此,我开始制作 Login.jsp,因为我想制作一个 text.box 供用户插入用户名和密码。这是我的代码

 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

<body>
<center>
    <div class="wrapper">
    <br>
    <br>
    <h2>Doctor</h2>

    <form name="form1" method="post" action="loginDisp" > <!-- onsubmit="return validateForm()" -->
        <table width="326" border="1" align="center">
        <center> <tr>
                <th width="138" scope="row">Username</th>
                <td width="142"><input type="text" name="Username"></td>

            </tr>
            </center>


            <tr>
                <th height="31" style="width: 162px;"><span class="style2">Password</span>
                </th>

                <td width="142"><input type="password" name="Password"></td>
            </tr>

            <tr>


            </tr>
        </table>
        <p align="center">
                    <input type="submit" name="Submit" value="Submit">
                </p> ${message}
    </form>
    </div>
    </center>

</body>

</body>
</html>

我从显示的 mySQL 中获取数据。我在 servlet 中添加了另一个 log.java,因为我认为我们需要从 jsp 获取数据到数据库并在调用时显示。这是 log.java 中的代码

package Servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class log extends HttpServlet {
  protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

 //Get username and password from the JSP page


String username=request.getParameter("Username");
String password=request.getParameter("Password");

//Print the above got values in console

System.out.println("The username is" +username);

System.out.println("\nand the password is" +password);
    }
}

在 login.jsp 中插入的用户名和密码不会自动插入到 mySQL 中,因此当我尝试执行 loginDisp.java 时,它只会显示我在 mySQL 中手动插入的数据。

【问题讨论】:

标签: java mysql jsp servlets


【解决方案1】:

创建一个新包(称为 dao 或模型),您可以在其中放置访问数据库的逻辑。

然后创建一个 Java Bean 对象,用于存储您的 DB 的结果并在 servlet 中实例化您的逻辑类,然后访问 Bean 的属性并将其显示在 WEB 中。

封装型号: 类 DaoAccess(与 DB 连接的方法) class Login(表的属性分别是getXXX和setXXX)

打包Servlet。 类登录显示:

    public class loginDisplay extends HttpServlet {
    public void service(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head><title>Servlet JDBC</title></head>");
        out.println("<body>");
        out.println("<h1>loginDisplay</h1>");
        out.println("</body></html>");
        // connecting to database
        Connection con = null;
        Statement stmt = null;
        ResultSet rs = null;

        DaoAccess dao = new DaoAccess();

        List<Login> list = dao.readAll();

        for(Login obj: list){
            out.write(obj.getName());
            out.write(obj.getPassword());
        }
        out.close();
    }
}

【讨论】:

    【解决方案2】:

    您不能使用 java 文件名作为在 web.xml 文件中定义的操作,并且存在 servlet 映射,您可以使用

      <servlet>
        <servlet-name>log</servlet-name>
        <servlet-class>loginDisplay</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>log</servlet-name>
        <url-pattern>/loginDisplay</url-pattern>
      </servlet-mapping>
    

    现在您可以在操作标签中使用action = "loginDisplay" 并使用此

    希望你没有遇到404 error的问题。

    【讨论】:

    • 非常感谢.. 我真的很感激。我完全按照你说的做了,但是当我尝试输入新的用户名和密码时,我遇到了 505 错误 。所以我尝试像以前一样执行 displayLogin.java,我得到这个 HTTP 状态 404 - /DermijianTest/servlet/Servlet.loginDisplay ------------------------ -------------------------------------------------- ------ type 状态报告消息 /DermijianTest/servlet/Servlet.loginDisplay
    【解决方案3】:

    您在表单中输入了错误的操作。

    由于表单的 action 属性采用 servlet 的路径,因此您应该给出web.xml 中指定的相关映射

    action="loginDisplay.java"  
    

    应该是action="/loginDisplay"

    <form name="form1" method="post" action="loginDisplay.java" onsubmit="return validateForm()">
    

    应该是

    <form name="form1" method="post" action="/loginDisplay" onsubmit="return validateForm()">
    

    如果 /loginDisplay 不是 web.xml 中的确切映射,请检查 web.xml 文件并查看 loginDisplay 的映射并将该路径作为操作。

    A quick example

    【讨论】:

    • 那个action url需要映射到目标Servlet!
    • @TheNewIdiot 是的,应该在web.xml 中完成 :)
    • @sureshatta 非常感谢.. 我真的很感激。我完全按照你说的做了,但是当我尝试输入新的用户名和密码时,我遇到了 505 错误。所以我尝试像以前一样执行 displayLogin.java,我得到这个 HTTP 状态 404 - /DermijianTest/servlet/Servlet.loginDisplay ------------------------ -------------------------------------------------- ------ type 状态报告消息 /DermijianTest/servlet/Servlet.loginDisplay
    • @sureshatta 是的,这是错误。我基本上想通过 .jsp 将数据输入 mysql .. loginDisplay java.lang.ClassNotFoundException: loginDisplay
    • 您能否将您在 web.xml 中所做的操作以及您在 html 表单中更新的操作编辑一下,以便我们检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    相关资源
    最近更新 更多