【问题标题】:Java servlet is returning a blank page in TomcatJava servlet 在 Tomcat 中返回一个空白页
【发布时间】:2017-01-13 17:39:57
【问题描述】:

我最近尝试使用 Tomcat 和 mySQL 制作一个简单的登录页面,但是每次我运行代码时,两个 servlet 中的一个都会一直返回空白页面。这是 servlet 的代码。第一个来自登录 servlet,并且一直返回空白:

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

public class login extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        Connection conn = null;
        Statement statement = null;
        try{
            if(request.getParameter("username").isEmpty() || request.getParameter("pw").isEmpty()){
                out.println("<html>\n" +
                "<head><title>Error</title></head>\n" +
                "<body>\n" +
                "<a href = '/loginpage/'>Please fill in everything before you proceed</a>\n" +
                "</body>\n" +
                "</html>");
            }else{
                if(request.getParameter("username").length() < 50 && request.getParameter("pw").length() < 50){
                    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/users", "javascrub", "xxxx");
                    statement = conn.createStatement();
                    ResultSet resultSet = statement.executeQuery("select * from userTable where username = " + "'" + request.getParameter("username") + "'");
                    if(!resultSet.isBeforeFirst()){
                        out.println("<html>\n" +
                        "<head><title>Error</title></head>\n" +
                        "<body>\n" +
                        "<a href = '/loginpage/'>Username does not exist, click to go back to login page</a><br>\n" +
                        "<a href = '/loginpage/signup.html'>Or click here to sign up</a>\n" +
                        "</body>\n" +
                        "</html>");
                    }else{
                        String pwCheck = null;
                        while(resultSet.next()){
                            pwCheck = resultSet.getString("password");
                        }
                        if(pwCheck.equals(request.getParameter("pw"))){
                            out.println("<html>\n" +
                            "<head><title>HomePage</title></head>\n" +
                            "<body>\n" +
                            "Congratulations " + request.getParameter("username") + ", you're logged in<br>\n" +
                            "<a href = '/loginpage/'>Log Out</a>\n" +
                            "</body>\n" +
                            "</html>");
                        }else{
                            out.println("<html>\n" +
                            "<head><title>Error</title></head>\n" +
                            "<body>\n" +
                            "<a href = '/loginpage/'>Incorrect password, click to go back</a>\n" +
                            "</body>\n" +
                            "</html>"); 
                        }
                    }
                }else{
                    out.println("<html>\n" +
                    "<head><title>Error</title></head>\n" +
                    "<body>\n" +
                    "<a href = '/loginpage/'>Invalid username or password</a>\n" +
                    "</body>\n" +
                    "</html>");
                }
            }
        }catch(SQLException ex){
            ex.printStackTrace();
        }finally{
            out.println("<html>\n" +
            "<head><title>Error</title></head>\n" +
            "<body>\n" +
            "<a href = '/loginpage/'>In finally block</a>\n" +
            "</body>\n" +
            "</html>"); 
            out.close();
            try{
                if(statement != null){
                    statement.close();
                }
                if(conn != null){
                    conn.close();
                }
            }catch(SQLException ex){
                ex.printStackTrace();
            }
        }
    }
}

第二个是注册 servlet。每当我将它放入 /classes 文件夹并进行编译时,登录 servlet 都会返回空白。

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

