【问题标题】:Why Servlet is not outputting this html?为什么 Servlet 不输出这个 html?
【发布时间】:2015-07-08 18:42:56
【问题描述】:

我正在学习将我的 servlet 连接到数据库。我的数据库中有两列(用户名,密码)。我想创建一个访问数据库的程序,将用户/密码(通过用户表单 html 发送)与 db 列中的值进行比较。当我尝试登录时,屏幕上什么也没有显示。

文件:

LoginServlet.java

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

public class LoginServlet extends HttpServlet{

public void init(){}

Connection con;
Statement st;
ResultSet rs;

public void service(HttpServletRequest req, HttpServletResponse res){
    try{

    res.setContentType("text/html");
    PrintWriter out=res.getWriter();
    out.println("<html><body>");
    out.println("<p>Servlet is loading</p>");



    String TheUser=req.getParameter("username");
    String ThePass=req.getParameter("password");

    try{

        Class.forName("oracle.jdbc.driver.OracleDriver");
              con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","pass");

        st=con.createStatement();
        rs=st.executeQuery("select Username,Password from AllUsers");
        String compareUser=rs.getString(1);
        String comparePass=rs.getString(2);



            if(TheUser.equals(compareUser)||ThePass.equals(comparePass)){

                out.println("<p>You are logged in as " + compareUser+" </p>");

            }
            else
                out.println("Wrong Combination");

            }

        }catch(Exception e){}

    }catch(ClassNotFoundException|IOException|ServletException f){
      f.printStackTrace();          
 }

out.println("</html></body>");
out.close();

}

public void destroy(){}
}

此文件编译并部署。

web.xml:

<web-app>

<servlet>
    <servlet-name>SignUpServlet</servlet-name>
    <servlet-class>SignUpServlet</servlet-class>

</servlet>

<servlet-mapping>
    <servlet-name>SignUpServlet</servlet-name>
    <url-pattern>/SignUp</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>LoginServlet</servlet-class>
</servlet>  

<servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>

</web-app>

log.html:

<html>
<body>
    <form name='loginForm' method='post' action='login'>

        Enter Username:
        <input type='text' name='username'>
        </br>

        Enter Password:
        <input type='password' name='password'>
        </br>
        <input type="submit" value="Submit">

    </form>
</body>
</html>

P.S: Servlet 正在加载。 &lt;p&gt;Servlet is loading &lt;/p&gt; 标签显示在浏览器上。

【问题讨论】:

  • 不要丢弃所有异常 (}catch(ClassNotFoundException|IOException|ServletException f){}),而是确保它们出现在您的日志文件中,例如与f.printStackTrace()。然后看看你的服务器看看是否发生了异常。
  • 与您的问题无关,请考虑1./确保所有打开的jdbc连接都已关闭(连接泄漏); 2./使用try-with-resources; 3./通过命名资源使用连接池(需要在您的服务器上进行一些设置); 4./局部变量的命名约定; 5./避免一概而论
  • @TimoSta 抓住了它。没有帮助,仍然没有任何显示。

标签: java servlets


【解决方案1】:

好的,我做到了。经过几个小时的尝试。我发现 db 游标从未出现在表的第一条记录上,这就是它没有出现的原因。 我将代码包装在一个while语句中:

rs=st.executeQuery("select Username,Password from AllUsers");

        while(rs.next()){
            String compareUser=rs.getString(1);
            String comparePass=rs.getString(2);

            if(TheUser.equals(compareUser)||ThePass.equals(comparePass)){

                out.println("<p>You are logged in as " +compareUser+"</p>");
                rs.close();
                st.close();
                con.close();


            }
            else{

                out.println("<p>Wrong Combination</p>");
                out.println("</br><a href='log.html'>Login</a></p>");

                rs.close();
                st.close();
                con.close();
            }
        }    

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

我希望如果其他人遇到这个问题,这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 2013-02-21
    • 2021-04-06
    • 2010-11-06
    • 1970-01-01
    • 2012-07-17
    相关资源
    最近更新 更多