【问题标题】:Browser showing nothing while calling servlet调用 servlet 时浏览器不显示任何内容
【发布时间】:2018-03-19 14:19:47
【问题描述】:

我尝试了一段时间,但每次我尝试在浏览器上运行时,它什么都没有显示,甚至没有错误。

“index.html”文件

<html>
<head>
    <title>Register form</title>
</head>
<body>
    <form method="post" action="register">
    Name:<input type="text" name="name" /><br/>
    Email ID:<input type="text" name="email" /><br/>
    Password:<input type="text" name="pass" /><br/>
    <input type="submit" value="register" />
    </form>
</body>

“web.xml”文件

<?xml version="1.0" encoding="UTF-8"?>

<web-app  version="3.0" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" >

    <servlet>
        <servlet-name>register</servlet-name>
        <servlet-class>Register</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>register</servlet-name>
        <url-pattern>/register</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>

“Register.java”文件

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

public class Register extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        String name = request.getParameter("name");
        String email = request.getParameter("email");
        String pass = request.getParameter("pass");
        try{

        //loading drivers for mysql
        Class.forName("com.mysql.jdbc.Driver");

    //creating connection with the database 
          Connection  con=DriverManager.getConnection
                     ("jdbc:mysql:/ /localhost:3306/db","myuser","1234");

        PreparedStatement ps=con.prepareStatement
                  ("insert into Student values(?,?,?)");

        ps.setString(1, name);
        ps.setString(2, email);
        ps.setString(3, pass);
        int i=ps.executeUpdate();

          if(i>0)
          {
            out.println("You are sucessfully registered");
          }

        }
        catch(Exception se)
        {
            se.printStackTrace();
        }

      }
  }

This image is after i entered the details, and there is no data stored in my database

This is the error showing in cmd

我使用的是 JDK 9,它在 JRE 中没有“ext”文件,所以我通过命令行包含了 JDBC 驱动程序文件。

我在 mysql 中创建了数据库 'db' 和表名 'student'。

我不知道问题出在哪里。请帮我!!

【问题讨论】:

  • 你能检查一下服务器控制台吗?

标签: java mysql servlets jdbc web-applications


【解决方案1】:

你的表单方法是post

<form method="post" action="register">

在你的 servlet 中你只有一个 doGet。

将表单方法更改为get

<form method="get" action="register">

Servlet doGet:

   protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {


        String name = request.getParameter("name");
        String email = request.getParameter("email");
        String pass = request.getParameter("pass");
        try{

        //loading drivers for mysql
        Class.forName("com.mysql.jdbc.Driver");

    //creating connection with the database 
          Connection  con=DriverManager.getConnection
                     ("jdbc:mysql:/ /localhost:3306/db","myuser","1234");

        PreparedStatement ps=con.prepareStatement
                  ("insert into Student (name,email,pass) values(?,?,?);");

        ps.setString(1, name);
        ps.setString(2, email);
        ps.setString(3, pass);
        ps.executeUpdate();



        }catch(Exception se){
            se.printStackTrace();
        }
    //redirect user back to index
    RequestDispatcher rd=request.getRequestDispatcher("index.html");        
    rd.forward(request,response);  

      }
  }

【讨论】:

  • 感谢@Jonathan Laliberte。但问题是我通过注册页面输入的数据没有存储在数据库中,即使在通过命令行添加 JDBC 驱动程序之后,因为在 JDK 9 中,没有“ext”文件夹可以将 JDBC 文件放入其中.
  • 在我输入的值没有存储在数据库中之前,我怎么知道。
  • 您的 servlet 被映射到 doGet 请求。只需在你的 url 中输入 /register,servlet 就会运行。
  • 查看您的 Servlet 映射名称。你必须有一个大写字母。所有 Servlet 都以大写字母开头。更改 web.xml 中的 servlet 名称。确保它有一个大写字母。然后重启你的服务器。另外值得一提的是,您的 Servlet 是否在一个包中?
  • 是的,我也尝试过使用大写字母,但结果相同。是的,Servlet 位于 WEB-INF/classes 文件夹中。
【解决方案2】:

您没有关闭 Connection 和 PreparedStatement。 最好使用 try-with-resources 。连接 URL 中有一个空格。 另一个问题已经提到了。

   try (Connection con=DriverManager.getConnection
                 ("jdbc:mysql://localhost:3306/db","myuser","1234");
            PreparedStatement ps=con.prepareStatement
                 ("insert into Student (name,email,pass) values(?,?,?)")) {

        ps.setString(1, name);
        ps.setString(2, email);
        ps.setString(3, pass);
        ps.executeUpdate();
    } catch(Exception se) {
        se.printStackTrace();
    }

【讨论】:

  • 我想问一件事,我应该在端口号 3306 后面写我的数据库名称“db”吗?
  • 是的,可以想象多个数据库,例如迁移、播放。
猜你喜欢
  • 2017-02-07
  • 2014-10-29
  • 2018-11-09
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
  • 2011-02-19
  • 2018-11-16
相关资源
最近更新 更多