public class signup extends HttpServlet{
    public void doPost(HttpServletRequest requestsu, HttpServletResponse responsesu) throws ServletException, IOException{
        responsesu.setContentType("text/html");
        PrintWriter outsu = responsesu.getWriter();
        Connection connection = null;
        Statement stmnt = null;
        try{
            if(requestsu.getParameter("usernamesu").isEmpty() || requestsu.getParameter("pwsu").isEmpty()){
                outsu.println("<html>\n" +
                "<head><title>Error</title></head>\n" +
                "<body>\n" +
                "<a href = '/loginpage/signup.html'>Please fill in everything before you proceed</a>\n" +
                "</body>\n" +
                "</html>");
            }else{
                if(requestsu.getParameter("usernamesu").length() < 50 && requestsu.getParameter("pwsu").length() < 50){
                    String pw = null;
                    pw = requestsu.getParameter("pwsu");
                    char[] pwArray = pw.toCharArray();
                    int letterCount = 0;
                    int numCount = 0;
                    for (int i = 0; i < pwArray.length; i++){
                        if(Character.isLetter(pwArray[i])){
                            letterCount++;
                        }else{
                            numCount++;
                        }
                    }
                    if (numCount >= 2 && letterCount >= 3){
                        connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/users", "javascrub", "xxxx");
                        stmnt = connection.createStatement();
                        ResultSet resultSet = stmnt.executeQuery("select * from userTable where username = " + "'" + requestsu.getParameter("usernamesu") + "'");
                        if(resultSet.isBeforeFirst()){
                            outsu.println("<html>\n" +
                            "<head><title>Error</title></head>\n" +
                            "<body>\n" +
                            "<a href = '/loginpage/signup.html'>We are sorry, this usernname is already taken</a>\n" +
                            "</body>\n" +
                            "</html>");
                        }else{
                            int countInserted = stmnt.executeUpdate("insert into userTable values ('" + requestsu.getParameter("usernamesu") + "', '" + requestsu.getParameter("pwsu") + "')");
                            outsu.println("<html>\n" +
                            "<head><title>Error</title></head>\n" +
                            "<body>\n" +
                            "<a href = '/loginpage/'>Congratulations, your account has been created, click to go back to the login page\n" +
                            "</body>\n" +
                            "</html>");
                        }

                    }else{
                        outsu.println("<html>\n" +
                        "<head><title>Error</title></head>\n" +
                        "<body>\n" +
                        "<a href = '/loginpage/signup.html'>Your password did not fulfull all the requirements, please try again</a>\n" +
                        "</body>\n" +
                        "</html>");
                    }
                }else{
                    outsu.println("<html>\n" +
                    "<head><title>Error</title></head>\n" +
                    "<body>\n" +
                    "<a href = '/loginpage/signup'>Username and/or password too long</a>\n" +
                    "</body>\n" +
                    "</html>");
                }
            }
        }catch(SQLException ex){
            ex.printStackTrace();
        }finally{
            outsu.close();
            try{
                if(stmnt != null){
                    stmnt.close();
                }
                if(connection != null){
                    connection.close();
                }
            }catch(SQLException ex){
                ex.printStackTrace();
            }
        }
    }
}

无论登录 servlet 是否位于类文件夹中,此 servlet 都可以正常工作。我认为这个 servlet 可能会干扰登录 servlet,但我不确定如何。 Web-xml 文件可能有问题,所以我会在这里发布,但我认为这不是问题的根源。

这里是:

 <?xml version="1.0" encoding="ISO-8859-1"?>
    <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>login</servlet-name>
          <servlet-class>login</servlet-class>
          <servlet-name>signup</servlet-name>
          <servlet-class>signup</servlet-class>
       </servlet>

       <!-- Note: All <servlet> elements MUST be grouped together and
             placed IN FRONT of the <servlet-mapping> elements -->

       <servlet-mapping>
          <servlet-name>login</servlet-name>
          <url-pattern>/login</url-pattern>
          <servlet-name>signup</servlet-name>
          <url-pattern>/signuppage</url-pattern>
       </servlet-mapping>
    </web-app>

我刚刚开始学习 Web 开发,我真的不太了解,所以任何帮助将不胜感激。谢谢!

*如果有帮助的话,我也可以把 html 页面放上去

【问题讨论】:

    标签: java tomcat servlets


    【解决方案1】:
       <servlet>
          <servlet-name>login</servlet-name>
          <servlet-class>login</servlet-class>
          <servlet-name>signup</servlet-name>
          <servlet-class>signup</servlet-class>
       </servlet>
    

    这没有任何意义。您需要两个 &lt;servlet&gt; 元素:每个 servlet 一个。

    &lt;servlet-mapping&gt; 也是如此。

    不知道为什么您仍在使用 XML,而不是简单地使用 @WebServlet 注释您的类。

    【讨论】:

      猜你喜欢
      • 2015-10-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2021-08-24
      • 2016-03-31
      • 2019-12-20
      • 1970-01-01
      • 2019-12-08
      相关资源
      最近更新 更多