Java servlet 在 Tomcat 中返回空白页

标签 java tomcat servlets

我最近尝试使用 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>

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

*如果有帮助,我也可以提供 html 页面

最佳答案

   <servlet>
      <servlet-name>login</servlet-name>
      <servlet-class>login</servlet-class>
      <servlet-name>signup</servlet-name>
      <servlet-class>signup</servlet-class>
   </servlet>

这毫无意义。你需要两个 <servlet>元素:每个 servlet 一个。

<servlet-mapping> 相同.

不确定为什么您仍在使用 XML,而不是简单地使用 @WebServlet 注释您的类.

关于Java servlet 在 Tomcat 中返回空白页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41640402/

相关文章:

java - 实例方法是如何存储的

java - 为什么在 Java 中使用 final 实例类变量?

http - 如何通过发送到 Tomcat WebApp 的 HTTP 请求传递一些参数?

spring - Tomcat 在 Spring Boot 应用程序中挂起

java - 静态资源的编码问题

security - UTF-8 字符编码是否会对 Web 应用程序造成任何安全隐患?

java - jax-ws 更改或包装 WSServlet

java - 如何在已扫描的字符串上使用分隔符而不声明另一个 Scanner 对象?

Java anti fillRect(填充所述矩形之外的所有内容)

spring - Tomcat 8 - 最大文件大小